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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DDC9DC433EF for ; Thu, 9 Dec 2021 11:51:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 441D86B0071; Thu, 9 Dec 2021 06:51:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3F1196B0073; Thu, 9 Dec 2021 06:51:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B8DC6B0074; Thu, 9 Dec 2021 06:51:42 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0059.hostedemail.com [216.40.44.59]) by kanga.kvack.org (Postfix) with ESMTP id 1CADF6B0071 for ; Thu, 9 Dec 2021 06:51:42 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id D556886E77 for ; Thu, 9 Dec 2021 11:51:31 +0000 (UTC) X-FDA: 78898090782.09.9E842B2 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf08.hostedemail.com (Postfix) with ESMTP id BAC0B160002 for ; Thu, 9 Dec 2021 11:51:30 +0000 (UTC) Received: by mail-pj1-f50.google.com with SMTP id j5-20020a17090a318500b001a6c749e697so5968334pjb.1 for ; Thu, 09 Dec 2021 03:51:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:to:cc:references :from:in-reply-to:content-transfer-encoding; bh=UtNBeYFsaWjUOBjcjiCmcLYkBZOBUTSUxLJTx5J2sWY=; b=l4IM/2R8RZYwYTIknCFyCrtU7GLyzKukzuPmqh7775f+gNUNOUQ7Uja91WlvqSoAjI ZIIg5oK8eSHumMKWdcyml7GQdEUZ/j9NWL3ndUg4jebvqmVg1H0LtrsOZxS7iAs3rxrA uWZRI+/EL0varxcrea2zI33Rt8tij/bexkJnApnlTQKUiG41B6V9slBQ1wWUx+lcjI0e FQ/uj/uHO17h32iPPnlIeWE9xgEIxiRAaTA0M0P6B6Qh34+yOGJFD4EWKnku1m2Rycbl zTKe5jYmVV3udd7YJfPIbTQ8HIGIyExhjZgAdLCoMQbLKfikQFijKPNzf0bp9FehXalH NT9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :to:cc:references:from:in-reply-to:content-transfer-encoding; bh=UtNBeYFsaWjUOBjcjiCmcLYkBZOBUTSUxLJTx5J2sWY=; b=BKUSB5oReXESxeqLy/TxrEStb8Xl1rseNXz3tl/CvPeZ3thC2MBwc5nsFtZuPg7PEi XbPtWWgtuTFYeGat5OIZ58/R3ZLZP0RSIi07qiXbhNWXrmrBR799c+UhRMfZybkxWuhG rZITsoONNcA7roJC1umZi9V7hAe2Ro0gkzBXawjO+I9EK5pthnAl909zXfp2QGAshrIy xE7up43aXMgtHcS3a/Rz7I7L754tO4GHh7YrTPYzv2ZTa38WWl2y08WITPCm6CKzgo+q sinL5skA2BEieAx8VoOuFNa+5IeWQ7tNzeSKRj5g1VZ0v3zF7SutSfGuj+IHhcBaRFNp Ameg== X-Gm-Message-State: AOAM533wZHBOiti63NX8AIi+reXLlrRtqajs/z86coCP+E56oE63nGLD XnvKTCgVVwQVnscW/s80Vic= X-Google-Smtp-Source: ABdhPJwvh5osQ1ikW22yT/NOsPI//T9UTSGuv0IrcDe4RFr8dawSNxeRL7Lw2RVTc5Lx0fjabA/Ahw== X-Received: by 2002:a17:902:f68b:b0:142:c60:475 with SMTP id l11-20020a170902f68b00b001420c600475mr66274169plg.8.1639050690387; Thu, 09 Dec 2021 03:51:30 -0800 (PST) Received: from [30.240.97.54] ([205.204.117.110]) by smtp.gmail.com with ESMTPSA id x9sm9099452pjq.50.2021.12.09.03.51.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Dec 2021 03:51:29 -0800 (PST) Message-ID: Date: Thu, 9 Dec 2021 19:51:24 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.2.1 Subject: Re: [PATCH v1 2/2] virtio-mem: prepare fake page onlining code for granularity smaller than MAX_ORDER - 1 To: David Hildenbrand , linux-kernel@vger.kernel.org Cc: "Michael S. Tsirkin" , Jason Wang , Zi Yan , Gavin Shan , Hui Zhu , Sebastien Boeuf , Pankaj Gupta , Wei Yang , virtualization@lists.linux-foundation.org, linux-mm@kvack.org References: <20211126134209.17332-1-david@redhat.com> <20211126134209.17332-3-david@redhat.com> From: Eric Ren In-Reply-To: <20211126134209.17332-3-david@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: BAC0B160002 X-Stat-Signature: 99aah1pipwgm1f7z4n7jo1j116bz53f8 Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="l4IM/2R8"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf08.hostedemail.com: domain of renzhengeek@gmail.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=renzhengeek@gmail.com X-HE-Tag: 1639050690-760186 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: Hi, On 2021/11/26 21:42, David Hildenbrand wrote: > Let's prepare our fake page onlining code for subblock size smaller tha= n > MAX_ORDER - 1: we might get called for ranges not covering properly > aligned MAX_ORDER - 1 pages. We have to detect the order to use > dynamically. > > Signed-off-by: David Hildenbrand > --- > drivers/virtio/virtio_mem.c | 26 +++++++++++++------------- > 1 file changed, 13 insertions(+), 13 deletions(-) > > diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c > index 03e1c5743699..50de7582c9f8 100644 > --- a/drivers/virtio/virtio_mem.c > +++ b/drivers/virtio/virtio_mem.c > @@ -1121,15 +1121,18 @@ static void virtio_mem_clear_fake_offline(unsig= ned long pfn, > */ > static void virtio_mem_fake_online(unsigned long pfn, unsigned long n= r_pages) > { > - const unsigned long max_nr_pages =3D MAX_ORDER_NR_PAGES; > + unsigned long order =3D MAX_ORDER - 1; > unsigned long i; > =20 > /* > - * We are always called at least with MAX_ORDER_NR_PAGES > - * granularity/alignment (e.g., the way subblocks work). All pages > - * inside such a block are alike. > + * We might get called for ranges that don't cover properly aligned > + * MAX_ORDER - 1 pages; however, we can only online properly aligned > + * pages with an order of MAX_ORDER - 1 at maximum. > */ > - for (i =3D 0; i < nr_pages; i +=3D max_nr_pages) { > + while (!IS_ALIGNED(pfn | nr_pages, 1 << order)) > + order--; > + > + for (i =3D 0; i < nr_pages; i +=3D 1 << order) { > struct page *page =3D pfn_to_page(pfn + i); > =20 > /* > @@ -1139,14 +1142,12 @@ static void virtio_mem_fake_online(unsigned lon= g pfn, unsigned long nr_pages) > * alike. > */ > if (PageDirty(page)) { > - virtio_mem_clear_fake_offline(pfn + i, max_nr_pages, > - false); > - generic_online_page(page, MAX_ORDER - 1); > + virtio_mem_clear_fake_offline(pfn + i, 1 << order, false); > + generic_online_page(page, order); > } else { > - virtio_mem_clear_fake_offline(pfn + i, max_nr_pages, > - true); > - free_contig_range(pfn + i, max_nr_pages); > - adjust_managed_page_count(page, max_nr_pages); > + virtio_mem_clear_fake_offline(pfn + i, 1 << order, true); > + free_contig_range(pfn + i, 1 << order); > + adjust_managed_page_count(page, 1 << order); In the loop, pfn + i, 1 << order are repeatedly calculated. 1 << order=20 is a step size, pfn + i=C2=A0 is each step position. Better to figure the numer once each iter? LGTL. LGTM. Reviewed-by: Eric Ren > } > } > } > @@ -2477,7 +2478,6 @@ static int virtio_mem_init_hotplug(struct virtio_= mem *vm) > /* > * We want subblocks to span at least MAX_ORDER_NR_PAGES and > * pageblock_nr_pages pages. This: > - * - Simplifies our fake page onlining code (virtio_mem_fake_online). > * - Is required for now for alloc_contig_range() to work reliably - > * it doesn't properly handle smaller granularity on ZONE_NORMAL. > */