> -----邮件原件----- > 发件人: linux-kernel-ow...@vger.kernel.org > [mailto:linux-kernel-ow...@vger.kernel.org] 代表 Andrew Morton > 发送时间: 2019年3月8日 2:10 > 收件人: Li,Rongqing <lirongq...@baidu.com> > 抄送: linux-kernel@vger.kernel.org; Davidlohr Bueso <dbu...@suse.de>; > Dominik Brodowski <li...@dominikbrodowski.net>; Manfred Spraul > <manf...@colorfullife.com>; Arnd Bergmann <a...@arndb.de> > 主题: Re: [PATCH] ipc: prevent lockup on alloc_msg and free_msg > > On Thu, 7 Mar 2019 16:10:22 +0800 Li RongQing <lirongq...@baidu.com> > wrote: > > > From: Li Rongqing <lirongq...@baidu.com> > > > > msgctl10 of ltp triggers the following lockup When CONFIG_KASAN is > > enabled on large memory SMP systems, the pages initialization can take > > a long time, if msgctl10 requests a huge block memory, and it will > > block rcu scheduler, so release cpu actively. > > > > ... > > > > Signed-off-by: Zhang Yu <zhangy...@baidu.com> > > Signed-off-by: Li RongQing <lirongq...@baidu.com> > > This signoff ordering somewhat implies that Zhang Yu was the author. > But you added "From: Li Rongqing", so you will be recorded as the patch's > author. Is this correct? > Thanks for your review. I will revert this order
> > --- a/ipc/msgutil.c > > +++ b/ipc/msgutil.c > > @@ -18,6 +18,7 @@ > > #include <linux/utsname.h> > > #include <linux/proc_ns.h> > > #include <linux/uaccess.h> > > +#include <linux/sched.h> > > > > #include "util.h" > > > > @@ -72,6 +73,7 @@ static struct msg_msg *alloc_msg(size_t len) > > seg->next = NULL; > > pseg = &seg->next; > > len -= alen; > > + cond_resched(); > > } > > This looks OK. > > > return msg; > > @@ -178,5 +180,6 @@ void free_msg(struct msg_msg *msg) > > struct msg_msgseg *tmp = seg->next; > > kfree(seg); > > seg = tmp; > > + cond_resched(); > > } > > This does not. mqueue_evict_inode() (at least) calls free_msg() from under > spin_lock(). I will try to fix it by moving the free_msg() out of spinlock , thanks -RongQing