diff options
Diffstat (limited to 'kernel/freezer.c')
-rw-r--r-- | kernel/freezer.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/kernel/freezer.c b/kernel/freezer.c index b8b562124ba9..11e32d419dec 100644 --- a/kernel/freezer.c +++ b/kernel/freezer.c | |||
@@ -129,21 +129,6 @@ out_unlock: | |||
129 | return ret; | 129 | return ret; |
130 | } | 130 | } |
131 | 131 | ||
132 | void cancel_freezing(struct task_struct *p) | ||
133 | { | ||
134 | unsigned long flags; | ||
135 | |||
136 | spin_lock_irqsave(&freezer_lock, flags); | ||
137 | if (freezing(p)) { | ||
138 | pr_debug(" clean up: %s\n", p->comm); | ||
139 | clear_freeze_flag(p); | ||
140 | spin_lock(&p->sighand->siglock); | ||
141 | recalc_sigpending_and_wake(p); | ||
142 | spin_unlock(&p->sighand->siglock); | ||
143 | } | ||
144 | spin_unlock_irqrestore(&freezer_lock, flags); | ||
145 | } | ||
146 | |||
147 | void __thaw_task(struct task_struct *p) | 132 | void __thaw_task(struct task_struct *p) |
148 | { | 133 | { |
149 | unsigned long flags; | 134 | unsigned long flags; |
@@ -153,10 +138,18 @@ void __thaw_task(struct task_struct *p) | |||
153 | * be visible to @p as waking up implies wmb. Waking up inside | 138 | * be visible to @p as waking up implies wmb. Waking up inside |
154 | * freezer_lock also prevents wakeups from leaking outside | 139 | * freezer_lock also prevents wakeups from leaking outside |
155 | * refrigerator. | 140 | * refrigerator. |
141 | * | ||
142 | * If !FROZEN, @p hasn't reached refrigerator, recalc sigpending to | ||
143 | * avoid leaving dangling TIF_SIGPENDING behind. | ||
156 | */ | 144 | */ |
157 | spin_lock_irqsave(&freezer_lock, flags); | 145 | spin_lock_irqsave(&freezer_lock, flags); |
158 | clear_freeze_flag(p); | 146 | clear_freeze_flag(p); |
159 | if (frozen(p)) | 147 | if (frozen(p)) { |
160 | wake_up_process(p); | 148 | wake_up_process(p); |
149 | } else { | ||
150 | spin_lock(&p->sighand->siglock); | ||
151 | recalc_sigpending_and_wake(p); | ||
152 | spin_unlock(&p->sighand->siglock); | ||
153 | } | ||
161 | spin_unlock_irqrestore(&freezer_lock, flags); | 154 | spin_unlock_irqrestore(&freezer_lock, flags); |
162 | } | 155 | } |