All of lore.kernel.org
 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; 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.