From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> To: Tejun Heo <tj@kernel.org> Cc: lizefan@huawei.com, cgroups@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] sched, cgroup: reorganize threadgroup locking Date: Thu, 14 May 2015 10:09:13 +0900 [thread overview] Message-ID: <20150514010913.GA4441@swordfish> (raw) In-Reply-To: <1431549318-16756-2-git-send-email-tj@kernel.org> Hello, On (05/13/15 16:35), Tejun Heo wrote: [..] > -static inline void threadgroup_lock(struct task_struct *tsk) > +static inline void threadgroup_change_begin(struct task_struct *tsk) > { > - down_write(&tsk->signal->group_rwsem); > + might_sleep(); I think cgroup_threadgroup_change_begin()->down_read() already does might_sleep() check. -ss > + cgroup_threadgroup_change_begin(tsk); > } > > /** > - * threadgroup_unlock - unlock threadgroup > - * @tsk: member task of the threadgroup to unlock > + * threadgroup_change_end - mark the end of changes to a threadgroup > + * @tsk: task causing the changes > * > - * Reverse threadgroup_lock(). > + * See threadgroup_change_begin(). > */ > -static inline void threadgroup_unlock(struct task_struct *tsk) > +static inline void threadgroup_change_end(struct task_struct *tsk) > { > - up_write(&tsk->signal->group_rwsem); > + cgroup_threadgroup_change_end(tsk); > } > -#else > -static inline void threadgroup_change_begin(struct task_struct *tsk) {} > -static inline void threadgroup_change_end(struct task_struct *tsk) {} > -static inline void threadgroup_lock(struct task_struct *tsk) {} > -static inline void threadgroup_unlock(struct task_struct *tsk) {} > -#endif > > #ifndef __HAVE_THREAD_FUNCTIONS > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index cfa27f9..9309452 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -848,6 +848,48 @@ static struct css_set *find_css_set(struct css_set *old_cset, > return cset; > } > > +void cgroup_threadgroup_change_begin(struct task_struct *tsk) > +{ > + down_read(&tsk->signal->group_rwsem); > +} > + > +void cgroup_threadgroup_change_end(struct task_struct *tsk) > +{ > + up_read(&tsk->signal->group_rwsem); > +} > + > +/** > + * threadgroup_lock - lock threadgroup > + * @tsk: member task of the threadgroup to lock > + * > + * Lock the threadgroup @tsk belongs to. No new task is allowed to enter > + * and member tasks aren't allowed to exit (as indicated by PF_EXITING) or > + * change ->group_leader/pid. This is useful for cases where the threadgroup > + * needs to stay stable across blockable operations. > + * > + * fork and exit explicitly call threadgroup_change_{begin|end}() for > + * synchronization. While held, no new task will be added to threadgroup > + * and no existing live task will have its PF_EXITING set. > + * > + * de_thread() does threadgroup_change_{begin|end}() when a non-leader > + * sub-thread becomes a new leader. > + */ > +static void threadgroup_lock(struct task_struct *tsk) > +{ > + down_write(&tsk->signal->group_rwsem); > +} > + > +/** > + * threadgroup_unlock - unlock threadgroup > + * @tsk: member task of the threadgroup to unlock > + * > + * Reverse threadgroup_lock(). > + */ > +static inline void threadgroup_unlock(struct task_struct *tsk) > +{ > + up_write(&tsk->signal->group_rwsem); > +} > + > static struct cgroup_root *cgroup_root_from_kf(struct kernfs_root *kf_root) > { > struct cgroup *root_cgrp = kf_root->kn->priv; > -- > 2.1.0 > > -- > To unsubscribe from this list: send the line "unsubscribe cgroups" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
WARNING: multiple messages have this Message-ID (diff)
From: Sergey Senozhatsky <sergey.senozhatsky.work-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> To: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: Re: [PATCH 1/3] sched, cgroup: reorganize threadgroup locking Date: Thu, 14 May 2015 10:09:13 +0900 [thread overview] Message-ID: <20150514010913.GA4441@swordfish> (raw) In-Reply-To: <1431549318-16756-2-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Hello, On (05/13/15 16:35), Tejun Heo wrote: [..] > -static inline void threadgroup_lock(struct task_struct *tsk) > +static inline void threadgroup_change_begin(struct task_struct *tsk) > { > - down_write(&tsk->signal->group_rwsem); > + might_sleep(); I think cgroup_threadgroup_change_begin()->down_read() already does might_sleep() check. -ss > + cgroup_threadgroup_change_begin(tsk); > } > > /** > - * threadgroup_unlock - unlock threadgroup > - * @tsk: member task of the threadgroup to unlock > + * threadgroup_change_end - mark the end of changes to a threadgroup > + * @tsk: task causing the changes > * > - * Reverse threadgroup_lock(). > + * See threadgroup_change_begin(). > */ > -static inline void threadgroup_unlock(struct task_struct *tsk) > +static inline void threadgroup_change_end(struct task_struct *tsk) > { > - up_write(&tsk->signal->group_rwsem); > + cgroup_threadgroup_change_end(tsk); > } > -#else > -static inline void threadgroup_change_begin(struct task_struct *tsk) {} > -static inline void threadgroup_change_end(struct task_struct *tsk) {} > -static inline void threadgroup_lock(struct task_struct *tsk) {} > -static inline void threadgroup_unlock(struct task_struct *tsk) {} > -#endif > > #ifndef __HAVE_THREAD_FUNCTIONS > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index cfa27f9..9309452 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -848,6 +848,48 @@ static struct css_set *find_css_set(struct css_set *old_cset, > return cset; > } > > +void cgroup_threadgroup_change_begin(struct task_struct *tsk) > +{ > + down_read(&tsk->signal->group_rwsem); > +} > + > +void cgroup_threadgroup_change_end(struct task_struct *tsk) > +{ > + up_read(&tsk->signal->group_rwsem); > +} > + > +/** > + * threadgroup_lock - lock threadgroup > + * @tsk: member task of the threadgroup to lock > + * > + * Lock the threadgroup @tsk belongs to. No new task is allowed to enter > + * and member tasks aren't allowed to exit (as indicated by PF_EXITING) or > + * change ->group_leader/pid. This is useful for cases where the threadgroup > + * needs to stay stable across blockable operations. > + * > + * fork and exit explicitly call threadgroup_change_{begin|end}() for > + * synchronization. While held, no new task will be added to threadgroup > + * and no existing live task will have its PF_EXITING set. > + * > + * de_thread() does threadgroup_change_{begin|end}() when a non-leader > + * sub-thread becomes a new leader. > + */ > +static void threadgroup_lock(struct task_struct *tsk) > +{ > + down_write(&tsk->signal->group_rwsem); > +} > + > +/** > + * threadgroup_unlock - unlock threadgroup > + * @tsk: member task of the threadgroup to unlock > + * > + * Reverse threadgroup_lock(). > + */ > +static inline void threadgroup_unlock(struct task_struct *tsk) > +{ > + up_write(&tsk->signal->group_rwsem); > +} > + > static struct cgroup_root *cgroup_root_from_kf(struct kernfs_root *kf_root) > { > struct cgroup *root_cgrp = kf_root->kn->priv; > -- > 2.1.0 > > -- > To unsubscribe from this list: send the line "unsubscribe cgroups" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
next prev parent reply other threads:[~2015-05-14 1:08 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-05-13 20:35 [PATCHSET] cgroup, sched: restructure threadgroup locking and replace it with a percpu_rwsem Tejun Heo 2015-05-13 20:35 ` Tejun Heo 2015-05-13 20:35 ` [PATCH 1/3] sched, cgroup: reorganize threadgroup locking Tejun Heo 2015-05-13 20:35 ` Tejun Heo 2015-05-14 1:09 ` Sergey Senozhatsky [this message] 2015-05-14 1:09 ` Sergey Senozhatsky 2015-05-14 15:17 ` Tejun Heo 2015-05-14 15:17 ` Tejun Heo 2015-05-13 20:35 ` [PATCH 2/3] sched, cgroup: replace signal_struct->group_rwsem with a global percpu_rwsem Tejun Heo 2015-05-19 15:16 ` Peter Zijlstra 2015-05-19 15:51 ` Tejun Heo 2015-05-19 15:51 ` Tejun Heo 2015-05-20 10:05 ` Zefan Li 2015-05-20 10:05 ` Zefan Li 2015-05-21 20:39 ` Tejun Heo 2015-05-21 20:39 ` Tejun Heo 2015-05-24 2:35 ` Zefan Li 2015-05-24 2:35 ` Zefan Li 2015-05-13 20:35 ` [PATCH 3/3] cgroup: simplify threadgroup locking Tejun Heo 2015-05-18 16:34 ` [PATCHSET] cgroup, sched: restructure threadgroup locking and replace it with a percpu_rwsem Tejun Heo 2015-05-18 16:34 ` Tejun Heo 2015-05-18 20:06 ` Peter Zijlstra 2015-05-18 20:06 ` Peter Zijlstra 2015-05-27 0:34 ` Tejun Heo 2015-05-27 0:34 ` Tejun Heo
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20150514010913.GA4441@swordfish \ --to=sergey.senozhatsky.work@gmail.com \ --cc=cgroups@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lizefan@huawei.com \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tj@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.