From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 03752C11F65 for ; Wed, 30 Jun 2021 06:59:01 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 71FDA61A1D for ; Wed, 30 Jun 2021 06:59:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 71FDA61A1D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=techsingularity.net Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id D59108D0182; Wed, 30 Jun 2021 02:58:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D080D8D017A; Wed, 30 Jun 2021 02:58:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BA8EA8D0182; Wed, 30 Jun 2021 02:58:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0135.hostedemail.com [216.40.44.135]) by kanga.kvack.org (Postfix) with ESMTP id 8F96C8D017A for ; Wed, 30 Jun 2021 02:58:59 -0400 (EDT) Received: from smtpin29.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 641D58249980 for ; Wed, 30 Jun 2021 06:58:59 +0000 (UTC) X-FDA: 78309487998.29.6252858 Received: from outbound-smtp62.blacknight.com (outbound-smtp62.blacknight.com [46.22.136.251]) by imf05.hostedemail.com (Postfix) with ESMTP id 9DFC65000289 for ; Wed, 30 Jun 2021 06:58:58 +0000 (UTC) Received: from mail.blacknight.com (pemlinmail05.blacknight.ie [81.17.254.26]) by outbound-smtp62.blacknight.com (Postfix) with ESMTPS id 10E8DFB095 for ; Wed, 30 Jun 2021 07:58:57 +0100 (IST) Received: (qmail 386 invoked from network); 30 Jun 2021 06:58:56 -0000 Received: from unknown (HELO techsingularity.net) (mgorman@techsingularity.net@[84.203.17.255]) by 81.17.254.9 with ESMTPSA (AES256-SHA encrypted, authenticated); 30 Jun 2021 06:58:56 -0000 Date: Wed, 30 Jun 2021 07:58:55 +0100 From: Mel Gorman To: Jesper Dangaard Brouer Cc: Chuck Lever , linux-nfs@vger.kernel.org, linux-mm@kvack.org, brouer@redhat.com Subject: Re: [PATCH v3] mm/page_alloc: Further fix __alloc_pages_bulk() return value Message-ID: <20210630065855.GH3840@techsingularity.net> References: <162497449506.16614.7781489905877008435.stgit@klimt.1015granger.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Authentication-Results: imf05.hostedemail.com; dkim=none; spf=pass (imf05.hostedemail.com: domain of mgorman@techsingularity.net designates 46.22.136.251 as permitted sender) smtp.mailfrom=mgorman@techsingularity.net; dmarc=none X-Stat-Signature: hcb96cqytrs9no69ont3eq87qhatweey X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 9DFC65000289 X-HE-Tag: 1625036338-907298 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Jun 29, 2021 at 06:01:12PM +0200, Jesper Dangaard Brouer wrote: > On 29/06/2021 15.48, Chuck Lever wrote: >=20 > > The call site in __page_pool_alloc_pages_slow() also seems to be > > confused on this matter. It should be attended to by someone who > > is familiar with that code. >=20 > I don't think we need a fix for __page_pool_alloc_pages_slow(), as the = array > is guaranteed to be empty. >=20 > But a fix would look like this: >=20 > diff --git a/net/core/page_pool.c b/net/core/page_pool.c > index c137ce308c27..1b04538a3da3 100644 > --- a/net/core/page_pool.c > +++ b/net/core/page_pool.c > @@ -245,22 +245,23 @@ static struct page > *__page_pool_alloc_pages_slow(struct page_pool *pool, > =A0=A0=A0=A0=A0=A0=A0 if (unlikely(pp_order)) > =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return __page_pool_alloc_= page_order(pool, gfp); >=20 > =A0=A0=A0=A0=A0=A0=A0 /* Unnecessary as alloc cache is empty, but guara= ntees zero count */ > -=A0=A0=A0=A0=A0=A0 if (unlikely(pool->alloc.count > 0)) > +=A0=A0=A0=A0=A0=A0 if (unlikely(pool->alloc.count > 0))=A0=A0 // ^^^^^= ^^^^^^^^^^^^^^^^^ > =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return pool->alloc.cache[= --pool->alloc.count]; >=20 > =A0=A0=A0=A0=A0=A0=A0 /* Mark empty alloc.cache slots "empty" for alloc= _pages_bulk_array > */ > =A0=A0=A0=A0=A0=A0=A0 memset(&pool->alloc.cache, 0, sizeof(void *) * bu= lk); >=20 > +=A0=A0=A0=A0=A0=A0 /* bulk API ret value also count existing pages, bu= t array is empty > */ > =A0=A0=A0=A0=A0=A0=A0 nr_pages =3D alloc_pages_bulk_array(gfp, bulk, po= ol->alloc.cache); > =A0=A0=A0=A0=A0=A0=A0 if (unlikely(!nr_pages)) > =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return NULL; >=20 > =A0=A0=A0=A0=A0=A0=A0 /* Pages have been filled into alloc.cache array,= but count is zero > and > =A0=A0=A0=A0=A0=A0=A0=A0 * page element have not been (possibly) DMA ma= pped. > =A0=A0=A0=A0=A0=A0=A0=A0 */ > -=A0=A0=A0=A0=A0=A0 for (i =3D 0; i < nr_pages; i++) { > +=A0=A0=A0=A0=A0=A0 for (i =3D pool->alloc.count; i < nr_pages; i++) { That last part would break as the loop is updating pool->alloc_count. Just setting pool->alloc_count =3D nr_pages would break if PP_FLAG_DMA_MA= P was set and page_pool_dma_map failed. Right? --=20 Mel Gorman SUSE Labs