Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp699773imu; Fri, 16 Nov 2018 08:53:10 -0800 (PST) X-Google-Smtp-Source: AJdET5dnSW0DaZ9Hs9fni9KJ8irLNyinu9TexYTG1obIMBPOzAC9BUNijIw2iaCLoa8BbbzD+myv X-Received: by 2002:a17:902:6a4:: with SMTP id 33-v6mr11841657plh.268.1542387190568; Fri, 16 Nov 2018 08:53:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542387190; cv=none; d=google.com; s=arc-20160816; b=qiq2bJX0k8o00590a6C8uWxTMZxZLPtttW4qCMbm9WMC+pvr193b09WtxwNk4zYASg 4ekRIs1JNRngyxlw98oAyAvPeR3tEA2gKUfEjjJvzZVhEttzpW3zBPSuuHbu9rKvIqR0 9jioxzDNEXCxXtLUtf0xDxVmbYsWqIknDaHddlyYK6v0Cbv8iW/CNRuzPTNpo6839vQi rY4//6VVZfliN9kLz+XmEBBzLRW1a0fjOXHXXMdSBiF5z1TwwNRyVz8oUrxa/8jC++YY y+ca8C0tIZxBKnWqNnU1r3N/ScCD966X6ED/PKbw8IQNP044/fshyrON+FJpXMJY4lFP DLeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:to:from:cc:in-reply-to:subject:date:dkim-signature; bh=43V/UmEAQKp4Tbq2gp9MdT4gnH2Hf5/imzDJ84gH0wM=; b=pE48SpRtAJn5xzuZxkYhycjjAUnGw9iBuTrp5yoenJ08entTKHPmBkNHJ3U2jZuBuC KuhhwVRsq+z9AjVEYLpSucJH2/XUYSgovdW6M3oz9gtBSyOaWBQ+drT5r7cOMdr/VzjQ dsSJV/fNNcFKo+FbbY9AsfpKLCPt8pis7ptraYFVYVhokcxrGXyp2yqw+ikMvO00NQuq YnjRIMJ1j+9CYztJOZm12It4nHDUfm+4+D7d++TxU9SPZlYn/9zMIY9cmopoaIKfvC7v 7SPJW7GsXeC5N44Ztx7Y6F7LAVJ64qPh1JZb8+0bDBHDzKPzFFE9bRxIqunCGZp4YCnS SWrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=fkmkF+eq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w31-v6si32426724pla.347.2018.11.16.08.52.55; Fri, 16 Nov 2018 08:53:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=fkmkF+eq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729290AbeKQDFZ (ORCPT + 99 others); Fri, 16 Nov 2018 22:05:25 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:42032 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728684AbeKQDFZ (ORCPT ); Fri, 16 Nov 2018 22:05:25 -0500 Received: by mail-pl1-f195.google.com with SMTP id x21-v6so8694210pln.9 for ; Fri, 16 Nov 2018 08:52:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=date:subject:in-reply-to:cc:from:to:message-id:mime-version :content-transfer-encoding; bh=43V/UmEAQKp4Tbq2gp9MdT4gnH2Hf5/imzDJ84gH0wM=; b=fkmkF+equsQbuuA6aHeNiWXWnauIgSKmVRcQtnjaldalHDGHZ9Esp6Me92aIcQcxvp 7NKvK3wQtQE3LkIMwT+lKE3OLdhPejj4Brh4+1DvMwSOYED5uoxzRZLRguj1AhuMqmfA dGPK4LRIFSCVPJ8zCHM0sNmx+KIuUJ+6g1LxkGZSdM/gmLRIxvB48RTCEzIQ0OuuK8Ou NTPq8VOwqMzfxNg8MVu51I8ALhIlPq4dkm6rI0qfXNR3DDM/ywukmin+LGYu5zNgwyWW 4b6I+fezshPJ1vxcJbF40Qfus1nLGPN4EUwDmisApqzAI1o2c/pKk/tDHkG3ENEWgjhq n1uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:subject:in-reply-to:cc:from:to:message-id :mime-version:content-transfer-encoding; bh=43V/UmEAQKp4Tbq2gp9MdT4gnH2Hf5/imzDJ84gH0wM=; b=MCIfHYTOT4LhTqAmkQwjl49yTbq0LZnquPW6lDIFs4wROmdtJ4YUB+QTyaqbYf1Upx omljIND78L5czDieTTAmxEU0MJqEdS8jazMI3jsOqZpX/6YHZfC604x5ehDZwVMWUzXG EOodltOaJRH22qEVJ/u/5503EBqUk0ovP7+CjhignZYlFogYxSXjL97w6cQAcqlCk5Qh S+HKUz5vbCIva6/hVn7UxBsqo1TUlKxG0Goc1cQKsWHrjPD7xx4Z6ya58OsYxqi/1AB2 3sddrwnzB10EvO5Rj1BWoiCY41jLyPhmrg3d9bLmDmc+qw2z3CMTSIRn6ghJjjbHRd8U It+g== X-Gm-Message-State: AGRZ1gIEdePvQ141BCfEOex4gjkt56NFkGNwYCBz9OU2RdDlTmuWwof8 tsI/ikdSE+FJT0b7QcAd0oVMCw== X-Received: by 2002:a17:902:1122:: with SMTP id d31-v6mr11735125pla.259.1542387135536; Fri, 16 Nov 2018 08:52:15 -0800 (PST) Received: from localhost ([12.206.222.5]) by smtp.gmail.com with ESMTPSA id h8sm13886075pgv.27.2018.11.16.08.52.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Nov 2018 08:52:14 -0800 (PST) Date: Fri, 16 Nov 2018 08:52:14 -0800 (PST) X-Google-Original-Date: Fri, 16 Nov 2018 06:59:36 PST (-0800) Subject: Re: [PATCH 2/2] arch: switch the default on ARCH_HAS_SG_CHAIN In-Reply-To: <20181109090008.24150-3-hch@lst.de> CC: iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org From: Palmer Dabbelt To: Christoph Hellwig Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > .../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 > . > > 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