* 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
* Re: [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers
@ 2018-11-16 1:47 ` Palmer Dabbelt
0 siblings, 0 replies; 13+ 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] 13+ messages in thread
* Re: [PATCH 1/2] csky, h8300, riscv: remove <asm/scatterlist.h> leftovers
@ 2018-11-16 1:47 ` Palmer Dabbelt
0 siblings, 0 replies; 13+ messages in thread
From: Palmer Dabbelt @ 2018-11-16 1:47 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-arch-u79uwXL29TY76Z2rM5mHXA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
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-jcswGhMUV9g@public.gmane.org>
> ---
> 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-SpMDHPYPyPbQT0dZR+AlfA@public.gmane.org>
^ permalink raw reply [flat|nested] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN
@ 2018-11-20 0:48 ` Palmer Dabbelt
0 siblings, 0 replies; 13+ 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] 13+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN
@ 2018-11-20 0:48 ` Palmer Dabbelt
0 siblings, 0 replies; 13+ messages in thread
From: Palmer Dabbelt @ 2018-11-20 0:48 UTC (permalink / raw)
Cc: linux-arch-u79uwXL29TY76Z2rM5mHXA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Christoph Hellwig, linux-kernel-u79uwXL29TY76Z2rM5mHXA
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-SpMDHPYPyPbQT0dZR+AlfA@public.gmane.org>
in there, if you think it helps any.
Thanks for the help!
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN
@ 2018-11-20 0:48 ` Palmer Dabbelt
0 siblings, 0 replies; 13+ messages in thread
From: Palmer Dabbelt @ 2018-11-20 0:48 UTC (permalink / raw)
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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
end of thread, other threads:[~2018-12-06 15:01 UTC | newest]
Thread overview: 13+ 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-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-11-20 0:48 ` Palmer Dabbelt
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.