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=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 AB5AAC43461 for ; Fri, 23 Apr 2021 20:49:19 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id E6C1C610A2 for ; Fri, 23 Apr 2021 20:49:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E6C1C610A2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ghiti.fr Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6FD896B0036; Fri, 23 Apr 2021 16:49:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6ADD96B006C; Fri, 23 Apr 2021 16:49:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 527346B006E; Fri, 23 Apr 2021 16:49:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0159.hostedemail.com [216.40.44.159]) by kanga.kvack.org (Postfix) with ESMTP id 3262D6B0036 for ; Fri, 23 Apr 2021 16:49:18 -0400 (EDT) Received: from smtpin01.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id D0C678248047 for ; Fri, 23 Apr 2021 20:49:17 +0000 (UTC) X-FDA: 78064821954.01.613BAEE Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by imf07.hostedemail.com (Postfix) with ESMTP id 891F4A0003A4 for ; Fri, 23 Apr 2021 20:49:16 +0000 (UTC) X-Originating-IP: 2.7.49.219 Received: from [192.168.1.12] (lfbn-lyo-1-457-219.w2-7.abo.wanadoo.fr [2.7.49.219]) (Authenticated sender: alex@ghiti.fr) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id CAC7460003; Fri, 23 Apr 2021 20:49:10 +0000 (UTC) Subject: Re: [PATCH] riscv: Fix 32b kernel caused by 64b kernel mapping moving outside linear mapping To: Palmer Dabbelt Cc: anup@brainfault.org, corbet@lwn.net, Paul Walmsley , aou@eecs.berkeley.edu, Arnd Bergmann , aryabinin@virtuozzo.com, glider@google.com, dvyukov@google.com, linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-arch@vger.kernel.org, linux-mm@kvack.org References: From: Alex Ghiti Message-ID: <97819559-0af0-0422-5b6c-30872f759daa@ghiti.fr> Date: Fri, 23 Apr 2021 16:49:10 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 891F4A0003A4 X-Stat-Signature: 5hb9aw1zwbrw4ec131tbxyjyd7qdhqmh Received-SPF: none (ghiti.fr>: No applicable sender policy available) receiver=imf07; identity=mailfrom; envelope-from=""; helo=relay3-d.mail.gandi.net; client-ip=217.70.183.195 X-HE-DKIM-Result: none/none X-HE-Tag: 1619210956-278774 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: Le 4/23/21 =C3=A0 12:57 PM, Palmer Dabbelt a =C3=A9crit=C2=A0: > On Fri, 23 Apr 2021 01:34:02 PDT (-0700), alex@ghiti.fr wrote: >> Le 4/20/21 =C3=A0 12:18 AM, Anup Patel a =C3=A9crit=C2=A0: >>> On Sat, Apr 17, 2021 at 10:52 PM Alexandre Ghiti wrot= e: >>>> >>>> Fix multiple leftovers when moving the kernel mapping outside the=20 >>>> linear >>>> mapping for 64b kernel that left the 32b kernel unusable. >>>> >>>> Fixes: 4b67f48da707 ("riscv: Move kernel mapping outside of linear=20 >>>> mapping") >>>> Signed-off-by: Alexandre Ghiti >>> >>> Quite a few #ifdef but I don't see any better way at the moment.=20 >>> Maybe we can >>> clean this later. Otherwise looks good to me. >=20 > Agreed.=C2=A0 I'd recently sent out a patch set that got NACK'd because= we're=20 > supposed to be relying on the compiler to optimize away references that= =20 > can be staticly determined to not be exercised, which is probably the=20 > way forward to getting rid of a lot of of preprocessor stuff.=C2=A0 Tha= t all=20 > seems very fragile and is a bigger problem than this, though, so it's=20 > probably best to do it as its own thing. >=20 >>> Reviewed-by: Anup Patel >> >> Thanks Anup! >> >> @Palmer: This is not on for-next yet and then rv32 is broken. This doe= s >> not apply immediately on top of for-next though, so if you need a new >> version, I can do that. But this squashes nicely with the patch it fix= es >> if you prefer. >=20 > Thanks.=C2=A0 I just hadn't gotten to this one yet, but as you pointed = out=20 > it's probably best to just squash it.=C2=A0 It's in the version on for-= next=20 > now, it caused few conflicts but I think I got everything sorted out. >=20 > Now that everything is in I'm going to stop rewriting this stuff, as it= =20 > touches pretty much the whole tree.=C2=A0 I don't have much of a patch = back=20 > log as of right now, and as the new stuff will be on top of it that wil= l=20 > make everyone's lives easier. >=20 >> >> Let me know, I can do that very quickly. >> >> Alex >> >>> >>> Regards, >>> Anup >>> >>>> --- >>>> =C2=A0 arch/riscv/include/asm/page.h=C2=A0=C2=A0=C2=A0 |=C2=A0 9 +++= ++++++ >>>> =C2=A0 arch/riscv/include/asm/pgtable.h | 16 ++++++++++++---- >>>> =C2=A0 arch/riscv/mm/init.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 25 ++++++++++++++++++++++++- >>>> =C2=A0 3 files changed, 45 insertions(+), 5 deletions(-) >>>> >>>> diff --git a/arch/riscv/include/asm/page.h=20 >>>> b/arch/riscv/include/asm/page.h >>>> index 22cfb2be60dc..f64b61296c0c 100644 >>>> --- a/arch/riscv/include/asm/page.h >>>> +++ b/arch/riscv/include/asm/page.h >>>> @@ -90,15 +90,20 @@ typedef struct page *pgtable_t; >>>> >>>> =C2=A0 #ifdef CONFIG_MMU >>>> =C2=A0 extern unsigned long va_pa_offset; >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0 extern unsigned long va_kernel_pa_offset; >>>> +#endif >>>> =C2=A0 extern unsigned long pfn_base; >>>> =C2=A0 #define ARCH_PFN_OFFSET=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (pfn_base) >>>> =C2=A0 #else >>>> =C2=A0 #define va_pa_offset=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 0 >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0 #define va_kernel_pa_offset=C2=A0=C2=A0=C2=A0 0 >>>> +#endif >>>> =C2=A0 #define ARCH_PFN_OFFSET=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (PAGE_OFFSET >> PAGE_= SHIFT) >>>> =C2=A0 #endif /* CONFIG_MMU */ >>>> >>>> +#ifdef CONFIG_64BIT This one is incorrect as kernel_virt_addr is used also in 32b kernel,=20 which causes 32b failure when CONFIG_DEBUG_VIRTUAL is set, the following=20 diff fixes it: diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.= h index e280ba60cb34..6a7761c86ec2 100644 --- a/arch/riscv/include/asm/page.h +++ b/arch/riscv/include/asm/page.h @@ -106,9 +106,9 @@ extern unsigned long pfn_base; #define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) #endif /* CONFIG_MMU */ -#ifdef CONFIG_64BIT extern unsigned long kernel_virt_addr; +#ifdef CONFIG_64BIT #define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) +=20 va_pa_offset)) #ifdef CONFIG_XIP_KERNEL #define kernel_mapping_pa_to_va(y) ({=20 \ >>>> =C2=A0 extern unsigned long kernel_virt_addr; >>>> >>>> =C2=A0 #define linear_mapping_pa_to_va(x)=C2=A0=C2=A0=C2=A0=C2=A0 ((= void *)((unsigned=20 >>>> long)(x) + va_pa_offset)) >>>> @@ -112,6 +117,10 @@ extern unsigned long kernel_virt_addr; >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (_x < kernel_virt_a= ddr)=20 >>>> ?=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 linear_mapping_va_to_pa(_x) :=20 >>>> kernel_mapping_va_to_pa(_x);=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 \ >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >>>> +#else >>>> +#define __pa_to_va_nodebug(x)=C2=A0 ((void *)((unsigned long) (x) += =20 >>>> va_pa_offset)) >>>> +#define __va_to_pa_nodebug(x)=C2=A0 ((unsigned long)(x) - va_pa_off= set) >>>> +#endif >>>> >>>> =C2=A0 #ifdef CONFIG_DEBUG_VIRTUAL >>>> =C2=A0 extern phys_addr_t __virt_to_phys(unsigned long x); >>>> diff --git a/arch/riscv/include/asm/pgtable.h=20 >>>> b/arch/riscv/include/asm/pgtable.h >>>> index 80e63a93e903..5afda75cc2c3 100644 >>>> --- a/arch/riscv/include/asm/pgtable.h >>>> +++ b/arch/riscv/include/asm/pgtable.h >>>> @@ -16,19 +16,27 @@ >>>> =C2=A0 #else >>>> >>>> =C2=A0 #define ADDRESS_SPACE_END=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (UL(-= 1)) >>>> -/* >>>> - * Leave 2GB for kernel and BPF at the end of the address space >>>> - */ >>>> + >>>> +#ifdef CONFIG_64BIT >>>> +/* Leave 2GB for kernel and BPF at the end of the address space */ >>>> =C2=A0 #define KERNEL_LINK_ADDR=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = (ADDRESS_SPACE_END - SZ_2G + 1) >>>> +#else >>>> +#define KERNEL_LINK_ADDR=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PAGE_O= FFSET >>>> +#endif >>>> >>>> =C2=A0 #define VMALLOC_SIZE=C2=A0=C2=A0=C2=A0=C2=A0 (KERN_VIRT_SIZE = >> 1) >>>> =C2=A0 #define VMALLOC_END=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (PAGE_OFFSE= T - 1) >>>> =C2=A0 #define VMALLOC_START=C2=A0=C2=A0=C2=A0 (PAGE_OFFSET - VMALLO= C_SIZE) >>>> >>>> -/* KASLR should leave at least 128MB for BPF after the kernel */ >>>> =C2=A0 #define BPF_JIT_REGION_SIZE=C2=A0=C2=A0=C2=A0 (SZ_128M) >>>> +#ifdef CONFIG_64BIT >>>> +/* KASLR should leave at least 128MB for BPF after the kernel */ >>>> =C2=A0 #define BPF_JIT_REGION_START=C2=A0=C2=A0 PFN_ALIGN((unsigned = long)&_end) >>>> =C2=A0 #define BPF_JIT_REGION_END=C2=A0=C2=A0=C2=A0=C2=A0 (BPF_JIT_R= EGION_START +=20 >>>> BPF_JIT_REGION_SIZE) >>>> +#else >>>> +#define BPF_JIT_REGION_START=C2=A0=C2=A0 (PAGE_OFFSET - BPF_JIT_REG= ION_SIZE) >>>> +#define BPF_JIT_REGION_END=C2=A0=C2=A0=C2=A0=C2=A0 (VMALLOC_END) >>>> +#endif >>>> >>>> =C2=A0 /* Modules always live before the kernel */ >>>> =C2=A0 #ifdef CONFIG_64BIT >>>> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c >>>> index 093f3a96ecfc..dc9b988e0778 100644 >>>> --- a/arch/riscv/mm/init.c >>>> +++ b/arch/riscv/mm/init.c >>>> @@ -91,8 +91,10 @@ static void print_vm_layout(void) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (unsigned long)VMALLOC_END); >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 print_mlm("lowmem",= (unsigned long)PAGE_OFFSET, >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (unsigned long)high_memory); >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 print_mlm("kernel",= (unsigned long)KERNEL_LINK_ADDR, >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (unsigned long)ADDRESS_SPACE_END)= ; >>>> +#endif >>>> =C2=A0 } >>>> =C2=A0 #else >>>> =C2=A0 static void print_vm_layout(void) { } >>>> @@ -165,9 +167,11 @@ static struct pt_alloc_ops pt_ops; >>>> =C2=A0 /* Offset between linear mapping virtual address and kernel l= oad=20 >>>> address */ >>>> =C2=A0 unsigned long va_pa_offset; >>>> =C2=A0 EXPORT_SYMBOL(va_pa_offset); >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0 /* Offset between kernel mapping virtual address and kernel l= oad=20 >>>> address */ >>>> =C2=A0 unsigned long va_kernel_pa_offset; >>>> =C2=A0 EXPORT_SYMBOL(va_kernel_pa_offset); >>>> +#endif >>>> =C2=A0 unsigned long pfn_base; >>>> =C2=A0 EXPORT_SYMBOL(pfn_base); >>>> >>>> @@ -410,7 +414,9 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa= ) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 load_sz =3D (uintpt= r_t)(&_end) - load_pa; >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 va_pa_offset =3D PA= GE_OFFSET - load_pa; >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 va_kernel_pa_offset= =3D kernel_virt_addr - load_pa; >>>> +#endif >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pfn_base =3D PFN_DO= WN(load_pa); >>>> >>>> @@ -469,12 +475,16 @@ asmlinkage void __init setup_vm(uintptr_t dtb_= pa) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 pa + PMD_SIZE, PMD_SIZE, PAGE_KERNEL); >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D (v= oid *)DTB_EARLY_BASE_VA + (dtb_pa &=20 >>>> (PMD_SIZE - 1)); >>>> =C2=A0 #else /* CONFIG_BUILTIN_DTB */ >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * __va can't = be used since it would return a linear=20 >>>> mapping address >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * whereas dtb= _early_va will be used before setup_vm_final=20 >>>> installs >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * the linear = mapping. >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D ke= rnel_mapping_pa_to_va(dtb_pa); >>>> +#else >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D __va(dtb_pa); >>>> +#endif /* CONFIG_64BIT */ >>>> =C2=A0 #endif /* CONFIG_BUILTIN_DTB */ >>>> =C2=A0 #else >>>> =C2=A0 #ifndef CONFIG_BUILTIN_DTB >>>> @@ -486,7 +496,11 @@ asmlinkage void __init setup_vm(uintptr_t dtb_p= a) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 pa + PGDIR_SIZE, PGDIR_SIZE, PAGE_KERNEL); >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D (v= oid *)DTB_EARLY_BASE_VA + (dtb_pa &=20 >>>> (PGDIR_SIZE - 1)); >>>> =C2=A0 #else /* CONFIG_BUILTIN_DTB */ >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D ke= rnel_mapping_pa_to_va(dtb_pa); >>>> +#else >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_va =3D __va(dtb_pa); >>>> +#endif /* CONFIG_64BIT */ >>>> =C2=A0 #endif /* CONFIG_BUILTIN_DTB */ >>>> =C2=A0 #endif >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 dtb_early_pa =3D dt= b_pa; >>>> @@ -571,12 +585,21 @@ static void __init setup_vm_final(void) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 for (pa =3D start; pa < end; pa +=3D map_size= ) { >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= va =3D (uintptr_t)__va(pa); >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= create_pgd_mapping(swapper_pg_dir, va, pa, >>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 map_size, PAGE_KERNEL); >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 map_size, >>>> +#ifdef CONFIG_64BIT >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PAGE_KERNEL >>>> +#else >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 PAGE_KERNEL_EXEC >>>> +#endif >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ); >>>> + >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> >>>> +#ifdef CONFIG_64BIT >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Map the kernel *= / >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 create_kernel_page_= table(swapper_pg_dir, PMD_SIZE); >>>> +#endif >>>> >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Clear fixmap PTE= and PMD mappings */ >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 clear_fixmap(FIX_PT= E); >>>> --=20 >>>> 2.20.1 >>>> I agree with you, too much #ifdef, it is hardly readable: I take a look=20 at how I can make it simpler. Sorry for all those fixes, Alex >=20 > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv