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 0A74CEB64D8 for ; Wed, 14 Jun 2023 14:28:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 731846B0074; Wed, 14 Jun 2023 10:28:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6BA1D6B0075; Wed, 14 Jun 2023 10:28:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 55A6E6B0078; Wed, 14 Jun 2023 10:28:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 40C826B0074 for ; Wed, 14 Jun 2023 10:28:08 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1EA321C8403 for ; Wed, 14 Jun 2023 14:28:08 +0000 (UTC) X-FDA: 80901583056.18.683B77B Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf16.hostedemail.com (Postfix) with ESMTP id E63BF180025 for ; Wed, 14 Jun 2023 14:28:05 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sb9Bicm0; spf=pass (imf16.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686752886; 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=S4EDLUKu8so5QZU4i+hyCBTZajUwaEhFYesFTo1h6Us=; b=SD0KXTQ+tkDr08SEs3GyYVMBBzcoYsjaT1bJ/mlGU2BNjO2brnVKWv3bKaJfTeyGn4i0vp LoPS6BXm+2Jz9/2fuq4EgwmrYHtdZoUEblAEXLAvI/2bdGoKt1vOH9cljc6k4Bgxb6vwpu wGqHSYt7Ded1kTDr2A+yR+xvH9A+Mio= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sb9Bicm0; spf=pass (imf16.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686752886; a=rsa-sha256; cv=none; b=3AjHqyb2xZ2EGtVPV9J1bswhJJhLuFalSV1uWQPIsMkj3/kiAOQHhtYbwn97iDdaoDkszp wPo03sHGYY4YLrVrEOu6dWqwChtNp/tXK7JKn7imfQtogA+G+93+/uHE06fv+kQ6gmxBu9 JH1A9RZE4jJinYeIVSLjZi/sbsTM+7c= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E5A4060ECC; Wed, 14 Jun 2023 14:28:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 669D2C433C0; Wed, 14 Jun 2023 14:27:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1686752884; bh=IAb9vqJ9ElNCqXJHA6Yv2u0lekZ+I9QDT850CHa542c=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=sb9Bicm006MQRaA2QJZIqPZuQdkLyF04mr929/fVCvQ7YypT0tAJ1UO18LeBHpTwB Rvh5Rz8gbGxaZSahDSeiH9r0Yz3iKE+GmnXF2aA2Dm48smesHM0aIKruGgo2DEo1bH yqBW4/hs/er7nkcZiUCTdpNMlb1ecIjI20wO5qfSFQMgO7IjC/Z6OtB7JPDuSoqyDB PbEWexd4YMPKGr9SzIWRiVHkqq5QUZvrMkkQ/1wJzpzgtjaQjy7CDpiRl5H1nDBjjg IRNGeQrV6izw2mQTgitk3o+/EZj4A4fQLPaXmWJkD+f2zPWe6D7L/cRZD+jKRK3gcE G59EadJXPqFYg== Date: Wed, 14 Jun 2023 17:27:26 +0300 From: Mike Rapoport To: "Vishal Moola (Oracle)" Cc: Andrew Morton , Matthew Wilcox , linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org, Hugh Dickins , Dave Hansen Subject: Re: [PATCH v4 15/34] x86: Convert various functions to use ptdescs Message-ID: <20230614142726.GN52412@kernel.org> References: <20230612210423.18611-1-vishal.moola@gmail.com> <20230612210423.18611-16-vishal.moola@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230612210423.18611-16-vishal.moola@gmail.com> X-Rspamd-Queue-Id: E63BF180025 X-Rspam-User: X-Stat-Signature: n44118kn5wr85xwhwht19kzwcacyusog X-Rspamd-Server: rspam01 X-HE-Tag: 1686752885-284739 X-HE-Meta: U2FsdGVkX199bWOtI7tmRW3ZGIn1cv36kXHYjk4GFD0uo7JPqAYY9Rx1KxE5jL2SXchfhxKgycQTBiiM20TZHbXiHTyU31HkFeYZXdn99azOeTRXk2JXE4cO6/ekSv0otFWcareUP3xyY2b/VS6rw3/XPF65CIi/tXqrXoj6YLdSxaMH0UUWiIJpiwD7uxDiGtEGtGoUxzvOvkguHdaDex28Srmq3iDpQDtK9ItTt8HB9BL1ZaLnImiP5btEzSjg8/AIWeDsR4ZMhnw5XHUMl4niq7j9s3oidqgkfX0ExF1gz1CHsE82gTRQN/4dv6Wj3dSU3JtkocMPWukc1aUTqMxW7qsGW4zd/vbjpFlgZRNFxW1Pvd7OsTfPEnFSlJNY/+Aet2wmC9W5jh6F5NPicgJ8/Lt9wHZ5YYl06U2l7i7k/19O7AihlydiRQFqsfNBtJqb/jdRT+7srPa+PPylhGmmMe6B2wbIAMCmOV9ZVrQo/hPtO748bpKnVP7uknuup6djA4u1fiydBUiFcCttf6lr5qeTkzdBon4zmPB5RxscoSaOh0c6EswSm3ulwX3Bmk/Jf4JWJlb07GIPOj1K8sfX0wmbQfejh/h1IJsX+81SqviOfPZQRSa4N86sfrmY/YiII9ZyqTFm6RS64/FkeBegLTToQCNfZJbhf2uvvYHeYDWzNjrkulksVUjqDibYfyFY0lHTXXtC/nWEorWPp+XhioOzXj3kHoTq9gYlE4PqurGwSlVOCEHA6DpNMo8OdVsCqIiUL5pN6hH8UjX4FTiV6PkoWXLg6g9ydTFwW0MHZ99MclDCuDbegC3NbZGcOVcU2GH4jnPIwtZoWN5hniSLv0SNiBhmeepgENYQSOWDT5iT/InNU+wKzimLx99EtzXSbRkFUGEBcpkczcyZUYx1YvJzIDBBo0NCYCOeit0HTBfmYuVhCXIGASZoknNMf/5DPRTTNgeXqzpeWwR inGPhkwQ WNNNjIfcXHKeSSnzfuGRUdTvlGbcxpZnvouq0Ea7utJ+H7BN9eb+kseC5nTWTa8QTMQ/e+HKOrEYIyFhKTdHBAeiLJq0+LccIzFnS81oUoKVwS7MNI3QnMXmiqvEXv8WNOB5XPwOFb5bmh99/TtHWa9i1enqPEr7aduYabiwswjzBeXVGURWN/TXVOe7+AVlXVS5dXcB2ipy2jdVKNdyO/Hug+6LfE1jjU86VdMCgb0aiaVgGP+COEqFbqIM4WZC3MZkss3ADZfPwBtzsLOctnve/Jde6Vyg1YyGfHiN2iZNutJV846iNui0Zr1XloucxKV+yTzzwr2n/dgOLXwAl7xOxPwsOQDVdnYDrsr/EGvTl85IQzJqt5N2JdNjJv5JYr1VF 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 Mon, Jun 12, 2023 at 02:04:04PM -0700, Vishal Moola (Oracle) wrote: > In order to split struct ptdesc from struct page, convert various > functions to use ptdescs. > > Some of the functions use the *get*page*() helper functions. Convert Nit: *get_free_page*() > these to use pagetable_alloc() and ptdesc_address() instead to help > standardize page tables further. More importantly, get_free_pages() ensures a page won't be allocated from HIGHMEM, and for 32-bits this is a must. > Signed-off-by: Vishal Moola (Oracle) > --- > arch/x86/mm/pgtable.c | 46 +++++++++++++++++++++++++------------------ > 1 file changed, 27 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c > index 15a8009a4480..6da7fd5d4782 100644 > --- a/arch/x86/mm/pgtable.c > +++ b/arch/x86/mm/pgtable.c > @@ -52,7 +52,7 @@ early_param("userpte", setup_userpte); > > void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) > { > - pgtable_pte_page_dtor(pte); > + pagetable_pte_dtor(page_ptdesc(pte)); > paravirt_release_pte(page_to_pfn(pte)); > paravirt_tlb_remove_table(tlb, pte); > } > @@ -60,7 +60,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) > #if CONFIG_PGTABLE_LEVELS > 2 > void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > { > - struct page *page = virt_to_page(pmd); > + struct ptdesc *ptdesc = virt_to_ptdesc(pmd); > paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); > /* > * NOTE! For PAE, any changes to the top page-directory-pointer-table > @@ -69,8 +69,8 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) > #ifdef CONFIG_X86_PAE > tlb->need_flush_all = 1; > #endif > - pgtable_pmd_page_dtor(page); > - paravirt_tlb_remove_table(tlb, page); > + pagetable_pmd_dtor(ptdesc); > + paravirt_tlb_remove_table(tlb, ptdesc_page(ptdesc)); > } > > #if CONFIG_PGTABLE_LEVELS > 3 > @@ -92,16 +92,16 @@ void ___p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d) > > static inline void pgd_list_add(pgd_t *pgd) > { > - struct page *page = virt_to_page(pgd); > + struct ptdesc *ptdesc = virt_to_ptdesc(pgd); > > - list_add(&page->lru, &pgd_list); > + list_add(&ptdesc->pt_list, &pgd_list); > } > > static inline void pgd_list_del(pgd_t *pgd) > { > - struct page *page = virt_to_page(pgd); > + struct ptdesc *ptdesc = virt_to_ptdesc(pgd); > > - list_del(&page->lru); > + list_del(&ptdesc->pt_list); > } > > #define UNSHARED_PTRS_PER_PGD \ > @@ -112,12 +112,12 @@ static inline void pgd_list_del(pgd_t *pgd) > > static void pgd_set_mm(pgd_t *pgd, struct mm_struct *mm) > { > - virt_to_page(pgd)->pt_mm = mm; > + virt_to_ptdesc(pgd)->pt_mm = mm; > } > > struct mm_struct *pgd_page_get_mm(struct page *page) > { > - return page->pt_mm; > + return page_ptdesc(page)->pt_mm; > } > > static void pgd_ctor(struct mm_struct *mm, pgd_t *pgd) > @@ -213,11 +213,14 @@ void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd) > static void free_pmds(struct mm_struct *mm, pmd_t *pmds[], int count) > { > int i; > + struct ptdesc *ptdesc; > > for (i = 0; i < count; i++) > if (pmds[i]) { > - pgtable_pmd_page_dtor(virt_to_page(pmds[i])); > - free_page((unsigned long)pmds[i]); > + ptdesc = virt_to_ptdesc(pmds[i]); > + > + pagetable_pmd_dtor(ptdesc); > + pagetable_free(ptdesc); > mm_dec_nr_pmds(mm); > } > } > @@ -232,16 +235,21 @@ static int preallocate_pmds(struct mm_struct *mm, pmd_t *pmds[], int count) > gfp &= ~__GFP_ACCOUNT; > > for (i = 0; i < count; i++) { > - pmd_t *pmd = (pmd_t *)__get_free_page(gfp); > - if (!pmd) > + pmd_t *pmd = NULL; > + struct ptdesc *ptdesc = pagetable_alloc(gfp, 0); > + > + if (!ptdesc) > failed = true; > - if (pmd && !pgtable_pmd_page_ctor(virt_to_page(pmd))) { > - free_page((unsigned long)pmd); > - pmd = NULL; > + if (ptdesc && !pagetable_pmd_ctor(ptdesc)) { > + pagetable_free(ptdesc); > + ptdesc = NULL; > failed = true; > } > - if (pmd) > + if (ptdesc) { > mm_inc_nr_pmds(mm); > + pmd = ptdesc_address(ptdesc); > + } > + > pmds[i] = pmd; > } > > @@ -830,7 +838,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) > > free_page((unsigned long)pmd_sv); > > - pgtable_pmd_page_dtor(virt_to_page(pmd)); > + pagetable_pmd_dtor(virt_to_ptdesc(pmd)); > free_page((unsigned long)pmd); > > return 1; > -- > 2.40.1 > > -- Sincerely yours, Mike.