drm/nouveau/kms/nv50-: Use downstream DP clock limits for mode validation
[linux-2.6-microblaze.git] / kernel / signal.c
index 6f16f7c..42b67d2 100644 (file)
@@ -2541,7 +2541,21 @@ bool get_signal(struct ksignal *ksig)
 
 relock:
        spin_lock_irq(&sighand->siglock);
-       current->jobctl &= ~JOBCTL_TASK_WORK;
+       /*
+        * Make sure we can safely read ->jobctl() in task_work add. As Oleg
+        * states:
+        *
+        * It pairs with mb (implied by cmpxchg) before READ_ONCE. So we
+        * roughly have
+        *
+        *      task_work_add:                          get_signal:
+        *      STORE(task->task_works, new_work);      STORE(task->jobctl);
+        *      mb();                                   mb();
+        *      LOAD(task->jobctl);                     LOAD(task->task_works);
+        *
+        * and we can rely on STORE-MB-LOAD [ in task_work_add].
+        */
+       smp_store_mb(current->jobctl, current->jobctl & ~JOBCTL_TASK_WORK);
        if (unlikely(current->task_works)) {
                spin_unlock_irq(&sighand->siglock);
                task_work_run();