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 X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63E39C83007 for ; Tue, 28 Apr 2020 19:45:05 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 1C14B221EA for ; Tue, 28 Apr 2020 19:45:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="MCylAK5+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1C14B221EA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 35A658E000E; Tue, 28 Apr 2020 15:45:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 30B738E000B; Tue, 28 Apr 2020 15:45:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2226E8E000E; Tue, 28 Apr 2020 15:45:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0238.hostedemail.com [216.40.44.238]) by kanga.kvack.org (Postfix) with ESMTP id 0A7A18E000B for ; Tue, 28 Apr 2020 15:45:00 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id C01F6181AC9CC for ; Tue, 28 Apr 2020 19:44:59 +0000 (UTC) X-FDA: 76758291918.30.dog61_e7af16760f38 X-HE-Tag: dog61_e7af16760f38 X-Filterd-Recvd-Size: 8242 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf34.hostedemail.com (Postfix) with ESMTP for ; Tue, 28 Apr 2020 19:44:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=uhxYV2kO5n88E0AvwP3eNmBuHjvcK1ETxqmaSL4hXlQ=; b=MCylAK5+TGaqUVhj7CUnwDHNrV 8gBEzS+zzmBmzl3IrFTT0Uqitkp3UCpGzbodghmvxnhbrmihjeZaAZnP4darLcUvZ99WH9x73yCSv 0hQ8BvpKh935wsXw2kBPQjTxsh4lKGpoXo02N0nOKEcupx3/X+r32bJGy8DDQCv4qZAmEJzjI19SP ZQ09kOS3wQxcYzzpGcTqOovcBdv4t64QeQPa2kmJNSkEWu0KWUvWNEzTIWLLEQ6mwZQJaZRmC4qbE VBXOPaG3qf/ZHq3YXCTywd802Xi1O/j+6RAnFtwT5hZ22pRjBCAKtr3gkLmv9qwso8h+saCsaXEZa 5Z85aasw==; Received: from willy by bombadil.infradead.org with local (Exim 4.92.3 #3 (Red Hat Linux)) id 1jTW9y-0005uY-Vh; Tue, 28 Apr 2020 19:44:50 +0000 From: Matthew Wilcox To: linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Will Deacon , Catalin Marinas , Russell King , Geert Uytterhoeven , linux-m68k@lists.linux-m68k.org Subject: [PATCH 3/7] arm: Thread mm_struct throughout page table allocation Date: Tue, 28 Apr 2020 12:44:45 -0700 Message-Id: <20200428194449.22615-4-willy@infradead.org> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200428194449.22615-1-willy@infradead.org> References: <20200428194449.22615-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: From: "Matthew Wilcox (Oracle)" An upcoming patch will pass mm_struct to the page table constructor. Make sure ARM has the appropriate mm_struct at the point it needs to call the constructor. Signed-off-by: Matthew Wilcox (Oracle) --- arch/arm/mm/mmu.c | 64 +++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index ec8d0008bfa1..e5275bfbe695 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -690,7 +690,9 @@ EXPORT_SYMBOL(phys_mem_access_prot); =20 #define vectors_base() (vectors_high() ? 0xffff0000 : 0) =20 -static void __init *early_alloc(unsigned long sz) +typedef void *(arm_pt_alloc_t)(unsigned long size, struct mm_struct *); + +static void __init *early_alloc(unsigned long sz, struct mm_struct *mm) { void *ptr =3D memblock_alloc(sz, sz); =20 @@ -701,7 +703,7 @@ static void __init *early_alloc(unsigned long sz) return ptr; } =20 -static void *__init late_alloc(unsigned long sz) +static void *__init late_alloc(unsigned long sz, struct mm_struct *mm) { void *ptr =3D (void *)__get_free_pages(GFP_PGTABLE_KERNEL, get_order(sz= )); =20 @@ -710,31 +712,30 @@ static void *__init late_alloc(unsigned long sz) return ptr; } =20 -static pte_t * __init arm_pte_alloc(pmd_t *pmd, unsigned long addr, - unsigned long prot, - void *(*alloc)(unsigned long sz)) +static pte_t * __init arm_pte_alloc(struct mm_struct *mm, pmd_t *pmd, + unsigned long addr, unsigned long prot, + arm_pt_alloc_t alloc) { if (pmd_none(*pmd)) { - pte_t *pte =3D alloc(PTE_HWTABLE_OFF + PTE_HWTABLE_SIZE); + pte_t *pte =3D alloc(PTE_HWTABLE_OFF + PTE_HWTABLE_SIZE, mm); __pmd_populate(pmd, __pa(pte), prot); } BUG_ON(pmd_bad(*pmd)); return pte_offset_kernel(pmd, addr); } =20 -static pte_t * __init early_pte_alloc(pmd_t *pmd, unsigned long addr, - unsigned long prot) +static pte_t * __init early_pte_alloc(struct mm_struct *mm, pmd_t *pmd, + unsigned long addr, unsigned long prot) { - return arm_pte_alloc(pmd, addr, prot, early_alloc); + return arm_pte_alloc(mm, pmd, addr, prot, early_alloc); } =20 -static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr, - unsigned long end, unsigned long pfn, - const struct mem_type *type, - void *(*alloc)(unsigned long sz), - bool ng) +static void __init alloc_init_pte(struct mm_struct *mm, pmd_t *pmd, + unsigned long addr, unsigned long end, + unsigned long pfn, const struct mem_type *type, + arm_pt_alloc_t alloc, bool ng) { - pte_t *pte =3D arm_pte_alloc(pmd, addr, type->prot_l1, alloc); + pte_t *pte =3D arm_pte_alloc(mm, pmd, addr, type->prot_l1, alloc); do { set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)), ng ? PTE_EXT_NG : 0); @@ -769,10 +770,10 @@ static void __init __map_init_section(pmd_t *pmd, u= nsigned long addr, flush_pmd_entry(p); } =20 -static void __init alloc_init_pmd(pud_t *pud, unsigned long addr, - unsigned long end, phys_addr_t phys, - const struct mem_type *type, - void *(*alloc)(unsigned long sz), bool ng) +static void __init alloc_init_pmd(struct mm_struct *mm, pud_t *pud, + unsigned long addr, unsigned long end, + phys_addr_t phys, const struct mem_type *type, + arm_pt_alloc_t alloc, bool ng) { pmd_t *pmd =3D pmd_offset(pud, addr); unsigned long next; @@ -792,7 +793,7 @@ static void __init alloc_init_pmd(pud_t *pud, unsigne= d long addr, ((addr | next | phys) & ~SECTION_MASK) =3D=3D 0) { __map_init_section(pmd, addr, next, phys, type, ng); } else { - alloc_init_pte(pmd, addr, next, + alloc_init_pte(mm, pmd, addr, next, __phys_to_pfn(phys), type, alloc, ng); } =20 @@ -801,17 +802,17 @@ static void __init alloc_init_pmd(pud_t *pud, unsig= ned long addr, } while (pmd++, addr =3D next, addr !=3D end); } =20 -static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr, - unsigned long end, phys_addr_t phys, - const struct mem_type *type, - void *(*alloc)(unsigned long sz), bool ng) +static void __init alloc_init_pud(struct mm_struct *mm, pgd_t *pgd, + unsigned long addr, unsigned long end, + phys_addr_t phys, const struct mem_type *type, + arm_pt_alloc_t alloc, bool ng) { pud_t *pud =3D pud_offset(pgd, addr); unsigned long next; =20 do { next =3D pud_addr_end(addr, end); - alloc_init_pmd(pud, addr, next, phys, type, alloc, ng); + alloc_init_pmd(mm, pud, addr, next, phys, type, alloc, ng); phys +=3D next - addr; } while (pud++, addr =3D next, addr !=3D end); } @@ -879,8 +880,7 @@ static void __init create_36bit_mapping(struct mm_str= uct *mm, #endif /* !CONFIG_ARM_LPAE */ =20 static void __init __create_mapping(struct mm_struct *mm, struct map_des= c *md, - void *(*alloc)(unsigned long sz), - bool ng) + arm_pt_alloc_t alloc, bool ng) { unsigned long addr, length, end; phys_addr_t phys; @@ -914,7 +914,7 @@ static void __init __create_mapping(struct mm_struct = *mm, struct map_desc *md, do { unsigned long next =3D pgd_addr_end(addr, end); =20 - alloc_init_pud(pgd, addr, next, phys, type, alloc, ng); + alloc_init_pud(mm, pgd, addr, next, phys, type, alloc, ng); =20 phys +=3D next - addr; addr =3D next; @@ -1316,7 +1316,7 @@ static void __init devicemaps_init(const struct mac= hine_desc *mdesc) /* * Allocate the vector page early. */ - vectors =3D early_alloc(PAGE_SIZE * 2); + vectors =3D early_alloc(PAGE_SIZE * 2, &init_mm); =20 early_trap_init(vectors); =20 @@ -1413,11 +1413,11 @@ static void __init devicemaps_init(const struct m= achine_desc *mdesc) static void __init kmap_init(void) { #ifdef CONFIG_HIGHMEM - pkmap_page_table =3D early_pte_alloc(pmd_off_k(PKMAP_BASE), + pkmap_page_table =3D early_pte_alloc(&init_mm, pmd_off_k(PKMAP_BASE), PKMAP_BASE, _PAGE_KERNEL_TABLE); #endif =20 - early_pte_alloc(pmd_off_k(FIXADDR_START), FIXADDR_START, + early_pte_alloc(&init_mm, pmd_off_k(FIXADDR_START), FIXADDR_START, _PAGE_KERNEL_TABLE); } =20 @@ -1630,7 +1630,7 @@ void __init paging_init(const struct machine_desc *= mdesc) top_pmd =3D pmd_off_k(0xffff0000); =20 /* allocate the zero page. */ - zero_page =3D early_alloc(PAGE_SIZE); + zero_page =3D early_alloc(PAGE_SIZE, &init_mm); =20 bootmem_init(); =20 --=20 2.26.2