Re: [PATCH] mm: generalize ZONE_[DMA|DMA32]
On Thu, May 27, 2021 at 10:30:47PM +0800, Kefeng Wang wrote: > ZONE_[DMA|DMA32] configs have duplicate definitions on platforms > that subscribe them. Instead, just make them generic options which > can be selected on applicable platforms. > > Also only x86/arm64 architectures could enable both ZONE_DMA and > ZONE_DMA32 if EXPERT, add ARCH_HAS_ZONE_DMA_SET to make dma zone > configurable and visible on the two architectures. > > Cc: Andrew Morton > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Geert Uytterhoeven > Cc: Thomas Bogendoerfer > Cc: "David S. Miller" > Cc: Ingo Molnar > Cc: Borislav Petkov > Cc: Palmer Dabbelt > Cc: Richard Henderson > Cc: Russell King > Signed-off-by: Kefeng Wang For arm64: Acked-by: Catalin Marinas
Re: [PATCH] mm: generalize ZONE_[DMA|DMA32]
Hi Kefeng, Thank you for the patch! Yet something to improve: [auto build test ERROR on powerpc/next] [also build test ERROR on arm64/for-next/core m68k/for-next s390/features linus/master v5.13-rc3] [cannot apply to hnaz-linux-mm/master tip/x86/core sparc-next/master sparc/master next-20210527] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Kefeng-Wang/mm-generalize-ZONE_-DMA-DMA32/20210527-222334 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: i386-allyesconfig (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/de626453e50ab17adeffd9602e997b4b67b80eb2 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Kefeng-Wang/mm-generalize-ZONE_-DMA-DMA32/20210527-222334 git checkout de626453e50ab17adeffd9602e997b4b67b80eb2 # save the attached .config to linux build tree make W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All error/warnings (new ones prefixed by >>): In file included from include/linux/slab.h:15, from include/linux/crypto.h:20, from arch/x86/kernel/asm-offsets.c:9: >> include/linux/gfp.h:433:2: error: #error GFP_ZONES_SHIFT too large to create >> GFP_ZONE_TABLE integer 433 | #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer | ^ include/linux/gfp.h: In function 'gfp_zone': >> include/linux/gfp.h:444:20: warning: left shift count >= width of type >> [-Wshift-count-overflow] 444 | | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\ |^~ include/linux/gfp.h:469:7: note: in expansion of macro 'GFP_ZONE_TABLE' 469 | z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) & | ^~ -- In file included from include/linux/slab.h:15, from include/linux/crypto.h:20, from arch/x86/kernel/asm-offsets.c:9: >> include/linux/gfp.h:433:2: error: #error GFP_ZONES_SHIFT too large to create >> GFP_ZONE_TABLE integer 433 | #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer | ^ include/linux/gfp.h: In function 'gfp_zone': >> include/linux/gfp.h:444:20: warning: left shift count >= width of type >> [-Wshift-count-overflow] 444 | | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\ |^~ include/linux/gfp.h:469:7: note: in expansion of macro 'GFP_ZONE_TABLE' 469 | z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) & | ^~ make[2]: *** [scripts/Makefile.build:117: arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [Makefile:1227: prepare0] Error 2 make[1]: Target 'modules_prepare' not remade because of errors. make: *** [Makefile:215: __sub-make] Error 2 make: Target 'modules_prepare' not remade because of errors. -- In file included from include/linux/slab.h:15, from include/linux/crypto.h:20, from arch/x86/kernel/asm-offsets.c:9: >> include/linux/gfp.h:433:2: error: #error GFP_ZONES_SHIFT too large to create >> GFP_ZONE_TABLE integer 433 | #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer | ^ include/linux/gfp.h: In function 'gfp_zone': >> include/linux/gfp.h:444:20: warning: left shift count >= width of type >> [-Wshift-count-overflow] 444 | | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\ |^~ include/linux/gfp.h:469:7: note: in expansion of macro 'GFP_ZONE_TABLE' 469 | z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) & | ^~ make[2]: *** [scripts/Makefile.build:117: arch/x86/kernel/asm-offsets.s] Error 1 make[2]: Target '__build' not remade because of errors. make[1]: *** [Makefile:1227: prepare0] Error 2 make[1]: Target 'prepare' not remade because of errors. make: *** [Makefile:215: __sub-make] Error 2 make: Target 'prepare' not remade because of errors. vim +433 include/linux/gfp.h b11a7b94100cba Dan Williams 2016-03-17 431 b11a7b94100cba Dan Williams 2016-03-17 432 #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG b11a7b94100cba Dan Williams 2016-03-17 @433 #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer b70d94ee438b3f Christoph Lameter 2009-06-16 434 #endif b70d94ee438b3f Christoph Lameter 2009-06-16 435 b70d94ee438b3f Christoph Lameter 2009-06-16 436 #define GFP_ZONE_TABLE ( \ b11a7b94100cba Dan Williams
Re: [PATCH] mm: generalize ZONE_[DMA|DMA32]
On Thu, May 27, 2021 at 10:30:47PM +0800, Kefeng Wang wrote: > ZONE_[DMA|DMA32] configs have duplicate definitions on platforms > that subscribe them. Instead, just make them generic options which > can be selected on applicable platforms. > > Also only x86/arm64 architectures could enable both ZONE_DMA and > ZONE_DMA32 if EXPERT, add ARCH_HAS_ZONE_DMA_SET to make dma zone > configurable and visible on the two architectures. > > Cc: Andrew Morton > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Geert Uytterhoeven > Cc: Thomas Bogendoerfer > Cc: "David S. Miller" > Cc: Ingo Molnar > Cc: Borislav Petkov > Cc: Palmer Dabbelt > Cc: Richard Henderson > Cc: Russell King > Signed-off-by: Kefeng Wang Acked-by: Mike Rapoport > --- > arch/alpha/Kconfig | 5 + > arch/arm/Kconfig | 3 --- > arch/arm64/Kconfig | 9 + > arch/ia64/Kconfig | 4 +--- > arch/m68k/Kconfig | 5 + > arch/microblaze/Kconfig| 4 +--- > arch/mips/Kconfig | 7 --- > arch/powerpc/Kconfig | 4 > arch/powerpc/platforms/Kconfig.cputype | 1 + > arch/riscv/Kconfig | 5 + > arch/s390/Kconfig | 4 +--- > arch/sparc/Kconfig | 5 + > arch/x86/Kconfig | 15 ++- > mm/Kconfig | 11 +++ > 14 files changed, 22 insertions(+), 60 deletions(-) > > diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig > index 5998106faa60..6a69a14c4825 100644 > --- a/arch/alpha/Kconfig > +++ b/arch/alpha/Kconfig > @@ -40,6 +40,7 @@ config ALPHA > select MMU_GATHER_NO_RANGE > select SET_FS > select SPARSEMEM_EXTREME if SPARSEMEM > + select ZONE_DMA > help > The Alpha is a 64-bit general-purpose processor designed and > marketed by the Digital Equipment Corporation of blessed memory, > @@ -65,10 +66,6 @@ config GENERIC_CALIBRATE_DELAY > bool > default y > > -config ZONE_DMA > - bool > - default y > - > config GENERIC_ISA_DMA > bool > default y > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 24804f11302d..000c3f80b58e 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -218,9 +218,6 @@ config GENERIC_CALIBRATE_DELAY > config ARCH_MAY_HAVE_PC_FDC > bool > > -config ZONE_DMA > - bool > - > config ARCH_SUPPORTS_UPROBES > def_bool y > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 9f1d8566bbf9..42794474f37f 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -42,6 +42,7 @@ config ARM64 > select ARCH_HAS_SYSCALL_WRAPPER > select ARCH_HAS_TEARDOWN_DMA_OPS if IOMMU_SUPPORT > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > + select ARCH_HAS_ZONE_DMA_SET if EXPERT > select ARCH_HAVE_ELF_PROT > select ARCH_HAVE_NMI_SAFE_CMPXCHG > select ARCH_INLINE_READ_LOCK if !PREEMPTION > @@ -307,14 +308,6 @@ config GENERIC_CSUM > config GENERIC_CALIBRATE_DELAY > def_bool y > > -config ZONE_DMA > - bool "Support DMA zone" if EXPERT > - default y > - > -config ZONE_DMA32 > - bool "Support DMA32 zone" if EXPERT > - default y > - > config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE > def_bool y > > diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig > index 279252e3e0f7..fd8503a0088a 100644 > --- a/arch/ia64/Kconfig > +++ b/arch/ia64/Kconfig > @@ -60,6 +60,7 @@ config IA64 > select NUMA if !FLATMEM > select PCI_MSI_ARCH_FALLBACKS if PCI_MSI > select SET_FS > + select ZONE_DMA32 > default y > help > The Itanium Processor Family is Intel's 64-bit successor to > @@ -72,9 +73,6 @@ config 64BIT > select ATA_NONSTANDARD if ATA > default y > > -config ZONE_DMA32 > - def_bool y > - > config MMU > bool > default y > diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig > index 372e4e69c43a..05a729c6ad7f 100644 > --- a/arch/m68k/Kconfig > +++ b/arch/m68k/Kconfig > @@ -34,6 +34,7 @@ config M68K > select SET_FS > select UACCESS_MEMCPY if !MMU > select VIRT_TO_BUS > + select ZONE_DMA > > config CPU_BIG_ENDIAN > def_bool y > @@ -62,10 +63,6 @@ config TIME_LOW_RES > config NO_IOPORT_MAP > def_bool y > > -config ZONE_DMA > - bool > - default y > - > config HZ > int > default 1000 if CLEOPATRA > diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig > index 0660f47012bc..14a67a42fcae 100644 > --- a/arch/microblaze/Kconfig > +++ b/arch/microblaze/Kconfig > @@ -43,6 +43,7 @@ config MICROBLAZE > select MMU_GATHER_NO_RANGE > select SPARSE_IRQ > select SET_FS > + select ZONE_DMA > > # Endianness selection > choice > @@ -60,9 +61,6 @@ config CPU_LITTLE_ENDIAN > > endchoice > > -config
[PATCH] mm: generalize ZONE_[DMA|DMA32]
ZONE_[DMA|DMA32] configs have duplicate definitions on platforms that subscribe them. Instead, just make them generic options which can be selected on applicable platforms. Also only x86/arm64 architectures could enable both ZONE_DMA and ZONE_DMA32 if EXPERT, add ARCH_HAS_ZONE_DMA_SET to make dma zone configurable and visible on the two architectures. Cc: Andrew Morton Cc: Catalin Marinas Cc: Will Deacon Cc: Geert Uytterhoeven Cc: Thomas Bogendoerfer Cc: "David S. Miller" Cc: Ingo Molnar Cc: Borislav Petkov Cc: Palmer Dabbelt Cc: Richard Henderson Cc: Russell King Signed-off-by: Kefeng Wang --- arch/alpha/Kconfig | 5 + arch/arm/Kconfig | 3 --- arch/arm64/Kconfig | 9 + arch/ia64/Kconfig | 4 +--- arch/m68k/Kconfig | 5 + arch/microblaze/Kconfig| 4 +--- arch/mips/Kconfig | 7 --- arch/powerpc/Kconfig | 4 arch/powerpc/platforms/Kconfig.cputype | 1 + arch/riscv/Kconfig | 5 + arch/s390/Kconfig | 4 +--- arch/sparc/Kconfig | 5 + arch/x86/Kconfig | 15 ++- mm/Kconfig | 11 +++ 14 files changed, 22 insertions(+), 60 deletions(-) diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 5998106faa60..6a69a14c4825 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -40,6 +40,7 @@ config ALPHA select MMU_GATHER_NO_RANGE select SET_FS select SPARSEMEM_EXTREME if SPARSEMEM + select ZONE_DMA help The Alpha is a 64-bit general-purpose processor designed and marketed by the Digital Equipment Corporation of blessed memory, @@ -65,10 +66,6 @@ config GENERIC_CALIBRATE_DELAY bool default y -config ZONE_DMA - bool - default y - config GENERIC_ISA_DMA bool default y diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 24804f11302d..000c3f80b58e 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -218,9 +218,6 @@ config GENERIC_CALIBRATE_DELAY config ARCH_MAY_HAVE_PC_FDC bool -config ZONE_DMA - bool - config ARCH_SUPPORTS_UPROBES def_bool y diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 9f1d8566bbf9..42794474f37f 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -42,6 +42,7 @@ config ARM64 select ARCH_HAS_SYSCALL_WRAPPER select ARCH_HAS_TEARDOWN_DMA_OPS if IOMMU_SUPPORT select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST + select ARCH_HAS_ZONE_DMA_SET if EXPERT select ARCH_HAVE_ELF_PROT select ARCH_HAVE_NMI_SAFE_CMPXCHG select ARCH_INLINE_READ_LOCK if !PREEMPTION @@ -307,14 +308,6 @@ config GENERIC_CSUM config GENERIC_CALIBRATE_DELAY def_bool y -config ZONE_DMA - bool "Support DMA zone" if EXPERT - default y - -config ZONE_DMA32 - bool "Support DMA32 zone" if EXPERT - default y - config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE def_bool y diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 279252e3e0f7..fd8503a0088a 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -60,6 +60,7 @@ config IA64 select NUMA if !FLATMEM select PCI_MSI_ARCH_FALLBACKS if PCI_MSI select SET_FS + select ZONE_DMA32 default y help The Itanium Processor Family is Intel's 64-bit successor to @@ -72,9 +73,6 @@ config 64BIT select ATA_NONSTANDARD if ATA default y -config ZONE_DMA32 - def_bool y - config MMU bool default y diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 372e4e69c43a..05a729c6ad7f 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -34,6 +34,7 @@ config M68K select SET_FS select UACCESS_MEMCPY if !MMU select VIRT_TO_BUS + select ZONE_DMA config CPU_BIG_ENDIAN def_bool y @@ -62,10 +63,6 @@ config TIME_LOW_RES config NO_IOPORT_MAP def_bool y -config ZONE_DMA - bool - default y - config HZ int default 1000 if CLEOPATRA diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 0660f47012bc..14a67a42fcae 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -43,6 +43,7 @@ config MICROBLAZE select MMU_GATHER_NO_RANGE select SPARSE_IRQ select SET_FS + select ZONE_DMA # Endianness selection choice @@ -60,9 +61,6 @@ config CPU_LITTLE_ENDIAN endchoice -config ZONE_DMA - def_bool y - config ARCH_HAS_ILOG2_U32 def_bool n diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index ed51970c08e7..430d5324f1af 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -3277,13 +3277,6 @@ config I8253 select CLKSRC_I8253 select
Re: [PATCH] mm: generalize ZONE_[DMA|DMA32]
On Thu, May 27, 2021 at 4:21 PM Kefeng Wang wrote: > ZONE_[DMA|DMA32] configs have duplicate definitions on platforms > that subscribe them. Instead, just make them generic options which > can be selected on applicable platforms. > > Also only x86/arm64 architectures could enable both ZONE_DMA and > ZONE_DMA32 if EXPERT, add ARCH_HAS_ZONE_DMA_SET to make dma zone > configurable and visible on the two architectures. > > Cc: Andrew Morton > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Geert Uytterhoeven > Cc: Thomas Bogendoerfer > Cc: "David S. Miller" > Cc: Ingo Molnar > Cc: Borislav Petkov > Cc: Palmer Dabbelt > Cc: Richard Henderson > Cc: Russell King > Signed-off-by: Kefeng Wang > arch/m68k/Kconfig | 5 + Acked-by: Geert Uytterhoeven Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds