linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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

* [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 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 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: 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

* 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

* 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

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).