提交 19a4fcb5 编写于 作者: O Oleg Nesterov 提交者: Linus Torvalds

[PATCH] kill sigqueue->lock

This lock is used in sigqueue_free(), but it is always equal to
current->sighand->siglock, so we don't need to keep it in the struct
sigqueue.
Signed-off-by: NOleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 932aeafb
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
struct sigqueue { struct sigqueue {
struct list_head list; struct list_head list;
spinlock_t *lock;
int flags; int flags;
siginfo_t info; siginfo_t info;
struct user_struct *user; struct user_struct *user;
......
...@@ -277,7 +277,6 @@ static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags, ...@@ -277,7 +277,6 @@ static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
} else { } else {
INIT_LIST_HEAD(&q->list); INIT_LIST_HEAD(&q->list);
q->flags = 0; q->flags = 0;
q->lock = NULL;
q->user = get_uid(t->user); q->user = get_uid(t->user);
} }
return(q); return(q);
...@@ -1371,11 +1370,12 @@ void sigqueue_free(struct sigqueue *q) ...@@ -1371,11 +1370,12 @@ void sigqueue_free(struct sigqueue *q)
* pending queue. * pending queue.
*/ */
if (unlikely(!list_empty(&q->list))) { if (unlikely(!list_empty(&q->list))) {
read_lock(&tasklist_lock); spinlock_t *lock = &current->sighand->siglock;
spin_lock_irqsave(q->lock, flags); read_lock(&tasklist_lock);
spin_lock_irqsave(lock, flags);
if (!list_empty(&q->list)) if (!list_empty(&q->list))
list_del_init(&q->list); list_del_init(&q->list);
spin_unlock_irqrestore(q->lock, flags); spin_unlock_irqrestore(lock, flags);
read_unlock(&tasklist_lock); read_unlock(&tasklist_lock);
} }
q->flags &= ~SIGQUEUE_PREALLOC; q->flags &= ~SIGQUEUE_PREALLOC;
...@@ -1414,7 +1414,6 @@ send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p) ...@@ -1414,7 +1414,6 @@ send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
goto out; goto out;
} }
q->lock = &p->sighand->siglock;
list_add_tail(&q->list, &p->pending.list); list_add_tail(&q->list, &p->pending.list);
sigaddset(&p->pending.signal, sig); sigaddset(&p->pending.signal, sig);
if (!sigismember(&p->blocked, sig)) if (!sigismember(&p->blocked, sig))
...@@ -1462,7 +1461,6 @@ send_group_sigqueue(int sig, struct sigqueue *q, struct task_struct *p) ...@@ -1462,7 +1461,6 @@ send_group_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
* We always use the shared queue for process-wide signals, * We always use the shared queue for process-wide signals,
* to avoid several races. * to avoid several races.
*/ */
q->lock = &p->sighand->siglock;
list_add_tail(&q->list, &p->signal->shared_pending.list); list_add_tail(&q->list, &p->signal->shared_pending.list);
sigaddset(&p->signal->shared_pending.signal, sig); sigaddset(&p->signal->shared_pending.signal, sig);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册