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 A0160C3DA61 for ; Wed, 24 Jul 2024 22:11:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CACB66B007B; Wed, 24 Jul 2024 18:11:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C5CE86B0083; Wed, 24 Jul 2024 18:11:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B24376B0085; Wed, 24 Jul 2024 18:11:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 9380F6B007B for ; Wed, 24 Jul 2024 18:11:19 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 1D314140C70 for ; Wed, 24 Jul 2024 22:11:19 +0000 (UTC) X-FDA: 82376043078.18.1D47565 Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com [209.85.222.47]) by imf07.hostedemail.com (Postfix) with ESMTP id 533574001E for ; Wed, 24 Jul 2024 22:11:17 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NO74Vy5Z; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.47 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721859038; a=rsa-sha256; cv=none; b=vTu2C0zrYLULhF5WGWjXM3pAVx5uHNHn1NyRx7zZS+pUabG8mKPS0RksBqBvBJidChPKjg OY/o3r26z1AptbOvjHfBbj+K48g4NTyj7AvQ4qcLxknpW48ptAGWlBbunomelNKHP4vsMq QAv9DL7atcZLHhiwgdAPRmGc76pJDdI= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NO74Vy5Z; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.222.47 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721859038; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=uTK61uiEhYkh2o7tZZhPgecuOC2jAkgOYa/z/O56iTM=; b=6W3OS+zlUMe2QKavivgIiUT8Lofl1Mll+qAsQ0Vhpx/iKPZZSgxQEaAXlYiAJSdbs0Qvyc yaw91fieky1As5Gi7oTLhTjz+gi8Nz5Ri3rOlMUQoBMezGb1L7tU4DRcDLQteNqLGJw2yG IGJKjMKuZXuqaGq1PEuPKn40LW3kbDw= Received: by mail-ua1-f47.google.com with SMTP id a1e0cc1a2514c-825dc62725cso77518241.3 for ; Wed, 24 Jul 2024 15:11:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721859076; x=1722463876; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=uTK61uiEhYkh2o7tZZhPgecuOC2jAkgOYa/z/O56iTM=; b=NO74Vy5ZDAJeKq0lFh+WurpaXGvWDvtazKvq1+Yd6RSCpTP1na2f3yaiwFG8iKJZmK a5RiC8POuJOBcm4/Dy1LBCfzTVxxb7MsFzKP8FCbme8moENO16uxTzyuq7CiVXlGoj/d rCRHhFrvO4VCkEWDBnmAMEDq7HpjF7CFK4DGpBamc6rXCyafwD2Hx288h9TCd+oPjPEP 0S48+m1VCgCDPBGdEzbBpPifDAtV791ucFUy6iwpzW3ZRpYBS+j0xdb92FRvJsILmcCn NE+Tb4Pa4i+sTN9Rg/eUzyhPyW/UlZ7cMzF3x8j1dPJ2kRzTnr8Py+S33wcLtwiJj7SD 2bLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721859076; x=1722463876; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uTK61uiEhYkh2o7tZZhPgecuOC2jAkgOYa/z/O56iTM=; b=aJjptqmzLm0DURh10F2pA8fpRylWOXADpAJA/djM2C/B7BTVDdtisMBjCRaSVEfNfv c/q5wD3aQAaJRPuhjVH4EH1zjcVBHQisRPwy1ux28laHkTEzgx1t+VVs5XygNckqQda1 gKXPgIZ/RCDRgo/bhJP0i+nj3mM3XCs/MQYZaOYQdmAvA7lah35DGW6si2dK804Uwn5P BBDwW4xZhqyDLiQDy3nTELIp1fp8zFK0jQnK5qy+fBNohh904s6BZ6YDbLxwu6Xa4HjT ARPHT6ua64QVMpyWvflVISrO1WpAaWcNIN1Amna6FthQVlPMon3IwnZIhTJ0pDBUbvx6 4f7Q== X-Forwarded-Encrypted: i=1; AJvYcCVxro6yJGKkwN6ZyfSqy+aOsNiyQorW1AbFWIHWrlzpUOKaT62ssbhtSx7Fp7XaFRN3IaTT8u9K3OViWnmsl9tbG1w= X-Gm-Message-State: AOJu0YyVTD9nso9SYjCNQmilln6qzYVyZwlR9roamup6fBMMmSIhT48k Lp1NqzJ1HLeUs5hS7fhl7WFqPeepeb6wo5I8anb9xyO4udspqnkSLOEwECJzl04sse59oD7vUTi RNqcMhrEofn30Nox4N983yGTKafY= X-Google-Smtp-Source: AGHT+IGFQF3HjjwFKtP+DQYIsr8zKt9kM8i6tIBiJ8XE5vZgcuUYlYszg+OZVdedG73qnE+rtlN2f9ddcEFNJ2kDABY= X-Received: by 2002:a05:6102:5044:b0:493:ce48:a2ed with SMTP id ada2fe7eead31-493d9b21f2bmr133373137.29.1721859076204; Wed, 24 Jul 2024 15:11:16 -0700 (PDT) MIME-Version: 1.0 References: <20240724181916.31776-1-hailong.liu@oppo.com> <20240724182827.nlgdckimtg2gwns5@oppo.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Thu, 25 Jul 2024 10:11:04 +1200 Message-ID: Subject: Re: [RFC PATCH v1] mm/vmalloc: fix incorrect __vmap_pages_range_noflush() if vm_area_alloc_pages() from high order fallback to order0 To: Matthew Wilcox Cc: "Hailong.Liu" , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , Lorenzo Stoakes , Vlastimil Babka , Michal Hocko , "Tangquan . Zheng" , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 533574001E X-Stat-Signature: 14iyoz8sqdx89j6iek7g3paizeqhygcg X-Rspam-User: X-HE-Tag: 1721859077-94507 X-HE-Meta: U2FsdGVkX19r7C8qeEWrYko2uiKqOLIm94NCEvkuInR2pF/523opzhYXsH6LF3HhJuVsdAqdrPP1FsMNn9QAC+6FD1gj2E0A9ebq0m2avHpyncqN2WzeFhjaHetNOoLwUpege9/0uru8MrjR8/mdbzEweWrHUUy9Pik9tHhcSslEMbDaw79Ay2iPx0FO0Z8ofMHtNjxcOSbSSOv5JyMk3rEqiJTENdrtkBDgwd9syBYJxmMePTRkqyZVRYGrkUNduuboIedYZRtH1Jm6ogPMkn6QGo7m/U003XS8byAgWElnts/4V02zc5db0Kd9C2/pkmbzdsKeul0vrqsfkyvhf1msh7BIubGAWCJgt7R1txAP4ZMdyhHxBuzPo2tTt3CBzDEcqjo1hpsdC3DGh+lPNqprxgKVWVxMHdC6lUkpgc/CreErvkV+HEka4Oq+xunNELqjHiX92qtPlLXgc8oLfpt84EIpMDLgjdQC8OIODlbAMfVb4qYURh1u0WA00D+dssFUhv9r4nOEaZsRB3uV3xJBIxwUUSQOWyXZryiAd16KlixAQZm6NBN+SoCP/L8VuDjpcCieVTbsFYpi+NhgP5svyoBkFOU7nWOPKKGy6d0ItExwDx3TbnAG21KIuFhXklfAoZLGYMLb8WMFubzwcvJY/rAoFkdtUXiGSthLAv1M/8AKRTpLZc/23evdOqGGeY1JwlrntglDYS03Zu/rraOPIYFwNFwip5S+O4cIAHk7CMXPkWAEGpXXBhWG2ve25blhw+oxhKJWrtL5dTrmG+Ya38RA2Qg7NFwxbf5ZnCwpq1unFbdfOMZzsM6FMsMuQsmNkW5Fro8uVVk8R9CJMD0Eg2QBCRMaaFaJ1pbjiP6x/FhuNqxm3UaYo+OlgVz6cFDjMZNXOHyuqvI6Y4lEg34ANQIR54D19mHCt0TP5QrcH14HqeST4l/O7UC+y8H7R2vidL7V6cPPFKP9dli XGQoMQ8T lrK0bF5La9q/aigczau7hMZUYP79LMNm3tCtga5jr7M7xwWYayuVjrm8ny1XjkJLjD6ZvoBig/e7ZAmCmYWsOoKKJe5gfUFf0QQX1eGfqIddNPrA5Q/u9jkeNFq/Gh6uCKG7PW4fAYWJGihuxWjmc9TPcIa7l/2jrc0OshFoxITJcwAtAYSUOnX1u177hkbchg2TyuuiuEqc7lNNkzOCHPN2FpGyh9JG48ob/7ECt9lXQsjPLLO6y5WO0+fSqRUAGHW/UpsYLBJ30H4lwDxMV4wifNCO7uVTZ4dO+76aNpC9oheX01w7XHcXitTHkBOK1MjNfaVzpOiH9hXNZxLB+HKo5cgVoHmvVoo5uqRgu5wftdIYSbwMO0V9wqFr7MWWli/nVnOLALCXAF7UEshUuoMrZxQ== 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: List-Subscribe: List-Unsubscribe: On Thu, Jul 25, 2024 at 8:02=E2=80=AFAM Matthew Wilcox wrote: > > On Thu, Jul 25, 2024 at 02:28:27AM +0800, Hailong.Liu wrote: > > > if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMALLOC) || > > > - page_shift =3D=3D PAGE_SHIFT) > > > - return vmap_small_pages_range_noflush(addr, end, prot, pa= ges); > > > + page_shift =3D=3D PAGE_SHIFT || > > > + page_private(pages[0]) =3D=3D VM_AREA_ALLOC_PAGES= _FALLBACK) { > > > + int ret =3D vmap_small_pages_range_noflush(addr, end, pro= t, pages); > > > + > > > + set_page_private(pages[0], 0); > > > + return ret; > > > + } > > > > > > for (i =3D 0; i < nr; i +=3D 1U << (page_shift - PAGE_SHIFT)) { > > > int err; > > > @@ -3583,6 +3590,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid, > > > > > > /* fall back to the zero order allocations */ > > > alloc_gfp |=3D __GFP_NOFAIL; > > > + fallback =3D true; > > Sry for my mistake, I forget define fallback here. > > BTW, This is not the optimal solution. Does anyone have a better idea? = Glad to > > hear:) > > Yeah, I really don't like this approach. You could return a small > struct indicating both nr_allocated and whether you had to fall back. > Or you could pass a bool * parameter. They're both pretty nasty. Yes, I feel returning a bool won't work very well. the result could be a mixture of PMD and PTE if the allocated pages are larger than a PMD. For example, if we allocate 8MB, it might result in the first 4MB being 2* PMD, and the remaining 4MB being PTE order-0 pages. I am also curious what will happen if we allocate 3MB(1PMD + some PTEs), is the below doing the correct mapping? do { ret =3D vmap_pages_range(addr, addr + size, prot, area->pag= es, page_shift); if (nofail && (ret < 0)) schedule_timeout_uninterruptible(1); } while (nofail && (ret < 0)); Is it possible we have only mapped the first 2MB if page_shift is PMD? Thanks Barry