Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1414683ybt; Sat, 27 Jun 2020 07:36:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzARs60xump2RZk2ca6gGQV203otTcb4w8rAWz1ITBGxEM+3QxuZfvpTmC+r3bgd3TDchI0 X-Received: by 2002:a17:906:9244:: with SMTP id c4mr6784869ejx.60.1593268570052; Sat, 27 Jun 2020 07:36:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593268570; cv=none; d=google.com; s=arc-20160816; b=Xsmvd2IYtEurPBJHaEI75NrSnzu+MYoU+A9LVZE8oum0n2jjNVmumCZ9wwDWMnDYQJ w1fiMtdOz4C0l+/LpJjiKvjzRg05I7QHl8b5Tmc+uzVVf9PN7Gl/RqGoZcfYpS2WmgWL ltQJXSd8FK4AXq5Cwx5m9OtZ01h9oTEvmr5N1sbeEiXghTTXGP8/a/2SQ0j60rb+XXGs ydLFPyl+GMdYf2sUlREvC8HhCu/UaBaskEA4DKJmm5TPHQLumCN2YrCMmAoBpuhL+Rqp bcqXWdOML3nLBGB510Sp2tOuOuKw/uKMIARy4O6m/l7HNxdk5Jr8a38cEMlqCfNAZLn3 fkag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Tw9fE7oIXnUlrvPuFlnei+6pCMI0M5TQYWPqvpKHFUI=; b=qYEiFpMTjcSJ6GfGBLQCFhwfhHemY578YkHAbLYecVzry1BU0TA0d7OEC8Lj1zL3wT vd9Dh7oyQD7GWdJ85KW4XV0D0pSIotN3dlb1XTTZFzKT3xUZTKwQG+kdg3ZJQnI1fvT3 QjwQpNsERJ7/DtzT4aMsiGPGDU4qEeQiZtVwxl4avcukdo3C43uxP676vxj0zY4iU5z0 gcEWLCU+iM6ihCzvYdxYKx+VPvpLwSR4gCDH1WsAtiH/iygX/9GGy41rSKHD32r2Jx2b anIqrfS08SW261e4+hOSj1Pyr8md6mgalDIo/FRJ7PQljiPXAN/VCQ7Eoe9WRa4+CVhe nAsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kGeCaidI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sd17si4674856ejb.306.2020.06.27.07.35.46; Sat, 27 Jun 2020 07:36:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kGeCaidI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726703AbgF0Off (ORCPT + 99 others); Sat, 27 Jun 2020 10:35:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:39300 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726678AbgF0Ofc (ORCPT ); Sat, 27 Jun 2020 10:35:32 -0400 Received: from aquarius.haifa.ibm.com (nesher1.haifa.il.ibm.com [195.110.40.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5920C20885; Sat, 27 Jun 2020 14:35:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593268531; bh=ug/zgldkEF9Y1EOWxCdQbFhq6W6AubLqDruRfdpZtCU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kGeCaidImTPJgGt9S6wijt8HSPaAsXufRU8Bw3R+Jenx9IwSCz19tOS+s33DYy3Fd IcDlElpk6m8c8IYERIfYCh6px/euMBEW7PkfFZkG6NsKEPz+Lcoqc14NcBs88W/xGZ 9cQUVwRq1YyhbGySMR8ZhKm3fhDosCXptMIYyEmY= From: Mike Rapoport To: linux-kernel@vger.kernel.org Cc: Abdul Haleem , Andrew Morton , Andy Lutomirski , Arnd Bergmann , Christophe Leroy , Joerg Roedel , Max Filippov , Mike Rapoport , Mike Rapoport , Peter Zijlstra , Satheesh Rajendran , Stafford Horne , Stephen Rothwell , Steven Rostedt , linux-alpha@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org, openrisc@lists.librecores.org, sparclinux@vger.kernel.org Subject: [PATCH 3/8] xtensa: switch to generic version of pte allocation Date: Sat, 27 Jun 2020 17:34:48 +0300 Message-Id: <20200627143453.31835-4-rppt@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200627143453.31835-1-rppt@kernel.org> References: <20200627143453.31835-1-rppt@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mike Rapoport xtensa clears PTEs during allocation of the page tables and pte_clear() sets the PTE to a non-zero value. Splitting ptes_clear() helper out of pte_alloc_one() and pte_alloc_one_kernel() allows reuse of base generic allocation methods (__pte_alloc_one() and __pte_alloc_one_kernel()) and the common GFP mask for page table allocations. The pte_free() and pte_free_kernel() implementations on xtensa are identical to the generic ones and can be dropped. Signed-off-by: Mike Rapoport --- arch/xtensa/include/asm/pgalloc.h | 41 ++++++++++++++----------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h index 1d38f0e755ba..60ee94b42850 100644 --- a/arch/xtensa/include/asm/pgalloc.h +++ b/arch/xtensa/include/asm/pgalloc.h @@ -8,9 +8,14 @@ #ifndef _XTENSA_PGALLOC_H #define _XTENSA_PGALLOC_H +#ifdef CONFIG_MMU #include #include +#define __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL +#define __HAVE_ARCH_PTE_ALLOC_ONE +#include + /* * Allocating and freeing a pmd is trivial: the 1-entry pmd is * inside the pgd, so has no extra memory associated with it. @@ -33,45 +38,37 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_page((unsigned long)pgd); } +static inline void ptes_clear(pte_t *ptep) +{ + int i; + + for (i = 0; i < PTRS_PER_PTE; i++) + pte_clear(NULL, 0, ptep + i); +} + static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *ptep; - int i; - ptep = (pte_t *)__get_free_page(GFP_KERNEL); + ptep = (pte_t *)__pte_alloc_one_kernel(mm); if (!ptep) return NULL; - for (i = 0; i < 1024; i++) - pte_clear(NULL, 0, ptep + i); + ptes_clear(ptep); return ptep; } static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { - pte_t *pte; struct page *page; - pte = pte_alloc_one_kernel(mm); - if (!pte) - return NULL; - page = virt_to_page(pte); - if (!pgtable_pte_page_ctor(page)) { - __free_page(page); + page = __pte_alloc_one(mm, GFP_PGTABLE_USER); + if (!page) return NULL; - } + ptes_clear(page_address(page)); return page; } -static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) -{ - free_page((unsigned long)pte); -} - -static inline void pte_free(struct mm_struct *mm, pgtable_t pte) -{ - pgtable_pte_page_dtor(pte); - __free_page(pte); -} #define pmd_pgtable(pmd) pmd_page(pmd) +#endif CONFIG_MMU #endif /* _XTENSA_PGALLOC_H */ -- 2.26.2