mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	 df013ffb81
			
		
	
	
		df013ffb81
		
	
	
	
	
		
			
			cmpxchg() is widely used by lockless code, including NMI-safe lockless code. But on some architectures, the cmpxchg() implementation is not NMI-safe, on these architectures the lockless code may need a spin_trylock_irqsave() based implementation. This patch adds a Kconfig option: ARCH_HAVE_NMI_SAFE_CMPXCHG, so that NMI-safe lockless code can depend on it or provide different implementation according to it. On many architectures, cmpxchg is only NMI-safe for several specific operand sizes. So, ARCH_HAVE_NMI_SAFE_CMPXCHG define in this patch only guarantees cmpxchg is NMI-safe for sizeof(unsigned long). Signed-off-by: Huang Ying <ying.huang@intel.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Chris Metcalf <cmetcalf@tilera.com> Acked-by: Richard Henderson <rth@twiddle.net> CC: Mikael Starvik <starvik@axis.com> Acked-by: David Howells <dhowells@redhat.com> CC: Yoshinori Sato <ysato@users.sourceforge.jp> CC: Tony Luck <tony.luck@intel.com> CC: Hirokazu Takata <takata@linux-m32r.org> CC: Geert Uytterhoeven <geert@linux-m68k.org> CC: Michal Simek <monstr@monstr.eu> Acked-by: Ralf Baechle <ralf@linux-mips.org> CC: Kyle McMartin <kyle@mcmartin.ca> CC: Martin Schwidefsky <schwidefsky@de.ibm.com> CC: Chen Liqin <liqin.chen@sunplusct.com> CC: "David S. Miller" <davem@davemloft.net> CC: Ingo Molnar <mingo@redhat.com> CC: Chris Zankel <chris@zankel.net> Signed-off-by: Len Brown <len.brown@intel.com>
		
			
				
	
	
		
			184 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # General architecture dependent options
 | |
| #
 | |
| 
 | |
| config OPROFILE
 | |
| 	tristate "OProfile system profiling"
 | |
| 	depends on PROFILING
 | |
| 	depends on HAVE_OPROFILE
 | |
| 	select RING_BUFFER
 | |
| 	select RING_BUFFER_ALLOW_SWAP
 | |
| 	help
 | |
| 	  OProfile is a profiling system capable of profiling the
 | |
| 	  whole system, include the kernel, kernel modules, libraries,
 | |
| 	  and applications.
 | |
| 
 | |
| 	  If unsure, say N.
 | |
| 
 | |
| config OPROFILE_EVENT_MULTIPLEX
 | |
| 	bool "OProfile multiplexing support (EXPERIMENTAL)"
 | |
| 	default n
 | |
| 	depends on OPROFILE && X86
 | |
| 	help
 | |
| 	  The number of hardware counters is limited. The multiplexing
 | |
| 	  feature enables OProfile to gather more events than counters
 | |
| 	  are provided by the hardware. This is realized by switching
 | |
| 	  between events at an user specified time interval.
 | |
| 
 | |
| 	  If unsure, say N.
 | |
| 
 | |
| config HAVE_OPROFILE
 | |
| 	bool
 | |
| 
 | |
| config KPROBES
 | |
| 	bool "Kprobes"
 | |
| 	depends on MODULES
 | |
| 	depends on HAVE_KPROBES
 | |
| 	select KALLSYMS
 | |
| 	help
 | |
| 	  Kprobes allows you to trap at almost any kernel address and
 | |
| 	  execute a callback function.  register_kprobe() establishes
 | |
| 	  a probepoint and specifies the callback.  Kprobes is useful
 | |
| 	  for kernel debugging, non-intrusive instrumentation and testing.
 | |
| 	  If in doubt, say "N".
 | |
| 
 | |
| config JUMP_LABEL
 | |
|        bool "Optimize trace point call sites"
 | |
|        depends on HAVE_ARCH_JUMP_LABEL
 | |
|        help
 | |
|          If it is detected that the compiler has support for "asm goto",
 | |
| 	 the kernel will compile trace point locations with just a
 | |
| 	 nop instruction. When trace points are enabled, the nop will
 | |
| 	 be converted to a jump to the trace function. This technique
 | |
| 	 lowers overhead and stress on the branch prediction of the
 | |
| 	 processor.
 | |
| 
 | |
| 	 On i386, options added to the compiler flags may increase
 | |
| 	 the size of the kernel slightly.
 | |
| 
 | |
| config OPTPROBES
 | |
| 	def_bool y
 | |
| 	depends on KPROBES && HAVE_OPTPROBES
 | |
| 	depends on !PREEMPT
 | |
| 
 | |
| config HAVE_EFFICIENT_UNALIGNED_ACCESS
 | |
| 	bool
 | |
| 	help
 | |
| 	  Some architectures are unable to perform unaligned accesses
 | |
| 	  without the use of get_unaligned/put_unaligned. Others are
 | |
| 	  unable to perform such accesses efficiently (e.g. trap on
 | |
| 	  unaligned access and require fixing it up in the exception
 | |
| 	  handler.)
 | |
| 
 | |
| 	  This symbol should be selected by an architecture if it can
 | |
| 	  perform unaligned accesses efficiently to allow different
 | |
| 	  code paths to be selected for these cases. Some network
 | |
| 	  drivers, for example, could opt to not fix up alignment
 | |
| 	  problems with received packets if doing so would not help
 | |
| 	  much.
 | |
| 
 | |
| 	  See Documentation/unaligned-memory-access.txt for more
 | |
| 	  information on the topic of unaligned memory accesses.
 | |
| 
 | |
| config HAVE_SYSCALL_WRAPPERS
 | |
| 	bool
 | |
| 
 | |
| config KRETPROBES
 | |
| 	def_bool y
 | |
| 	depends on KPROBES && HAVE_KRETPROBES
 | |
| 
 | |
| config USER_RETURN_NOTIFIER
 | |
| 	bool
 | |
| 	depends on HAVE_USER_RETURN_NOTIFIER
 | |
| 	help
 | |
| 	  Provide a kernel-internal notification when a cpu is about to
 | |
| 	  switch to user mode.
 | |
| 
 | |
| config HAVE_IOREMAP_PROT
 | |
| 	bool
 | |
| 
 | |
| config HAVE_KPROBES
 | |
| 	bool
 | |
| 
 | |
| config HAVE_KRETPROBES
 | |
| 	bool
 | |
| 
 | |
| config HAVE_OPTPROBES
 | |
| 	bool
 | |
| #
 | |
| # An arch should select this if it provides all these things:
 | |
| #
 | |
| #	task_pt_regs()		in asm/processor.h or asm/ptrace.h
 | |
| #	arch_has_single_step()	if there is hardware single-step support
 | |
| #	arch_has_block_step()	if there is hardware block-step support
 | |
| #	asm/syscall.h		supplying asm-generic/syscall.h interface
 | |
| #	linux/regset.h		user_regset interfaces
 | |
| #	CORE_DUMP_USE_REGSET	#define'd in linux/elf.h
 | |
| #	TIF_SYSCALL_TRACE	calls tracehook_report_syscall_{entry,exit}
 | |
| #	TIF_NOTIFY_RESUME	calls tracehook_notify_resume()
 | |
| #	signal delivery		calls tracehook_signal_handler()
 | |
| #
 | |
| config HAVE_ARCH_TRACEHOOK
 | |
| 	bool
 | |
| 
 | |
| config HAVE_DMA_ATTRS
 | |
| 	bool
 | |
| 
 | |
| config USE_GENERIC_SMP_HELPERS
 | |
| 	bool
 | |
| 
 | |
| config HAVE_REGS_AND_STACK_ACCESS_API
 | |
| 	bool
 | |
| 	help
 | |
| 	  This symbol should be selected by an architecure if it supports
 | |
| 	  the API needed to access registers and stack entries from pt_regs,
 | |
| 	  declared in asm/ptrace.h
 | |
| 	  For example the kprobes-based event tracer needs this API.
 | |
| 
 | |
| config HAVE_CLK
 | |
| 	bool
 | |
| 	help
 | |
| 	  The <linux/clk.h> calls support software clock gating and
 | |
| 	  thus are a key power management tool on many systems.
 | |
| 
 | |
| config HAVE_DMA_API_DEBUG
 | |
| 	bool
 | |
| 
 | |
| config HAVE_HW_BREAKPOINT
 | |
| 	bool
 | |
| 	depends on PERF_EVENTS
 | |
| 
 | |
| config HAVE_MIXED_BREAKPOINTS_REGS
 | |
| 	bool
 | |
| 	depends on HAVE_HW_BREAKPOINT
 | |
| 	help
 | |
| 	  Depending on the arch implementation of hardware breakpoints,
 | |
| 	  some of them have separate registers for data and instruction
 | |
| 	  breakpoints addresses, others have mixed registers to store
 | |
| 	  them but define the access type in a control register.
 | |
| 	  Select this option if your arch implements breakpoints under the
 | |
| 	  latter fashion.
 | |
| 
 | |
| config HAVE_USER_RETURN_NOTIFIER
 | |
| 	bool
 | |
| 
 | |
| config HAVE_PERF_EVENTS_NMI
 | |
| 	bool
 | |
| 	help
 | |
| 	  System hardware can generate an NMI using the perf event
 | |
| 	  subsystem.  Also has support for calculating CPU cycle events
 | |
| 	  to determine how many clock cycles in a given period.
 | |
| 
 | |
| config HAVE_ARCH_JUMP_LABEL
 | |
| 	bool
 | |
| 
 | |
| config HAVE_ARCH_MUTEX_CPU_RELAX
 | |
| 	bool
 | |
| 
 | |
| config HAVE_RCU_TABLE_FREE
 | |
| 	bool
 | |
| 
 | |
| config ARCH_HAVE_NMI_SAFE_CMPXCHG
 | |
| 	bool
 | |
| 
 | |
| source "kernel/gcov/Kconfig"
 |