From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756425AbdEVLwE (ORCPT ); Mon, 22 May 2017 07:52:04 -0400 Received: from mx2.suse.de ([195.135.220.15]:46226 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755789AbdEVLwC (ORCPT ); Mon, 22 May 2017 07:52:02 -0400 Date: Mon, 22 May 2017 13:51:52 +0200 From: Michal Hocko To: Wei Yongjun Cc: jinqian@android.com, gregkh@linuxfoundation.org, lstoakes@gmail.com, jack@suse.cz, christian.koenig@amd.com, Wei Yongjun , linux-kernel@vger.kernel.org Subject: Re: [PATCH] goldfish_pipe: use GFP_ATOMIC under spin lock Message-ID: <20170522115152.GH8509@dhcp22.suse.cz> References: <20170521004546.29795-1-weiyj.lk@gmail.com> <20170521074836.GA24459@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170521074836.GA24459@dhcp22.suse.cz> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun 21-05-17 09:48:36, Michal Hocko wrote: > On Sun 21-05-17 00:45:46, Wei Yongjun wrote: > > From: Wei Yongjun > > > > The function get_free_pipe_id_locked() is called from > > goldfish_pipe_open() with a lock is held, so we should > > use GFP_ATOMIC instead of GFP_KERNEL. > > Why is GFP_NOWAIT insufficient? Does this path needs an access to memory > reserves? And now when looking at the code more deeply, wouldn't it be much better to simply do the allocation outside of the spin lock and do assignments with the lock held? > > > Signed-off-by: Wei Yongjun > > --- > > drivers/platform/goldfish/goldfish_pipe.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c > > index 2de1e60..5f36721 100644 > > --- a/drivers/platform/goldfish/goldfish_pipe.c > > +++ b/drivers/platform/goldfish/goldfish_pipe.c > > @@ -704,7 +704,7 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev) > > /* Reallocate the array */ > > u32 new_capacity = 2 * dev->pipes_capacity; > > struct goldfish_pipe **pipes = > > - kcalloc(new_capacity, sizeof(*pipes), GFP_KERNEL); > > + kcalloc(new_capacity, sizeof(*pipes), GFP_ATOMIC); > > if (!pipes) > > return -ENOMEM; > > memcpy(pipes, dev->pipes, sizeof(*pipes) * dev->pipes_capacity); > > > > -- > Michal Hocko > SUSE Labs -- Michal Hocko SUSE Labs