]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - kernel/signal.c
mwifiex: pcie: read FROMDEVICE DMA-able memory with READ_ONCE()
[karo-tx-linux.git] / kernel / signal.c
index 29a410780aa912f4daacbba5882c8b190501d8e7..ff046b73ff2d309ce00fbd3bd8949a8f6f5fd297 100644 (file)
@@ -39,7 +39,7 @@
 #include <trace/events/signal.h>
 
 #include <asm/param.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #include <asm/unistd.h>
 #include <asm/siginfo.h>
 #include <asm/cacheflush.h>
@@ -587,7 +587,7 @@ int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
                        struct hrtimer *tmr = &tsk->signal->real_timer;
 
                        if (!hrtimer_is_queued(tmr) &&
-                           tsk->signal->it_real_incr.tv64 != 0) {
+                           tsk->signal->it_real_incr != 0) {
                                hrtimer_forward(tmr, tmr->base->get_time(),
                                                tsk->signal->it_real_incr);
                                hrtimer_restart(tmr);
@@ -2491,6 +2491,13 @@ void __set_current_blocked(const sigset_t *newset)
 {
        struct task_struct *tsk = current;
 
+       /*
+        * In case the signal mask hasn't changed, there is nothing we need
+        * to do. The current->blocked shouldn't be modified by other task.
+        */
+       if (sigequalsets(&tsk->blocked, newset))
+               return;
+
        spin_lock_irq(&tsk->sighand->siglock);
        __set_task_blocked(tsk, newset);
        spin_unlock_irq(&tsk->sighand->siglock);
@@ -2759,7 +2766,7 @@ int copy_siginfo_to_user(siginfo_t __user *to, const siginfo_t *from)
 int do_sigtimedwait(const sigset_t *which, siginfo_t *info,
                    const struct timespec *ts)
 {
-       ktime_t *to = NULL, timeout = { .tv64 = KTIME_MAX };
+       ktime_t *to = NULL, timeout = KTIME_MAX;
        struct task_struct *tsk = current;
        sigset_t mask = *which;
        int sig, ret = 0;
@@ -2779,7 +2786,7 @@ int do_sigtimedwait(const sigset_t *which, siginfo_t *info,
 
        spin_lock_irq(&tsk->sighand->siglock);
        sig = dequeue_signal(tsk, &mask, info);
-       if (!sig && timeout.tv64) {
+       if (!sig && timeout) {
                /*
                 * None ready, temporarily unblock those we're interested
                 * while we are sleeping in so that we'll be awakened when