remove the BUG_ON check of mapping the last 4K bytes of the addressable
memory since "this is true for every kernel actually" as pointed out
by Alexandre.
Signed-off-by: Jisheng Zhang <[email protected]>
Reviewed-by: Alexandre Ghiti <[email protected]>
---
arch/riscv/mm/init.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index cf4d018b7d66..8347d0fda8cd 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -811,14 +811,6 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
-#ifdef CONFIG_64BIT
- /*
- * The last 4K bytes of the addressable memory can not be mapped because
- * of IS_ERR_VALUE macro.
- */
- BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
-#endif
-
pt_ops_set_early();
/* Setup early PGD for fixmap */
--
2.34.1
On 1/25/22 16:55, Jisheng Zhang wrote:
> remove the BUG_ON check of mapping the last 4K bytes of the addressable
> memory since "this is true for every kernel actually" as pointed out
> by Alexandre.
>
> Signed-off-by: Jisheng Zhang <[email protected]>
> Reviewed-by: Alexandre Ghiti <[email protected]>
> ---
> arch/riscv/mm/init.c | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index cf4d018b7d66..8347d0fda8cd 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -811,14 +811,6 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
> BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
> BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
>
> -#ifdef CONFIG_64BIT
> - /*
> - * The last 4K bytes of the addressable memory can not be mapped because
> - * of IS_ERR_VALUE macro.
> - */
> - BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
> -#endif
This BUG_ON seems pretty legit to me: I re-read the exchanges we had,
and I see that I didn't notice that in your v2, you actually removed the
BUG_ON. So that's my bad, what I meant in the first place was that the
BUG_ON is true for 32-bit and 64-bit kernels actually.
Sorry my RB was not right on this one :(
Alex
> -
> pt_ops_set_early();
>
> /* Setup early PGD for fixmap */
On Tue, 25 Jan 2022 08:10:41 PST (-0800), [email protected] wrote:
>
> On 1/25/22 16:55, Jisheng Zhang wrote:
>> remove the BUG_ON check of mapping the last 4K bytes of the addressable
>> memory since "this is true for every kernel actually" as pointed out
>> by Alexandre.
>>
>> Signed-off-by: Jisheng Zhang <[email protected]>
>> Reviewed-by: Alexandre Ghiti <[email protected]>
>> ---
>> arch/riscv/mm/init.c | 8 --------
>> 1 file changed, 8 deletions(-)
>>
>> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
>> index cf4d018b7d66..8347d0fda8cd 100644
>> --- a/arch/riscv/mm/init.c
>> +++ b/arch/riscv/mm/init.c
>> @@ -811,14 +811,6 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
>> BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
>> BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
>>
>> -#ifdef CONFIG_64BIT
>> - /*
>> - * The last 4K bytes of the addressable memory can not be mapped because
>> - * of IS_ERR_VALUE macro.
>> - */
>> - BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
>> -#endif
>
>
> This BUG_ON seems pretty legit to me: I re-read the exchanges we had,
> and I see that I didn't notice that in your v2, you actually removed the
> BUG_ON. So that's my bad, what I meant in the first place was that the
> BUG_ON is true for 32-bit and 64-bit kernels actually.
There's actually an ifndef 64BIT above that sort of handles this case
(though I didn't check to see if we're getting the limits correct, so it
may not work properly). That's shrinking the memory, rather than just
firing a BUG, and it's not really any more code so we should go that way
for both. I could see leaving a BUG in there, maybe just explicitly
using IS_ERR_VALUE as that's really what we're checking for (though if
that's not 4K a bunch of stuff will break, so maybe it just doesn't
matter).
> Sorry my RB was not right on this one :(
>
> Alex
>
>
>> -
>> pt_ops_set_early();
>>
>> /* Setup early PGD for fixmap */
Hi Palmer,
On 2/15/22 00:41, Palmer Dabbelt wrote:
> On Tue, 25 Jan 2022 08:10:41 PST (-0800), [email protected] wrote:
>>
>> On 1/25/22 16:55, Jisheng Zhang wrote:
>>> remove the BUG_ON check of mapping the last 4K bytes of the addressable
>>> memory since "this is true for every kernel actually" as pointed out
>>> by Alexandre.
>>>
>>> Signed-off-by: Jisheng Zhang <[email protected]>
>>> Reviewed-by: Alexandre Ghiti <[email protected]>
>>> ---
>>> arch/riscv/mm/init.c | 8 --------
>>> 1 file changed, 8 deletions(-)
>>>
>>> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
>>> index cf4d018b7d66..8347d0fda8cd 100644
>>> --- a/arch/riscv/mm/init.c
>>> +++ b/arch/riscv/mm/init.c
>>> @@ -811,14 +811,6 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
>>> BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
>>> BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
>>>
>>> -#ifdef CONFIG_64BIT
>>> - /*
>>> - * The last 4K bytes of the addressable memory can not be
>>> mapped because
>>> - * of IS_ERR_VALUE macro.
>>> - */
>>> - BUG_ON((kernel_map.virt_addr + kernel_map.size) >
>>> ADDRESS_SPACE_END - SZ_4K);
>>> -#endif
>>
>>
>> This BUG_ON seems pretty legit to me: I re-read the exchanges we had,
>> and I see that I didn't notice that in your v2, you actually removed the
>> BUG_ON. So that's my bad, what I meant in the first place was that the
>> BUG_ON is true for 32-bit and 64-bit kernels actually.
>
> There's actually an ifndef 64BIT above that sort of handles this case
> (though I didn't check to see if we're getting the limits correct, so
> it may not work properly). That's shrinking the memory, rather than
> just firing a BUG, and it's not really any more code so we should go
> that way for both. I could see leaving a BUG in there, maybe just
> explicitly using IS_ERR_VALUE as that's really what we're checking for
> (though if that's not 4K a bunch of stuff will break, so maybe it just
> doesn't matter).
I think you're talking about:
memory_limit = KERN_VIRT_SIZE - (IS_ENABLED(CONFIG_64BIT) ? SZ_4G : 0);
If yes, that's shrinking the available physical memory we can map in the
linear mapping, whereas the BUG_ON here is triggered if the kernel
mapping is very (very) large and overlaps the last *4K* of the address
space, so I still think the BUG_ON is legit although very unlikely.
However, I'm wondering if the shrinking still holds with the recent move
of KASAN, I may be back with a fix for that.
Alex
>
>> Sorry my RB was not right on this one :(
>>
>> Alex
>>
>>
>>> -
>>> pt_ops_set_early();
>>>
>>> /* Setup early PGD for fixmap */