Patch "RISC-V: Don't have MAX_PHYSMEM_BITS exceed phys_addr_t" has been added to the 6.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    RISC-V: Don't have MAX_PHYSMEM_BITS exceed phys_addr_t

to the 6.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     risc-v-don-t-have-max_physmem_bits-exceed-phys_addr_.patch
and it can be found in the queue-6.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6c86a420116c474ef9f4a140151f5f20bd6c2dc6
Author: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
Date:   Wed Jul 31 09:22:00 2024 -0700

    RISC-V: Don't have MAX_PHYSMEM_BITS exceed phys_addr_t
    
    [ Upstream commit ad380f6a0a5e82e794b45bb2eaec24ed51a56846 ]
    
    I recently ended up with a warning on some compilers along the lines of
    
          CC      kernel/resource.o
        In file included from include/linux/ioport.h:16,
                         from kernel/resource.c:15:
        kernel/resource.c: In function 'gfr_start':
        include/linux/minmax.h:49:37: error: conversion from 'long long unsigned int' to 'resource_size_t' {aka 'unsigned int'} changes value from '17179869183' to '4294967295' [-Werror=overflow]
           49 |         ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); })
              |                                     ^
        include/linux/minmax.h:52:9: note: in expansion of macro '__cmp_once_unique'
           52 |         __cmp_once_unique(op, type, x, y, __UNIQUE_ID(x_), __UNIQUE_ID(y_))
              |         ^~~~~~~~~~~~~~~~~
        include/linux/minmax.h:161:27: note: in expansion of macro '__cmp_once'
          161 | #define min_t(type, x, y) __cmp_once(min, type, x, y)
              |                           ^~~~~~~~~~
        kernel/resource.c:1829:23: note: in expansion of macro 'min_t'
         1829 |                 end = min_t(resource_size_t, base->end,
              |                       ^~~~~
        kernel/resource.c: In function 'gfr_continue':
        include/linux/minmax.h:49:37: error: conversion from 'long long unsigned int' to 'resource_size_t' {aka 'unsigned int'} changes value from '17179869183' to '4294967295' [-Werror=overflow]
           49 |         ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); })
              |                                     ^
        include/linux/minmax.h:52:9: note: in expansion of macro '__cmp_once_unique'
           52 |         __cmp_once_unique(op, type, x, y, __UNIQUE_ID(x_), __UNIQUE_ID(y_))
              |         ^~~~~~~~~~~~~~~~~
        include/linux/minmax.h:161:27: note: in expansion of macro '__cmp_once'
          161 | #define min_t(type, x, y) __cmp_once(min, type, x, y)
              |                           ^~~~~~~~~~
        kernel/resource.c:1847:24: note: in expansion of macro 'min_t'
         1847 |                addr <= min_t(resource_size_t, base->end,
              |                        ^~~~~
        cc1: all warnings being treated as errors
    
    which looks like a real problem: our phys_addr_t is only 32 bits now, so
    having 34-bit masks is just going to result in overflows.
    
    Reviewed-by: Charlie Jenkins <charlie@xxxxxxxxxxxx>
    Reviewed-by: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240731162159.9235-2-palmer@xxxxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/include/asm/sparsemem.h b/arch/riscv/include/asm/sparsemem.h
index 63acaecc33747..2f901a410586d 100644
--- a/arch/riscv/include/asm/sparsemem.h
+++ b/arch/riscv/include/asm/sparsemem.h
@@ -7,7 +7,7 @@
 #ifdef CONFIG_64BIT
 #define MAX_PHYSMEM_BITS	56
 #else
-#define MAX_PHYSMEM_BITS	34
+#define MAX_PHYSMEM_BITS	32
 #endif /* CONFIG_64BIT */
 #define SECTION_SIZE_BITS	27
 #endif /* CONFIG_SPARSEMEM */




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux