提交 308c09f1 编写于 作者: L Laura Abbott 提交者: Linus Torvalds

lib/scatterlist: make ARCH_HAS_SG_CHAIN an actual Kconfig

Rather than have architectures #define ARCH_HAS_SG_CHAIN in an
architecture specific scatterlist.h, make it a proper Kconfig option and
use that instead.  At same time, remove the header files are are now
mostly useless and just include asm-generic/scatterlist.h.

[sfr@canb.auug.org.au: powerpc files now need asm/dma.h]
Signed-off-by: NLaura Abbott <lauraa@codeaurora.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>			[x86]
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>	[powerpc]
Acked-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 2f137d66
...@@ -83,6 +83,7 @@ config ARM ...@@ -83,6 +83,7 @@ config ARM
<http://www.arm.linux.org.uk/>. <http://www.arm.linux.org.uk/>.
config ARM_HAS_SG_CHAIN config ARM_HAS_SG_CHAIN
select ARCH_HAS_SG_CHAIN
bool bool
config NEED_SG_DMA_LENGTH config NEED_SG_DMA_LENGTH
......
...@@ -22,6 +22,7 @@ generic-y += poll.h ...@@ -22,6 +22,7 @@ generic-y += poll.h
generic-y += preempt.h generic-y += preempt.h
generic-y += resource.h generic-y += resource.h
generic-y += rwsem.h generic-y += rwsem.h
generic-y += scatterlist.h
generic-y += sections.h generic-y += sections.h
generic-y += segment.h generic-y += segment.h
generic-y += sembuf.h generic-y += sembuf.h
......
#ifndef _ASMARM_SCATTERLIST_H
#define _ASMARM_SCATTERLIST_H
#ifdef CONFIG_ARM_HAS_SG_CHAIN
#define ARCH_HAS_SG_CHAIN
#endif
#include <asm/memory.h>
#include <asm/types.h>
#include <asm-generic/scatterlist.h>
#endif /* _ASMARM_SCATTERLIST_H */
config ARM64 config ARM64
def_bool y def_bool y
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
select ARCH_HAS_SG_CHAIN
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
select ARCH_USE_CMPXCHG_LOCKREF select ARCH_USE_CMPXCHG_LOCKREF
select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_ATOMIC_RMW
......
...@@ -28,6 +28,7 @@ config IA64 ...@@ -28,6 +28,7 @@ config IA64
select HAVE_MEMBLOCK select HAVE_MEMBLOCK
select HAVE_MEMBLOCK_NODE_MAP select HAVE_MEMBLOCK_NODE_MAP
select HAVE_VIRT_CPU_ACCOUNTING select HAVE_VIRT_CPU_ACCOUNTING
select ARCH_HAS_SG_CHAIN
select VIRT_TO_BUS select VIRT_TO_BUS
select ARCH_DISCARD_MEMBLOCK select ARCH_DISCARD_MEMBLOCK
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
......
...@@ -5,5 +5,6 @@ generic-y += hash.h ...@@ -5,5 +5,6 @@ generic-y += hash.h
generic-y += kvm_para.h generic-y += kvm_para.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h
generic-y += trace_clock.h generic-y += trace_clock.h
generic-y += vtime.h generic-y += vtime.h
#ifndef _ASM_IA64_SCATTERLIST_H
#define _ASM_IA64_SCATTERLIST_H
#include <asm-generic/scatterlist.h>
#define ARCH_HAS_SG_CHAIN
#endif /* _ASM_IA64_SCATTERLIST_H */
...@@ -111,6 +111,7 @@ config PPC ...@@ -111,6 +111,7 @@ config PPC
select HAVE_DMA_API_DEBUG select HAVE_DMA_API_DEBUG
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_DEBUG_KMEMLEAK select HAVE_DEBUG_KMEMLEAK
select ARCH_HAS_SG_CHAIN
select GENERIC_ATOMIC64 if PPC32 select GENERIC_ATOMIC64 if PPC32
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
......
...@@ -4,5 +4,6 @@ generic-y += hash.h ...@@ -4,5 +4,6 @@ generic-y += hash.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += rwsem.h generic-y += rwsem.h
generic-y += scatterlist.h
generic-y += trace_clock.h generic-y += trace_clock.h
generic-y += vtime.h generic-y += vtime.h
#ifndef _ASM_POWERPC_SCATTERLIST_H
#define _ASM_POWERPC_SCATTERLIST_H
/*
* Copyright (C) 2001 PPC64 Team, IBM Corp
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <asm/dma.h>
#include <asm-generic/scatterlist.h>
#define ARCH_HAS_SG_CHAIN
#endif /* _ASM_POWERPC_SCATTERLIST_H */
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/dma.h>
#include "mmu_decl.h" #include "mmu_decl.h"
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <asm/time.h> #include <asm/time.h>
#include <asm/uic.h> #include <asm/uic.h>
#include <asm/ppc4xx.h> #include <asm/ppc4xx.h>
#include <asm/dma.h>
static __initdata struct of_device_id warp_of_bus[] = { static __initdata struct of_device_id warp_of_bus[] = {
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/of.h> #include <linux/of.h>
#include <asm/dma.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/machdep.h> #include <asm/machdep.h>
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <asm/i8259.h> #include <asm/i8259.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/dma.h>
extern void __flush_disable_L1(void); extern void __flush_disable_L1(void);
......
...@@ -145,6 +145,7 @@ config S390 ...@@ -145,6 +145,7 @@ config S390
select TTY select TTY
select VIRT_CPU_ACCOUNTING select VIRT_CPU_ACCOUNTING
select VIRT_TO_BUS select VIRT_TO_BUS
select ARCH_HAS_SG_CHAIN
config SCHED_OMIT_FRAME_POINTER config SCHED_OMIT_FRAME_POINTER
def_bool y def_bool y
......
...@@ -4,4 +4,5 @@ generic-y += clkdev.h ...@@ -4,4 +4,5 @@ generic-y += clkdev.h
generic-y += hash.h generic-y += hash.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h
generic-y += trace_clock.h generic-y += trace_clock.h
#include <asm-generic/scatterlist.h>
#define ARCH_HAS_SG_CHAIN
...@@ -42,6 +42,7 @@ config SPARC ...@@ -42,6 +42,7 @@ config SPARC
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select ODD_RT_SIGACTION select ODD_RT_SIGACTION
select OLD_SIGSUSPEND select OLD_SIGSUSPEND
select ARCH_HAS_SG_CHAIN
config SPARC32 config SPARC32
def_bool !64BIT def_bool !64BIT
......
...@@ -15,6 +15,7 @@ generic-y += mcs_spinlock.h ...@@ -15,6 +15,7 @@ generic-y += mcs_spinlock.h
generic-y += module.h generic-y += module.h
generic-y += mutex.h generic-y += mutex.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h
generic-y += serial.h generic-y += serial.h
generic-y += trace_clock.h generic-y += trace_clock.h
generic-y += types.h generic-y += types.h
......
#ifndef _SPARC_SCATTERLIST_H
#define _SPARC_SCATTERLIST_H
#include <asm-generic/scatterlist.h>
#define ARCH_HAS_SG_CHAIN
#endif /* !(_SPARC_SCATTERLIST_H) */
...@@ -21,6 +21,7 @@ generic-y += param.h ...@@ -21,6 +21,7 @@ generic-y += param.h
generic-y += pci.h generic-y += pci.h
generic-y += percpu.h generic-y += percpu.h
generic-y += preempt.h generic-y += preempt.h
generic-y += scatterlist.h
generic-y += sections.h generic-y += sections.h
generic-y += switch_to.h generic-y += switch_to.h
generic-y += topology.h generic-y += topology.h
......
...@@ -96,6 +96,7 @@ config X86 ...@@ -96,6 +96,7 @@ config X86
select IRQ_FORCED_THREADING select IRQ_FORCED_THREADING
select HAVE_BPF_JIT if X86_64 select HAVE_BPF_JIT if X86_64
select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_ARCH_TRANSPARENT_HUGEPAGE
select ARCH_HAS_SG_CHAIN
select CLKEVT_I8253 select CLKEVT_I8253
select ARCH_HAVE_NMI_SAFE_CMPXCHG select ARCH_HAVE_NMI_SAFE_CMPXCHG
select GENERIC_IOMAP select GENERIC_IOMAP
......
...@@ -5,6 +5,7 @@ genhdr-y += unistd_64.h ...@@ -5,6 +5,7 @@ genhdr-y += unistd_64.h
genhdr-y += unistd_x32.h genhdr-y += unistd_x32.h
generic-y += clkdev.h generic-y += clkdev.h
generic-y += early_ioremap.h
generic-y += cputime.h generic-y += cputime.h
generic-y += early_ioremap.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += scatterlist.h
#ifndef _ASM_X86_SCATTERLIST_H
#define _ASM_X86_SCATTERLIST_H
#include <asm-generic/scatterlist.h>
#define ARCH_HAS_SG_CHAIN
#endif /* _ASM_X86_SCATTERLIST_H */
...@@ -136,7 +136,7 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf, ...@@ -136,7 +136,7 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
struct scatterlist *sgl) struct scatterlist *sgl)
{ {
#ifndef ARCH_HAS_SG_CHAIN #ifndef CONFIG_ARCH_HAS_SG_CHAIN
BUG(); BUG();
#endif #endif
......
...@@ -31,7 +31,7 @@ enum scsi_timeouts { ...@@ -31,7 +31,7 @@ enum scsi_timeouts {
* Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
* is totally arbitrary, a setting of 2048 will get you at least 8mb ios. * is totally arbitrary, a setting of 2048 will get you at least 8mb ios.
*/ */
#ifdef ARCH_HAS_SG_CHAIN #ifdef CONFIG_ARCH_HAS_SG_CHAIN
#define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 #define SCSI_MAX_SG_CHAIN_SEGMENTS 2048
#else #else
#define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS #define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS
......
...@@ -508,4 +508,11 @@ config UCS2_STRING ...@@ -508,4 +508,11 @@ config UCS2_STRING
source "lib/fonts/Kconfig" source "lib/fonts/Kconfig"
#
# sg chaining option
#
config ARCH_HAS_SG_CHAIN
def_bool n
endmenu endmenu
...@@ -73,7 +73,7 @@ EXPORT_SYMBOL(sg_nents); ...@@ -73,7 +73,7 @@ EXPORT_SYMBOL(sg_nents);
**/ **/
struct scatterlist *sg_last(struct scatterlist *sgl, unsigned int nents) struct scatterlist *sg_last(struct scatterlist *sgl, unsigned int nents)
{ {
#ifndef ARCH_HAS_SG_CHAIN #ifndef CONFIG_ARCH_HAS_SG_CHAIN
struct scatterlist *ret = &sgl[nents - 1]; struct scatterlist *ret = &sgl[nents - 1];
#else #else
struct scatterlist *sg, *ret = NULL; struct scatterlist *sg, *ret = NULL;
...@@ -255,7 +255,7 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents, ...@@ -255,7 +255,7 @@ int __sg_alloc_table(struct sg_table *table, unsigned int nents,
if (nents == 0) if (nents == 0)
return -EINVAL; return -EINVAL;
#ifndef ARCH_HAS_SG_CHAIN #ifndef CONFIG_ARCH_HAS_SG_CHAIN
if (WARN_ON_ONCE(nents > max_ents)) if (WARN_ON_ONCE(nents > max_ents))
return -EINVAL; return -EINVAL;
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册