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 B9AADC021B1 for ; Thu, 20 Feb 2025 12:05:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2E37C2802D0; Thu, 20 Feb 2025 07:05:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 21DCC2802C6; Thu, 20 Feb 2025 07:05:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0BE1E2802D0; Thu, 20 Feb 2025 07:05:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E034B2802C6 for ; Thu, 20 Feb 2025 07:05:21 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 69EF212101B for ; Thu, 20 Feb 2025 12:05:21 +0000 (UTC) X-FDA: 83140192842.11.059D55D Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) by imf07.hostedemail.com (Postfix) with ESMTP id 68C1D4000F for ; Thu, 20 Feb 2025 12:05:19 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="dbRz1/Z3"; spf=pass (imf07.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.41 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740053119; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=THBQ8rmEsPvpqpvxaWqxGrUia96m2+SW0Egbj+rhtyc=; b=iBz4744uv6UO5u/yt7UrGKckejSAt96bBTPb31DoQTmGv0UMwRrBAzGYtSfqghnQu4ylI5 9s2BNAi1wVY/GP3ndSW0x1c8+9gCv9c/nT1ythEmX8Kv3HyR9hjzYShlUkiJIUXrlHNlE9 HBCFMQIn0vkzL09jJQA7khGJMopUtms= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="dbRz1/Z3"; spf=pass (imf07.hostedemail.com: domain of urezki@gmail.com designates 209.85.167.41 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740053119; a=rsa-sha256; cv=none; b=aVqgbKvmspIiHspTZIjLUtQtS6N+9BX41jsNlx4RQYYqORbTNrnYVP1f3fGiF/3qMDWWr/ CCVCw3zsoCc51ltNgur9Jhn6O2Yz3nC4unoILaC06OpOWNH5MXfaBbsMhehbhKgHhSezhS iNfkbid/bokQ6ka0BCx/ILUeDlJPirM= Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-54298ec925bso1425989e87.3 for ; Thu, 20 Feb 2025 04:05:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740053117; x=1740657917; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=THBQ8rmEsPvpqpvxaWqxGrUia96m2+SW0Egbj+rhtyc=; b=dbRz1/Z3fVGR4MwzgD5bqxJRPNCqx4K1mWD/ZxdbTC2ifHuiARcV1VvrRdkdXB2Pdy /QFtPj0fYhpiNuKajNtVc2VUWT0xlaV4UdapG7k93+LzEaFfKDP4j1+pjLyRMyQc8el/ pib8Ei5p3L6F268LoDraIzaDP28XJZf70Wx5jcLeFgFqvTNhqBNoGE3+nN6jc5nqi7gX MTb3/hB3S/s5OfXcpBepgfQRgaTVIsafZIE/X4yYpEE2fmGKoQuIdfhSFPbRx5pznRZ2 oBHmhxnaea0R3QRBE1LmgK6djKw2DgWgzedVdariOGk/WKV+YZoqJRrKIA+ZCylyYZVd dn3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740053117; x=1740657917; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=THBQ8rmEsPvpqpvxaWqxGrUia96m2+SW0Egbj+rhtyc=; b=Aika1w6OCfb6DydvxlJ3Wf/k08FT/eL+603NeEzdNeUlpalDfol/tUaNyRE2fa7TMv UyFG/m+gYEB9rEf3AlKyLZnXSIw2T1JWqGLlTPn0FIgQWIoBra5ydFxqK3D9IlXB9c3c e6c3SxBdpI9u97CNU0a3oX9jvGMq01v6xAE1G8NFrfxUxjpsmjoYLeT0Tz10z2zSgbza v/asFUf706BzVPqF/dUbtwqbPamvMQT8LvoB2WkdTFZpq++jqtGLW1bpnCt49TG4/7KP /6p60b0Gwqu/vmZCzG+ca6ArWM3o/DKd45DMprgsYhefEeekOEKt67KuP+BuxecO2PhS JDaw== X-Forwarded-Encrypted: i=1; AJvYcCUm+0VxhUHX7SSgdNx7bpjEaZIf7UXT6emsQ1HK6e3xbHDSYUpEb7+jMTedV9OAkiOLN4mWc7AIfg==@kvack.org X-Gm-Message-State: AOJu0YwfnZ1q3F9WsMfACXHDrO/8j2Dbwh491RVWL6dmYtw/mPapo3dY EwuR8vptEHOpxs2sM2o28q4ROENGbjbBghm+KTaneP2OEGYdq9G5 X-Gm-Gg: ASbGncv0uBLlvzPOsK8IrpuVg3smS8ijL6THs6fxh7MEgAAd/mI8jDj/lm7f3xFzZRj Sj9vJ9FcDGthwvDiU7t7v9rF4cnlptSF15mYYFt9tMJzBZgjG/hYAl9uJhUcQOwTNiaKFjds6pr c5S5wkuFVCf9WiFBXdxfJF2M0+aPHYE0Cz6xyveFSzSOTonH/mEXfvQC8HGcHQY7eXmPgYeKM9n U8BYEY9577SH5NuKMvXgl8AuPRyfbXb+w6JCUvuVozXPSKGTGkYjCDO4OM1TK/Ke/M6cJIzM16v ZiTW3rgyllQtfGPC2QMss00+N2KMCtrqg6do+g== X-Google-Smtp-Source: AGHT+IGU5Vj5wxkWmZvV2e5nDdV1F53jASdsNyEf9xpcKbnZG5GFBzqm4iMH2LcngNhowR1UMJ7hEg== X-Received: by 2002:a05:6512:3da2:b0:545:2e76:495c with SMTP id 2adb3069b0e04-5462eef4ae8mr2656543e87.25.1740053117049; Thu, 20 Feb 2025 04:05:17 -0800 (PST) Received: from pc636 (host-95-203-6-24.mobileonline.telia.com. [95.203.6.24]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5461addb00esm1538710e87.198.2025.02.20.04.05.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 04:05:16 -0800 (PST) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Thu, 20 Feb 2025 13:05:13 +0100 To: Ryan Roberts Cc: Catalin Marinas , Will Deacon , Pasha Tatashin , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , David Hildenbrand , "Matthew Wilcox (Oracle)" , Mark Rutland , Anshuman Khandual , Alexandre Ghiti , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 09/14] mm/vmalloc: Gracefully unmap huge ptes Message-ID: References: <20250217140809.1702789-1-ryan.roberts@arm.com> <20250217140809.1702789-10-ryan.roberts@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250217140809.1702789-10-ryan.roberts@arm.com> X-Rspam-User: X-Rspamd-Queue-Id: 68C1D4000F X-Stat-Signature: j4ot9yi8r1861bpnj3bopjozwogijqbo X-Rspamd-Server: rspam03 X-HE-Tag: 1740053119-90546 X-HE-Meta: U2FsdGVkX1+EzbPjtL5/qcJyiUD1/FNkbJQ4sFMAKtS/m9z5IDDcYxRPUOhajO4EZbsXffDvvrMfISEoPxUHBJRO6izh1dxhGAJKpv861jYmfxxmcoXfN5OyCx4fUp8R5ppxs/0kl5E8/zErNYRE49n/NKBypIe3F4GPL/QOtq+IQ+W+JSaBcAKhTSAMqtTkp0A3y309LggtXW/ZO/WRLftfhx5cGSYRHbcrdIHmMVczjR/vypxN3mEM6t+/A3oU7f7wMKbaBDJIASahVEL3w4C1QDTtLmb9KqK7ngobKnZcNh1rwpDRzktW2As3q9Qs44WNaq+Y7X+CPYfNDqbLbLpvBXVb4TOgY9PoHhGBVgYu5e4dC/rJP5DrUAkgIXPs7OF/BDRBKBPaOpsTkZDqVZ+U/mbRHN0RVEAVXLxpQfarEPcbb4mFiZ5Vx+BjA9QCcCEMo+vn9JQQ+IDpED+h2xtx4HXW4aPElnPAQj0sVqFTtrLKDZBUsOwR4U5dy7RYCoJKnHI2c8JNu5aKVPYD1TjHe0WxS6CcVItNhaxx/Y9sZEANN9wtT23iZpg26uaoVuFk2Ob3BekPwcBqe/oeBBik1LI1J4eYcZIAyNY/QM4F7YkB7Z3t3XmvmocgBePr4hNY2exaI5r/BZmliDc37xoNe6bUCcF+GyQGwGHEz2eh5oJTYcFZNZBFd8+w+hVSf9Ld2NAV3BeoQSPaqMDJlqBRv6N+XTdFO+mw9/pnPGFMRqLAhEgC3H5sQryIGWfXrWdckJ+PxwVQn7z7B5J81QskX0OEnNu0/OGbtCP/W9lwByOQgpnnIYk4wUOyprMVmmsvaxIk55M3+7+0jobPzZSEi4gw5tOx/FZwz/3+bIMwLtwpPTlCwYAv0Pageib3ofqcb61tT8mBvlRKdacEJKqp+FD9tFtCgSgWyaPxkv02yUvrEoz39x6LvU32GdYOveam5OPWQ0FqMHZSezN cFmw/ZY1 E6j4MUjKYQjrV8bDDUCD6T+to/riqqwz2CQme/KoHq03AXoR0+Evnh+srXcHh54K6yvc8IE4bmcPN2H49am8X2Igjp98NmE4DEj1K03jt9LVu2QgXi5zkIfDxBWthunKFI+5WpoxSEo1/BvRolKCwpHV6LODCFyA14greM7/DHy0E6ZmNZpRSCtTs5iJWanuvzqfhTRkB+igMpNWKohjJhS2fHaWZ3p3EbvRh7J8Jm6mwmS3RGx0xjY3jm/IPDcazsnF3NhynjJBkhD9OITAqjHTK5OO2pi3JOeQyZ3k3HNX3YM2efD6tHkQ1hDcFeF89r43J7mWv67xUKlIqeQXN36qNgfDSb4EPHlz8RxZSuE98jjEjdXqSZVPWh/7ryPlGBBOPGQlCj1e3Nq+AdMJPtiePRexPbFuXyuMJjJut4tvERNBFwGsEXYd2sbdH5PGiiF7I/G9DTEKxim7iHfcdo3Su9vCdxHuv4I0YotbgGNsJbmTvyGyf7kbO8t5fUbjCV0Kui7T13ScUylv+OCcOiuvR1OUlVdGpZqoQYRbEWZGJ+Yg= 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 Mon, Feb 17, 2025 at 02:08:01PM +0000, Ryan Roberts wrote: > Commit f7ee1f13d606 ("mm/vmalloc: enable mapping of huge pages at pte > level in vmap") added its support by reusing the set_huge_pte_at() API, > which is otherwise only used for user mappings. But when unmapping those > huge ptes, it continued to call ptep_get_and_clear(), which is a > layering violation. To date, the only arch to implement this support is > powerpc and it all happens to work ok for it. > > But arm64's implementation of ptep_get_and_clear() can not be safely > used to clear a previous set_huge_pte_at(). So let's introduce a new > arch opt-in function, arch_vmap_pte_range_unmap_size(), which can > provide the size of a (present) pte. Then we can call > huge_ptep_get_and_clear() to tear it down properly. > > Note that if vunmap_range() is called with a range that starts in the > middle of a huge pte-mapped page, we must unmap the entire huge page so > the behaviour is consistent with pmd and pud block mappings. In this > case emit a warning just like we do for pmd/pud mappings. > > Reviewed-by: Anshuman Khandual > Signed-off-by: Ryan Roberts > --- > include/linux/vmalloc.h | 8 ++++++++ > mm/vmalloc.c | 18 ++++++++++++++++-- > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h > index 31e9ffd936e3..16dd4cba64f2 100644 > --- a/include/linux/vmalloc.h > +++ b/include/linux/vmalloc.h > @@ -113,6 +113,14 @@ static inline unsigned long arch_vmap_pte_range_map_size(unsigned long addr, uns > } > #endif > > +#ifndef arch_vmap_pte_range_unmap_size > +static inline unsigned long arch_vmap_pte_range_unmap_size(unsigned long addr, > + pte_t *ptep) > +{ > + return PAGE_SIZE; > +} > +#endif > + > #ifndef arch_vmap_pte_supported_shift > static inline int arch_vmap_pte_supported_shift(unsigned long size) > { > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index a7e34e6936d2..68950b1824d0 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -350,12 +350,26 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, > pgtbl_mod_mask *mask) > { > pte_t *pte; > + pte_t ptent; > + unsigned long size = PAGE_SIZE; > > pte = pte_offset_kernel(pmd, addr); > do { > - pte_t ptent = ptep_get_and_clear(&init_mm, addr, pte); > +#ifdef CONFIG_HUGETLB_PAGE > + size = arch_vmap_pte_range_unmap_size(addr, pte); > + if (size != PAGE_SIZE) { > + if (WARN_ON(!IS_ALIGNED(addr, size))) { > + addr = ALIGN_DOWN(addr, size); > + pte = PTR_ALIGN_DOWN(pte, sizeof(*pte) * (size >> PAGE_SHIFT)); > + } > + ptent = huge_ptep_get_and_clear(&init_mm, addr, pte, size); > + if (WARN_ON(end - addr < size)) > + size = end - addr; > + } else > +#endif > + ptent = ptep_get_and_clear(&init_mm, addr, pte); > WARN_ON(!pte_none(ptent) && !pte_present(ptent)); > - } while (pte++, addr += PAGE_SIZE, addr != end); > + } while (pte += (size >> PAGE_SHIFT), addr += size, addr != end); > *mask |= PGTBL_PTE_MODIFIED; > } > > -- > 2.43.0 > Reviewed-by: Uladzislau Rezki (Sony) Uladzislau Rezki