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 2DB47C43334 for ; Wed, 22 Jun 2022 14:45:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C4F68E00BF; Wed, 22 Jun 2022 10:44:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 975188E00AB; Wed, 22 Jun 2022 10:44:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7EF288E00BF; Wed, 22 Jun 2022 10:44:59 -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 6D02A8E00AB for ; Wed, 22 Jun 2022 10:44:59 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay12.hostedemail.com (Postfix) with ESMTP id B5706120EB8 for ; Wed, 22 Jun 2022 14:44:57 +0000 (UTC) X-FDA: 79606143834.12.352469F Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by imf05.hostedemail.com (Postfix) with ESMTP id 49CE110001B for ; Wed, 22 Jun 2022 14:44:51 +0000 (UTC) Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 25ME17w2022747; Wed, 22 Jun 2022 14:44:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : in-reply-to; s=pp1; bh=KcdRw3jHECLn6Ja+zzL/KO5AFIoIqhijGNWNoK3w2kE=; b=DN4akBKBkR+JXBgvBBe4MFYR6b3vJv64kpNPCEJpaD35tTMIjLrFS+gLG6Qv2b3j8kIc IOjsdUt9cCIXPo40Wwr124Nd+M2RsVhB6ufjUrtOnrsfnuzvQyrUo6w06gYJ2b4hLjpH LNECWhRS/VBnJOl3zS5l1+RcEH8gJldiQwZlqg8psrYKOW/+vH4/qcyA94fEYgr1JOWN BGGSHW7fc0jtC1G+iXhjXxYRF2GX5T0f8+xg5UFrJVeuxHehbmDbWOeGqHvRf+3/wcqe FKU2yOF9MjMpfUdQnVxILqlXwyn3zM2VDja4hYHQBx4QuuhqoDmybZ/bnANwdQD+9M2G qQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3gv4fqs9yd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jun 2022 14:44:37 +0000 Received: from m0098417.ppops.net (m0098417.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 25ME1PEV023383; Wed, 22 Jun 2022 14:44:37 GMT Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3gv4fqs9xj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jun 2022 14:44:37 +0000 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 25MEZ2FY025249; Wed, 22 Jun 2022 14:44:35 GMT Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by ppma06ams.nl.ibm.com with ESMTP id 3gs5yhnte8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Jun 2022 14:44:35 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 25MEiX7p21823770 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jun 2022 14:44:33 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1F97EA4051; Wed, 22 Jun 2022 14:44:33 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1A73FA404D; Wed, 22 Jun 2022 14:44:32 +0000 (GMT) Received: from linux.ibm.com (unknown [9.145.80.189]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 22 Jun 2022 14:44:31 +0000 (GMT) Date: Wed, 22 Jun 2022 09:44:29 -0500 From: Mike Rapoport To: Baolin Wang Cc: akpm@linux-foundation.org, willy@infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v2 3/3] mm: Add kernel PTE level pagetable pages account Message-ID: References: <7882bbf467440f9a3ebe41d96ba5b6f384081bb7.1655887440.git.baolin.wang@linux.alibaba.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7882bbf467440f9a3ebe41d96ba5b6f384081bb7.1655887440.git.baolin.wang@linux.alibaba.com> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: YvciyFbpBTrApP-NTN2QL39zgrbVH3rH X-Proofpoint-ORIG-GUID: wqZgU3LuTvycAH--92Tkgk2hWQwUUNSm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-06-22_04,2022-06-22_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 clxscore=1015 impostorscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2204290000 definitions=main-2206220074 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1655909091; a=rsa-sha256; cv=none; b=IyplqZ5+PSmfsn167ose+mY0NylRxVf6DTlpAqBjaBKlLZ4jG1mT2BfTNt9i54yskhVRot M/2Pz3hVoXSwE+F9a4TplJcIVXil0eMkY4n0USKA6WgixgBL5XkFjOGZ2qeogUCsIOZmJ/ vgoBVbRqeyALf6AcPdBSTJrhmzUqYmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655909091; 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=KcdRw3jHECLn6Ja+zzL/KO5AFIoIqhijGNWNoK3w2kE=; b=u+8dLRgWs6/hSgd3cB7URV2v90kvMvvu8k0tX9A4wfw/Ft4uNHPhLc2l9Utfmzsk+W/B3B dCdkDONcbkL4IIO4v8fvVwtjswAhJ4rCY5Wg8NME+DX6nxooYzDpI/Ksmsfm0mDh+14Q8V eDZHr9EyI9tlMt/N5h8TDUh+FkGkbMM= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=DN4akBKB; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf05.hostedemail.com: domain of rppt@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=rppt@linux.ibm.com X-Rspam-User: X-Rspamd-Queue-Id: 49CE110001B Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=DN4akBKB; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf05.hostedemail.com: domain of rppt@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=rppt@linux.ibm.com X-Stat-Signature: y3qjzoupi354ofxo8gbyur9wwuop73c7 X-Rspamd-Server: rspam09 X-HE-Tag: 1655909091-743442 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 Wed, Jun 22, 2022 at 04:58:54PM +0800, Baolin Wang wrote: > Now the kernel PTE level ptes are always protected by mm->page_table_lock > instead of split pagetable lock, so the kernel PTE level pagetable pages > are not accounted. Especially the vmalloc()/vmap() can consume lots of > kernel pagetable, so to get an accurate pagetable accounting, calling new > helpers pgtable_set_and_inc()/pgtable_clear_and_dec() when allocating or > freeing a kernel PTE level pagetable page. This patch only adds accounting to the page tables allocated after boot, please mention this in the changelog. > Meanwhile converting architectures to use corresponding generic PTE pagetable > allocation and freeing functions. > > Signed-off-by: Baolin Wang > Reported-by: kernel test robot > --- > arch/csky/include/asm/pgalloc.h | 2 +- > arch/microblaze/mm/pgtable.c | 2 +- > arch/openrisc/mm/ioremap.c | 2 +- > arch/x86/mm/pgtable.c | 5 ++++- > include/asm-generic/pgalloc.h | 14 ++++++++++++-- > 5 files changed, 19 insertions(+), 6 deletions(-) > > diff --git a/arch/csky/include/asm/pgalloc.h b/arch/csky/include/asm/pgalloc.h > index bbbd069..2443226 100644 > --- a/arch/csky/include/asm/pgalloc.h > +++ b/arch/csky/include/asm/pgalloc.h > @@ -29,7 +29,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) > pte_t *pte; > unsigned long i; > > - pte = (pte_t *) __get_free_page(GFP_KERNEL); > + pte = __pte_alloc_one_kernel(mm); > if (!pte) > return NULL; > > diff --git a/arch/microblaze/mm/pgtable.c b/arch/microblaze/mm/pgtable.c > index 9f73265..e96dd1b 100644 > --- a/arch/microblaze/mm/pgtable.c > +++ b/arch/microblaze/mm/pgtable.c > @@ -245,7 +245,7 @@ unsigned long iopa(unsigned long addr) > __ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm) > { > if (mem_init_done) > - return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO); > + return __pte_alloc_one_kernel(mm); > else > return memblock_alloc_try_nid(PAGE_SIZE, PAGE_SIZE, > MEMBLOCK_LOW_LIMIT, > diff --git a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c > index daae13a..3453acc 100644 > --- a/arch/openrisc/mm/ioremap.c > +++ b/arch/openrisc/mm/ioremap.c > @@ -118,7 +118,7 @@ pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm) > pte_t *pte; > > if (likely(mem_init_done)) { > - pte = (pte_t *)get_zeroed_page(GFP_KERNEL); > + pte = __pte_alloc_one_kernel(mm); > } else { > pte = memblock_alloc(PAGE_SIZE, PAGE_SIZE); > if (!pte) > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c > index a8ab3f9..fc2b9ef 100644 > --- a/arch/x86/mm/pgtable.c > +++ b/arch/x86/mm/pgtable.c > @@ -851,6 +851,7 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) > int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) > { > pte_t *pte; > + struct page *page; > > pte = (pte_t *)pmd_page_vaddr(*pmd); > pmd_clear(pmd); > @@ -858,7 +859,9 @@ int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) > /* INVLPG to clear all paging-structure caches */ > flush_tlb_kernel_range(addr, addr + PAGE_SIZE-1); > > - free_page((unsigned long)pte); > + page = virt_to_page(pte); > + pgtable_clear_and_dec(page); > + __free_page(page); > > return 1; > } > diff --git a/include/asm-generic/pgalloc.h b/include/asm-generic/pgalloc.h > index 328a714..2e20e9e 100644 > --- a/include/asm-generic/pgalloc.h > +++ b/include/asm-generic/pgalloc.h > @@ -18,7 +18,14 @@ > */ > static inline pte_t *__pte_alloc_one_kernel(struct mm_struct *mm) > { > - return (pte_t *)__get_free_page(GFP_PGTABLE_KERNEL); > + struct page *page; > + gfp_t gfp = GFP_PGTABLE_KERNEL; > + > + page = alloc_pages(gfp & ~__GFP_HIGHMEM, 0); > + if (!page) > + return NULL; > + pgtable_set_and_inc(page); > + return (pte_t *)page_address(page); { pte_t *pte = (pte_t *)__get_free_page(GFP_PGTABLE_KERNEL); if (pte) pgtable_set_and_inc(virt_to_page(pte)); return pte; } looks simpler, doesn't it? > } > > #ifndef __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL > @@ -41,7 +48,10 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) > */ > static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) > { > - free_page((unsigned long)pte); > + struct page *page = virt_to_page(pte); > + > + pgtable_clear_and_dec(page); > + __free_page(page); > } > > /** > -- > 1.8.3.1 > -- Sincerely yours, Mike.