* scatterlist arch cleanups @ 2018-11-09 9:00 Christoph Hellwig 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-11-09 9:00 UTC (permalink / raw) To: iommu; +Cc: linux-arch, linux-kernel Remove leftovers, and switch the default on enabling SG chaining. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers 2018-11-09 9:00 scatterlist arch cleanups Christoph Hellwig @ 2018-11-09 9:00 ` Christoph Hellwig 2018-11-16 1:47 ` Palmer Dabbelt 2018-12-06 15:00 ` Christoph Hellwig 2018-11-09 9:00 ` [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN Christoph Hellwig 2018-11-29 17:06 ` scatterlist arch cleanups Christoph Hellwig 2 siblings, 2 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-11-09 9:00 UTC (permalink / raw) To: iommu; +Cc: linux-arch, linux-kernel There has been no <asm/scatterlist.h> for a long time, which also means there is no point in using it from asm-generic. Signed-off-by: Christoph Hellwig <hch@lst.de> --- arch/csky/include/asm/Kbuild | 1 - arch/h8300/include/asm/Kbuild | 1 - arch/riscv/include/asm/Kbuild | 1 - 3 files changed, 3 deletions(-) diff --git a/arch/csky/include/asm/Kbuild b/arch/csky/include/asm/Kbuild index 2a0abe8f2a35..7c48a123300d 100644 --- a/arch/csky/include/asm/Kbuild +++ b/arch/csky/include/asm/Kbuild @@ -34,7 +34,6 @@ generic-y += pci.h generic-y += percpu.h generic-y += preempt.h generic-y += qrwlock.h -generic-y += scatterlist.h generic-y += sections.h generic-y += serial.h generic-y += shm.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..32f0c8952147 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -36,7 +36,6 @@ generic-y += parport.h generic-y += percpu.h generic-y += pgalloc.h generic-y += preempt.h -generic-y += scatterlist.h generic-y += sections.h generic-y += serial.h generic-y += sizes.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index 6a646d9ea780..011cc7c7b3ad 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -37,7 +37,6 @@ generic-y += poll.h generic-y += posix_types.h generic-y += preempt.h generic-y += resource.h -generic-y += scatterlist.h generic-y += sections.h generic-y += sembuf.h generic-y += serial.h -- 2.19.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig @ 2018-11-16 1:47 ` Palmer Dabbelt 2018-12-06 15:00 ` Christoph Hellwig 1 sibling, 0 replies; 10+ messages in thread From: Palmer Dabbelt @ 2018-11-16 1:47 UTC (permalink / raw) To: Christoph Hellwig; +Cc: iommu, linux-arch, linux-kernel On Fri, 09 Nov 2018 01:00:07 PST (-0800), Christoph Hellwig wrote: > There has been no <asm/scatterlist.h> for a long time, which also means > there is no point in using it from asm-generic. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > arch/csky/include/asm/Kbuild | 1 - > arch/h8300/include/asm/Kbuild | 1 - > arch/riscv/include/asm/Kbuild | 1 - > 3 files changed, 3 deletions(-) > > diff --git a/arch/csky/include/asm/Kbuild b/arch/csky/include/asm/Kbuild > index 2a0abe8f2a35..7c48a123300d 100644 > --- a/arch/csky/include/asm/Kbuild > +++ b/arch/csky/include/asm/Kbuild > @@ -34,7 +34,6 @@ generic-y += pci.h > generic-y += percpu.h > generic-y += preempt.h > generic-y += qrwlock.h > -generic-y += scatterlist.h > generic-y += sections.h > generic-y += serial.h > generic-y += shm.h > diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild > index a5d0b2991f47..32f0c8952147 100644 > --- a/arch/h8300/include/asm/Kbuild > +++ b/arch/h8300/include/asm/Kbuild > @@ -36,7 +36,6 @@ generic-y += parport.h > generic-y += percpu.h > generic-y += pgalloc.h > generic-y += preempt.h > -generic-y += scatterlist.h > generic-y += sections.h > generic-y += serial.h > generic-y += sizes.h > diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild > index 6a646d9ea780..011cc7c7b3ad 100644 > --- a/arch/riscv/include/asm/Kbuild > +++ b/arch/riscv/include/asm/Kbuild > @@ -37,7 +37,6 @@ generic-y += poll.h > generic-y += posix_types.h > generic-y += preempt.h > generic-y += resource.h > -generic-y += scatterlist.h > generic-y += sections.h > generic-y += sembuf.h > generic-y += serial.h Reviewed-by: Palmer Dabbelt <palmer@sifive.com> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig 2018-11-16 1:47 ` Palmer Dabbelt @ 2018-12-06 15:00 ` Christoph Hellwig 1 sibling, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-12-06 15:00 UTC (permalink / raw) To: iommu; +Cc: linux-arch, linux-kernel Looks like generic-y is mostly going away anyway, so I'm going to skip this to avoid conflicts with the kbuild tree. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN 2018-11-09 9:00 scatterlist arch cleanups Christoph Hellwig 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig @ 2018-11-09 9:00 ` Christoph Hellwig 2018-11-16 16:52 ` Palmer Dabbelt 2018-12-06 15:01 ` Christoph Hellwig 2018-11-29 17:06 ` scatterlist arch cleanups Christoph Hellwig 2 siblings, 2 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-11-09 9:00 UTC (permalink / raw) To: iommu; +Cc: linux-arch, linux-kernel These days architectures are mostly out of the business of dealing with struct scatterlist at all, unless they have architecture specific iommu drivers. Replace the ARCH_HAS_SG_CHAIN symbol with a ARCH_NO_SG_CHAIN one only enabled for architectures with horrible legacy iommu drivers like alpha and parisc, and conditionally for arm which wants to keep it disable for legacy platforms. Signed-off-by: Christoph Hellwig <hch@lst.de> --- .../features/io/sg-chain/arch-support.txt | 33 ------------------- arch/alpha/Kconfig | 1 + arch/arc/Kconfig | 1 - arch/arm/Kconfig | 2 +- arch/arm64/Kconfig | 1 - arch/ia64/Kconfig | 1 - arch/parisc/Kconfig | 1 + arch/powerpc/Kconfig | 1 - arch/s390/Kconfig | 1 - arch/sparc/Kconfig | 1 - arch/x86/Kconfig | 1 - arch/xtensa/Kconfig | 1 - include/linux/scatterlist.h | 6 ++-- lib/Kconfig | 2 +- lib/scatterlist.c | 2 +- 15 files changed, 8 insertions(+), 47 deletions(-) delete mode 100644 Documentation/features/io/sg-chain/arch-support.txt diff --git a/Documentation/features/io/sg-chain/arch-support.txt b/Documentation/features/io/sg-chain/arch-support.txt deleted file mode 100644 index 6554f0372c3f..000000000000 --- a/Documentation/features/io/sg-chain/arch-support.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# Feature name: sg-chain -# Kconfig: ARCH_HAS_SG_CHAIN -# description: arch supports chained scatter-gather lists -# - ----------------------- - | arch |status| - ----------------------- - | alpha: | TODO | - | arc: | ok | - | arm: | ok | - | arm64: | ok | - | c6x: | TODO | - | h8300: | TODO | - | hexagon: | TODO | - | ia64: | ok | - | m68k: | TODO | - | microblaze: | TODO | - | mips: | TODO | - | nds32: | TODO | - | nios2: | TODO | - | openrisc: | TODO | - | parisc: | TODO | - | powerpc: | ok | - | riscv: | TODO | - | s390: | ok | - | sh: | TODO | - | sparc: | ok | - | um: | TODO | - | unicore32: | TODO | - | x86: | ok | - | xtensa: | TODO | - ----------------------- diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 5b4f88363453..a7e748a46c18 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -5,6 +5,7 @@ config ALPHA select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_NO_PREEMPT + select ARCH_NO_SG_CHAIN select ARCH_USE_CMPXCHG_LOCKREF select HAVE_AOUT select HAVE_IDE diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index c9e2a1323536..fd48d698da29 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -13,7 +13,6 @@ config ARC select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_SYNC_DMA_FOR_CPU select ARCH_HAS_SYNC_DMA_FOR_DEVICE - select ARCH_HAS_SG_CHAIN select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC select BUILDTIME_EXTABLE_SORT select CLONE_BACKWARDS diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 91be74d8df65..199eb62230b0 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -19,6 +19,7 @@ config ARM select ARCH_HAVE_CUSTOM_GPIO_H select ARCH_HAS_GCOV_PROFILE_ALL select ARCH_MIGHT_HAVE_PC_PARPORT + select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 select ARCH_SUPPORTS_ATOMIC_RMW @@ -118,7 +119,6 @@ config ARM <http://www.arm.linux.org.uk/>. config ARM_HAS_SG_CHAIN - select ARCH_HAS_SG_CHAIN bool config ARM_DMA_USE_IOMMU diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 787d7850e064..4c851b3a7b7c 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -23,7 +23,6 @@ config ARM64 select ARCH_HAS_MEMBARRIER_SYNC_CORE select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_SET_MEMORY - select ARCH_HAS_SG_CHAIN select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_STRICT_MODULE_RWX select ARCH_HAS_SYNC_DMA_FOR_DEVICE diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 36773def6920..d6f203658994 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -29,7 +29,6 @@ config IA64 select HAVE_MEMBLOCK_NODE_MAP select HAVE_VIRT_CPU_ACCOUNTING select ARCH_HAS_DMA_MARK_CLEAN - select ARCH_HAS_SG_CHAIN select VIRT_TO_BUS select ARCH_DISCARD_MEMBLOCK select GENERIC_IRQ_PROBE diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 92a339ee28b3..428ee50fc3db 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -11,6 +11,7 @@ config PARISC select ARCH_HAS_ELF_RANDOMIZE select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_UBSAN_SANITIZE_ALL + select ARCH_NO_SG_CHAIN select ARCH_SUPPORTS_MEMORY_FAILURE select RTC_CLASS select RTC_DRV_GENERIC diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 8be31261aec8..4bc8edd83cee 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -138,7 +138,6 @@ config PPC select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_MEMBARRIER_CALLBACKS select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE && PPC64 - select ARCH_HAS_SG_CHAIN select ARCH_HAS_STRICT_KERNEL_RWX if ((PPC_BOOK3S_64 || PPC32) && !RELOCATABLE && !HIBERNATION) select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HAS_UACCESS_FLUSHCACHE if PPC64 diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 5173366af8f3..5624e8607054 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -73,7 +73,6 @@ config S390 select ARCH_HAS_KCOV select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_SET_MEMORY - select ARCH_HAS_SG_CHAIN select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_STRICT_MODULE_RWX select ARCH_HAS_UBSAN_SANITIZE_ALL diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 490b2c95c212..8853b6ceae17 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -40,7 +40,6 @@ config SPARC select MODULES_USE_ELF_RELA select ODD_RT_SIGACTION select OLD_SIGSUSPEND - select ARCH_HAS_SG_CHAIN select CPU_NO_EFFICIENT_FFS select LOCKDEP_SMALL if LOCKDEP select NEED_DMA_MAP_STATE diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ba7e3464ee92..6faab6f9b57e 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -66,7 +66,6 @@ config X86 select ARCH_HAS_UACCESS_FLUSHCACHE if X86_64 select ARCH_HAS_UACCESS_MCSAFE if X86_64 && X86_MCE select ARCH_HAS_SET_MEMORY - select ARCH_HAS_SG_CHAIN select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_STRICT_MODULE_RWX select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index d29b7365da8d..e3387919eb22 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 config XTENSA def_bool y - select ARCH_HAS_SG_CHAIN select ARCH_HAS_SYNC_DMA_FOR_CPU select ARCH_HAS_SYNC_DMA_FOR_DEVICE select ARCH_NO_COHERENT_DMA_MMAP if !MMU diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index 093aa57120b0..b96f0d0b5b8f 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h @@ -324,10 +324,10 @@ size_t sg_zero_buffer(struct scatterlist *sgl, unsigned int nents, * Like SG_CHUNK_SIZE, but for archs that have sg chaining. This limit * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. */ -#ifdef CONFIG_ARCH_HAS_SG_CHAIN -#define SG_MAX_SEGMENTS 2048 -#else +#ifdef CONFIG_ARCH_NO_SG_CHAIN #define SG_MAX_SEGMENTS SG_CHUNK_SIZE +#else +#define SG_MAX_SEGMENTS 2048 #endif #ifdef CONFIG_SG_POOL diff --git a/lib/Kconfig b/lib/Kconfig index a9965f4af4dd..d5a5e2ebf286 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -577,7 +577,7 @@ config SG_POOL # sg chaining option # -config ARCH_HAS_SG_CHAIN +config ARCH_NO_SG_CHAIN def_bool n config ARCH_HAS_PMEM_API diff --git a/lib/scatterlist.c b/lib/scatterlist.c index 7c6096a71704..9ba349e775ef 100644 --- a/lib/scatterlist.c +++ b/lib/scatterlist.c @@ -271,7 +271,7 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents, if (nents == 0) return -EINVAL; -#ifndef CONFIG_ARCH_HAS_SG_CHAIN +#ifdef CONFIG_ARCH_NO_SG_CHAIN if (WARN_ON_ONCE(nents > max_ents)) return -EINVAL; #endif -- 2.19.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN 2018-11-09 9:00 ` [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN Christoph Hellwig @ 2018-11-16 16:52 ` Palmer Dabbelt 2018-11-19 13:58 ` Christoph Hellwig 2018-12-06 15:01 ` Christoph Hellwig 1 sibling, 1 reply; 10+ messages in thread From: Palmer Dabbelt @ 2018-11-16 16:52 UTC (permalink / raw) To: Christoph Hellwig; +Cc: iommu, linux-arch, linux-kernel On Fri, 09 Nov 2018 01:00:08 PST (-0800), Christoph Hellwig wrote: > These days architectures are mostly out of the business of dealing with > struct scatterlist at all, unless they have architecture specific iommu > drivers. Replace the ARCH_HAS_SG_CHAIN symbol with a ARCH_NO_SG_CHAIN > one only enabled for architectures with horrible legacy iommu drivers > like alpha and parisc, and conditionally for arm which wants to keep it > disable for legacy platforms. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > .../features/io/sg-chain/arch-support.txt | 33 ------------------- > arch/alpha/Kconfig | 1 + > arch/arc/Kconfig | 1 - > arch/arm/Kconfig | 2 +- > arch/arm64/Kconfig | 1 - > arch/ia64/Kconfig | 1 - > arch/parisc/Kconfig | 1 + > arch/powerpc/Kconfig | 1 - > arch/s390/Kconfig | 1 - > arch/sparc/Kconfig | 1 - > arch/x86/Kconfig | 1 - > arch/xtensa/Kconfig | 1 - > include/linux/scatterlist.h | 6 ++-- > lib/Kconfig | 2 +- > lib/scatterlist.c | 2 +- > 15 files changed, 8 insertions(+), 47 deletions(-) > delete mode 100644 Documentation/features/io/sg-chain/arch-support.txt As far as I can tell, it looks like m68k, mips, and powerpc mention an IOMMU in their ports, don't set ARCH_HAS_SG_CHAIN, and with this patch set won't set ARCH_NO_SG_CHAIN. The issue is that I'm not sure how to determine what constitutes a horrible legacy IOMMU, at least with respect to not being able to use scatterlist chaining. I poked through the 68k stuff (sun3 and sun3x) and the only thing I see that's odd is that DVMA_PAGE_SHIFT is 13. That matches PAGE_SHIFT for the subarch, though, so I don't think it's an issue. It looks like the mention in MIPS is trivial, so that should be fine. There's a lot in the PC port so I just glanced at it. I assume it's OK, but I did see an explicit mention of SG in their generic IOMMU. There's a lot of flavors here so I'm not sure how well they all work. I don't really think that's enough for my reviewed-by tag, so feel free to give me some pointers if you're looking for one -- I'd be happy to lean about IOMMUs (particularly broken ones, as that might help prevent us from designing a broken one), I'm just not sure what I'm looking for. I'm going to assume you're going to merge this and I'll drop the RISC-V patch that turns on ARCH_HAS_SG_CHAIN. Thanks! > diff --git a/Documentation/features/io/sg-chain/arch-support.txt b/Documentation/features/io/sg-chain/arch-support.txt > deleted file mode 100644 > index 6554f0372c3f..000000000000 > --- a/Documentation/features/io/sg-chain/arch-support.txt > +++ /dev/null > @@ -1,33 +0,0 @@ > -# > -# Feature name: sg-chain > -# Kconfig: ARCH_HAS_SG_CHAIN > -# description: arch supports chained scatter-gather lists > -# > - ----------------------- > - | arch |status| > - ----------------------- > - | alpha: | TODO | > - | arc: | ok | > - | arm: | ok | > - | arm64: | ok | > - | c6x: | TODO | > - | h8300: | TODO | > - | hexagon: | TODO | > - | ia64: | ok | > - | m68k: | TODO | > - | microblaze: | TODO | > - | mips: | TODO | > - | nds32: | TODO | > - | nios2: | TODO | > - | openrisc: | TODO | > - | parisc: | TODO | > - | powerpc: | ok | > - | riscv: | TODO | > - | s390: | ok | > - | sh: | TODO | > - | sparc: | ok | > - | um: | TODO | > - | unicore32: | TODO | > - | x86: | ok | > - | xtensa: | TODO | > - ----------------------- > diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig > index 5b4f88363453..a7e748a46c18 100644 > --- a/arch/alpha/Kconfig > +++ b/arch/alpha/Kconfig > @@ -5,6 +5,7 @@ config ALPHA > select ARCH_MIGHT_HAVE_PC_PARPORT > select ARCH_MIGHT_HAVE_PC_SERIO > select ARCH_NO_PREEMPT > + select ARCH_NO_SG_CHAIN > select ARCH_USE_CMPXCHG_LOCKREF > select HAVE_AOUT > select HAVE_IDE > diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig > index c9e2a1323536..fd48d698da29 100644 > --- a/arch/arc/Kconfig > +++ b/arch/arc/Kconfig > @@ -13,7 +13,6 @@ config ARC > select ARCH_HAS_PTE_SPECIAL > select ARCH_HAS_SYNC_DMA_FOR_CPU > select ARCH_HAS_SYNC_DMA_FOR_DEVICE > - select ARCH_HAS_SG_CHAIN > select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC > select BUILDTIME_EXTABLE_SORT > select CLONE_BACKWARDS > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 91be74d8df65..199eb62230b0 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -19,6 +19,7 @@ config ARM > select ARCH_HAVE_CUSTOM_GPIO_H > select ARCH_HAS_GCOV_PROFILE_ALL > select ARCH_MIGHT_HAVE_PC_PARPORT > + select ARCH_NO_SG_CHAIN if !ARM_HAS_SG_CHAIN > select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 > select ARCH_SUPPORTS_ATOMIC_RMW > @@ -118,7 +119,6 @@ config ARM > <http://www.arm.linux.org.uk/>. > > config ARM_HAS_SG_CHAIN > - select ARCH_HAS_SG_CHAIN > bool > > config ARM_DMA_USE_IOMMU > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 787d7850e064..4c851b3a7b7c 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -23,7 +23,6 @@ config ARM64 > select ARCH_HAS_MEMBARRIER_SYNC_CORE > select ARCH_HAS_PTE_SPECIAL > select ARCH_HAS_SET_MEMORY > - select ARCH_HAS_SG_CHAIN > select ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_HAS_STRICT_MODULE_RWX > select ARCH_HAS_SYNC_DMA_FOR_DEVICE > diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig > index 36773def6920..d6f203658994 100644 > --- a/arch/ia64/Kconfig > +++ b/arch/ia64/Kconfig > @@ -29,7 +29,6 @@ config IA64 > select HAVE_MEMBLOCK_NODE_MAP > select HAVE_VIRT_CPU_ACCOUNTING > select ARCH_HAS_DMA_MARK_CLEAN > - select ARCH_HAS_SG_CHAIN > select VIRT_TO_BUS > select ARCH_DISCARD_MEMBLOCK > select GENERIC_IRQ_PROBE > diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig > index 92a339ee28b3..428ee50fc3db 100644 > --- a/arch/parisc/Kconfig > +++ b/arch/parisc/Kconfig > @@ -11,6 +11,7 @@ config PARISC > select ARCH_HAS_ELF_RANDOMIZE > select ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_HAS_UBSAN_SANITIZE_ALL > + select ARCH_NO_SG_CHAIN > select ARCH_SUPPORTS_MEMORY_FAILURE > select RTC_CLASS > select RTC_DRV_GENERIC > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index 8be31261aec8..4bc8edd83cee 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -138,7 +138,6 @@ config PPC > select ARCH_HAS_PTE_SPECIAL > select ARCH_HAS_MEMBARRIER_CALLBACKS > select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE && PPC64 > - select ARCH_HAS_SG_CHAIN > select ARCH_HAS_STRICT_KERNEL_RWX if ((PPC_BOOK3S_64 || PPC32) && !RELOCATABLE && !HIBERNATION) > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > select ARCH_HAS_UACCESS_FLUSHCACHE if PPC64 > diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig > index 5173366af8f3..5624e8607054 100644 > --- a/arch/s390/Kconfig > +++ b/arch/s390/Kconfig > @@ -73,7 +73,6 @@ config S390 > select ARCH_HAS_KCOV > select ARCH_HAS_PTE_SPECIAL > select ARCH_HAS_SET_MEMORY > - select ARCH_HAS_SG_CHAIN > select ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_HAS_STRICT_MODULE_RWX > select ARCH_HAS_UBSAN_SANITIZE_ALL > diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig > index 490b2c95c212..8853b6ceae17 100644 > --- a/arch/sparc/Kconfig > +++ b/arch/sparc/Kconfig > @@ -40,7 +40,6 @@ config SPARC > select MODULES_USE_ELF_RELA > select ODD_RT_SIGACTION > select OLD_SIGSUSPEND > - select ARCH_HAS_SG_CHAIN > select CPU_NO_EFFICIENT_FFS > select LOCKDEP_SMALL if LOCKDEP > select NEED_DMA_MAP_STATE > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index ba7e3464ee92..6faab6f9b57e 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -66,7 +66,6 @@ config X86 > select ARCH_HAS_UACCESS_FLUSHCACHE if X86_64 > select ARCH_HAS_UACCESS_MCSAFE if X86_64 && X86_MCE > select ARCH_HAS_SET_MEMORY > - select ARCH_HAS_SG_CHAIN > select ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_HAS_STRICT_MODULE_RWX > select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE > diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig > index d29b7365da8d..e3387919eb22 100644 > --- a/arch/xtensa/Kconfig > +++ b/arch/xtensa/Kconfig > @@ -1,7 +1,6 @@ > # SPDX-License-Identifier: GPL-2.0 > config XTENSA > def_bool y > - select ARCH_HAS_SG_CHAIN > select ARCH_HAS_SYNC_DMA_FOR_CPU > select ARCH_HAS_SYNC_DMA_FOR_DEVICE > select ARCH_NO_COHERENT_DMA_MMAP if !MMU > diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h > index 093aa57120b0..b96f0d0b5b8f 100644 > --- a/include/linux/scatterlist.h > +++ b/include/linux/scatterlist.h > @@ -324,10 +324,10 @@ size_t sg_zero_buffer(struct scatterlist *sgl, unsigned int nents, > * Like SG_CHUNK_SIZE, but for archs that have sg chaining. This limit > * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. > */ > -#ifdef CONFIG_ARCH_HAS_SG_CHAIN > -#define SG_MAX_SEGMENTS 2048 > -#else > +#ifdef CONFIG_ARCH_NO_SG_CHAIN > #define SG_MAX_SEGMENTS SG_CHUNK_SIZE > +#else > +#define SG_MAX_SEGMENTS 2048 > #endif > > #ifdef CONFIG_SG_POOL > diff --git a/lib/Kconfig b/lib/Kconfig > index a9965f4af4dd..d5a5e2ebf286 100644 > --- a/lib/Kconfig > +++ b/lib/Kconfig > @@ -577,7 +577,7 @@ config SG_POOL > # sg chaining option > # > > -config ARCH_HAS_SG_CHAIN > +config ARCH_NO_SG_CHAIN > def_bool n > > config ARCH_HAS_PMEM_API > diff --git a/lib/scatterlist.c b/lib/scatterlist.c > index 7c6096a71704..9ba349e775ef 100644 > --- a/lib/scatterlist.c > +++ b/lib/scatterlist.c > @@ -271,7 +271,7 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents, > > if (nents == 0) > return -EINVAL; > -#ifndef CONFIG_ARCH_HAS_SG_CHAIN > +#ifdef CONFIG_ARCH_NO_SG_CHAIN > if (WARN_ON_ONCE(nents > max_ents)) > return -EINVAL; > #endif ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN 2018-11-16 16:52 ` Palmer Dabbelt @ 2018-11-19 13:58 ` Christoph Hellwig 2018-11-20 0:48 ` Palmer Dabbelt 0 siblings, 1 reply; 10+ messages in thread From: Christoph Hellwig @ 2018-11-19 13:58 UTC (permalink / raw) To: Palmer Dabbelt; +Cc: Christoph Hellwig, iommu, linux-arch, linux-kernel On Fri, Nov 16, 2018 at 08:52:14AM -0800, Palmer Dabbelt wrote: > As far as I can tell, it looks like m68k, mips, and powerpc mention an > IOMMU in their ports, don't set ARCH_HAS_SG_CHAIN, and with this patch set > won't set ARCH_NO_SG_CHAIN. m68k has no iommu, and not operations that operate on a scatterlist. mips has a trivial iommu driver (jazzdma), but I wrote the current instance of it, nad it is fine. powerpc has various iommu, but actually enables ARCH_HAS_SG_CHAIN unconditionally. > The issue is that I'm not sure how to > determine what constitutes a horrible legacy IOMMU, at least with respect > to not being able to use scatterlist chaining. It basically means someone is iterating using manual pointer arithmetics over a multi-element scatterlist instead of using the sg_next and for_each_sg helpers. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN 2018-11-19 13:58 ` Christoph Hellwig @ 2018-11-20 0:48 ` Palmer Dabbelt 0 siblings, 0 replies; 10+ messages in thread From: Palmer Dabbelt @ 2018-11-20 0:48 UTC (permalink / raw) To: Christoph Hellwig; +Cc: Christoph Hellwig, iommu, linux-arch, linux-kernel On Mon, 19 Nov 2018 05:58:52 PST (-0800), Christoph Hellwig wrote: > On Fri, Nov 16, 2018 at 08:52:14AM -0800, Palmer Dabbelt wrote: >> As far as I can tell, it looks like m68k, mips, and powerpc mention an >> IOMMU in their ports, don't set ARCH_HAS_SG_CHAIN, and with this patch set >> won't set ARCH_NO_SG_CHAIN. > > m68k has no iommu, and not operations that operate on a scatterlist. > > mips has a trivial iommu driver (jazzdma), but I wrote the current > instance of it, nad it is fine. > > powerpc has various iommu, but actually enables ARCH_HAS_SG_CHAIN > unconditionally. > >> The issue is that I'm not sure how to >> determine what constitutes a horrible legacy IOMMU, at least with respect >> to not being able to use scatterlist chaining. > > It basically means someone is iterating using manual pointer arithmetics > over a multi-element scatterlist instead of using the sg_next and > for_each_sg helpers. Ah, OK. In that case, feel free to drop a Reviewed-by: Palmer Dabbelt <palmer@sifive.com> in there, if you think it helps any. Thanks for the help! ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN 2018-11-09 9:00 ` [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN Christoph Hellwig 2018-11-16 16:52 ` Palmer Dabbelt @ 2018-12-06 15:01 ` Christoph Hellwig 1 sibling, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-12-06 15:01 UTC (permalink / raw) To: iommu; +Cc: linux-arch, linux-kernel I've picked this up for the dma-mapping for-next tree. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: scatterlist arch cleanups 2018-11-09 9:00 scatterlist arch cleanups Christoph Hellwig 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig 2018-11-09 9:00 ` [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN Christoph Hellwig @ 2018-11-29 17:06 ` Christoph Hellwig 2 siblings, 0 replies; 10+ messages in thread From: Christoph Hellwig @ 2018-11-29 17:06 UTC (permalink / raw) To: Christoph Hellwig; +Cc: iommu, linux-arch, linux-kernel ping, any comments? On Fri, Nov 09, 2018 at 10:00:06AM +0100, Christoph Hellwig wrote: > Remove leftovers, and switch the default on enabling SG chaining. > _______________________________________________ > iommu mailing list > iommu@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/iommu ---end quoted text--- ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-12-06 15:01 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-09 9:00 scatterlist arch cleanups Christoph Hellwig 2018-11-09 9:00 ` [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers Christoph Hellwig 2018-11-16 1:47 ` Palmer Dabbelt 2018-12-06 15:00 ` Christoph Hellwig 2018-11-09 9:00 ` [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN Christoph Hellwig 2018-11-16 16:52 ` Palmer Dabbelt 2018-11-19 13:58 ` Christoph Hellwig 2018-11-20 0:48 ` Palmer Dabbelt 2018-12-06 15:01 ` Christoph Hellwig 2018-11-29 17:06 ` scatterlist arch cleanups Christoph Hellwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).