Browse Source

rcu: Make SRCU optional by using CONFIG_SRCU

SRCU is not necessary to be compiled by default in all cases. For tinification
efforts not compiling SRCU unless necessary is desirable.

The current patch tries to make compiling SRCU optional by introducing a new
Kconfig option CONFIG_SRCU which is selected when any of the components making
use of SRCU are selected.

If we do not select CONFIG_SRCU, srcu.o will not be compiled at all.

   text    data     bss     dec     hex filename
   2007       0       0    2007     7d7 kernel/rcu/srcu.o

Size of arch/powerpc/boot/zImage changes from

   text    data     bss     dec     hex filename
 831552   64180   23944  919676   e087c arch/powerpc/boot/zImage : before
 829504   64180   23952  917636   e0084 arch/powerpc/boot/zImage : after

so the savings are about ~2000 bytes.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
CC: Josh Triplett <josh@joshtriplett.org>
CC: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
[ paulmck: resolve conflict due to removal of arch/ia64/kvm/Kconfig. ]
Pranith Kumar 10 years ago
parent
commit
83fe27ea53

+ 1 - 0
arch/arm/kvm/Kconfig

@@ -23,6 +23,7 @@ config KVM
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select KVM_MMIO
 	select KVM_MMIO
 	select KVM_ARM_HOST
 	select KVM_ARM_HOST
+	select SRCU
 	depends on ARM_VIRT_EXT && ARM_LPAE
 	depends on ARM_VIRT_EXT && ARM_LPAE
 	---help---
 	---help---
 	  Support hosting virtualized guest machines. You will also
 	  Support hosting virtualized guest machines. You will also

+ 1 - 0
arch/arm64/kvm/Kconfig

@@ -26,6 +26,7 @@ config KVM
 	select KVM_ARM_HOST
 	select KVM_ARM_HOST
 	select KVM_ARM_VGIC
 	select KVM_ARM_VGIC
 	select KVM_ARM_TIMER
 	select KVM_ARM_TIMER
+	select SRCU
 	---help---
 	---help---
 	  Support hosting virtualized guest machines.
 	  Support hosting virtualized guest machines.
 
 

+ 1 - 0
arch/mips/kvm/Kconfig

@@ -20,6 +20,7 @@ config KVM
 	select PREEMPT_NOTIFIERS
 	select PREEMPT_NOTIFIERS
 	select ANON_INODES
 	select ANON_INODES
 	select KVM_MMIO
 	select KVM_MMIO
+	select SRCU
 	---help---
 	---help---
 	  Support for hosting Guest kernels.
 	  Support for hosting Guest kernels.
 	  Currently supported on MIPS32 processors.
 	  Currently supported on MIPS32 processors.

+ 1 - 0
arch/powerpc/kvm/Kconfig

@@ -21,6 +21,7 @@ config KVM
 	select PREEMPT_NOTIFIERS
 	select PREEMPT_NOTIFIERS
 	select ANON_INODES
 	select ANON_INODES
 	select HAVE_KVM_EVENTFD
 	select HAVE_KVM_EVENTFD
+	select SRCU
 
 
 config KVM_BOOK3S_HANDLER
 config KVM_BOOK3S_HANDLER
 	bool
 	bool

+ 1 - 0
arch/s390/kvm/Kconfig

@@ -28,6 +28,7 @@ config KVM
 	select HAVE_KVM_IRQCHIP
 	select HAVE_KVM_IRQCHIP
 	select HAVE_KVM_IRQFD
 	select HAVE_KVM_IRQFD
 	select HAVE_KVM_IRQ_ROUTING
 	select HAVE_KVM_IRQ_ROUTING
+	select SRCU
 	---help---
 	---help---
 	  Support hosting paravirtualized guest machines using the SIE
 	  Support hosting paravirtualized guest machines using the SIE
 	  virtualization capability on the mainframe. This should work
 	  virtualization capability on the mainframe. This should work

+ 1 - 0
arch/tile/kvm/Kconfig

@@ -21,6 +21,7 @@ config KVM
 	depends on HAVE_KVM && MODULES
 	depends on HAVE_KVM && MODULES
 	select PREEMPT_NOTIFIERS
 	select PREEMPT_NOTIFIERS
 	select ANON_INODES
 	select ANON_INODES
+	select SRCU
 	---help---
 	---help---
 	  Support hosting paravirtualized guest machines.
 	  Support hosting paravirtualized guest machines.
 
 

+ 1 - 0
arch/x86/Kconfig

@@ -138,6 +138,7 @@ config X86
 	select HAVE_ACPI_APEI_NMI if ACPI
 	select HAVE_ACPI_APEI_NMI if ACPI
 	select ACPI_LEGACY_TABLES_LOOKUP if ACPI
 	select ACPI_LEGACY_TABLES_LOOKUP if ACPI
 	select X86_FEATURE_NAMES if PROC_FS
 	select X86_FEATURE_NAMES if PROC_FS
+	select SRCU
 
 
 config INSTRUCTION_DECODER
 config INSTRUCTION_DECODER
 	def_bool y
 	def_bool y

+ 1 - 0
arch/x86/kvm/Kconfig

@@ -40,6 +40,7 @@ config KVM
 	select HAVE_KVM_MSI
 	select HAVE_KVM_MSI
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select KVM_VFIO
 	select KVM_VFIO
+	select SRCU
 	---help---
 	---help---
 	  Support hosting fully virtualized guest machines using hardware
 	  Support hosting fully virtualized guest machines using hardware
 	  virtualization extensions.  You will need a fairly recent
 	  virtualization extensions.  You will need a fairly recent

+ 1 - 0
drivers/clk/Kconfig

@@ -13,6 +13,7 @@ config COMMON_CLK
 	bool
 	bool
 	select HAVE_CLK_PREPARE
 	select HAVE_CLK_PREPARE
 	select CLKDEV_LOOKUP
 	select CLKDEV_LOOKUP
+	select SRCU
 	---help---
 	---help---
 	  The common clock framework is a single definition of struct
 	  The common clock framework is a single definition of struct
 	  clk, useful across many platforms, as well as an
 	  clk, useful across many platforms, as well as an

+ 1 - 0
drivers/cpufreq/Kconfig

@@ -2,6 +2,7 @@ menu "CPU Frequency scaling"
 
 
 config CPU_FREQ
 config CPU_FREQ
 	bool "CPU Frequency scaling"
 	bool "CPU Frequency scaling"
+	select SRCU
 	help
 	help
 	  CPU Frequency scaling allows you to change the clock speed of 
 	  CPU Frequency scaling allows you to change the clock speed of 
 	  CPUs on the fly. This is a nice method to save power, because 
 	  CPUs on the fly. This is a nice method to save power, because 

+ 1 - 0
drivers/devfreq/Kconfig

@@ -1,5 +1,6 @@
 menuconfig PM_DEVFREQ
 menuconfig PM_DEVFREQ
 	bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support"
 	bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support"
+	select SRCU
 	help
 	help
 	  A device may have a list of frequencies and voltages available.
 	  A device may have a list of frequencies and voltages available.
 	  devfreq, a generic DVFS framework can be registered for a device
 	  devfreq, a generic DVFS framework can be registered for a device

+ 1 - 0
drivers/md/Kconfig

@@ -5,6 +5,7 @@
 menuconfig MD
 menuconfig MD
 	bool "Multiple devices driver support (RAID and LVM)"
 	bool "Multiple devices driver support (RAID and LVM)"
 	depends on BLOCK
 	depends on BLOCK
+	select SRCU
 	help
 	help
 	  Support multiple physical spindles through a single logical device.
 	  Support multiple physical spindles through a single logical device.
 	  Required for RAID and logical volume management.
 	  Required for RAID and logical volume management.

+ 1 - 0
drivers/net/Kconfig

@@ -197,6 +197,7 @@ config NETCONSOLE_DYNAMIC
 
 
 config NETPOLL
 config NETPOLL
 	def_bool NETCONSOLE
 	def_bool NETCONSOLE
+	select SRCU
 
 
 config NET_POLL_CONTROLLER
 config NET_POLL_CONTROLLER
 	def_bool NETPOLL
 	def_bool NETPOLL

+ 1 - 0
fs/btrfs/Kconfig

@@ -8,6 +8,7 @@ config BTRFS_FS
 	select LZO_DECOMPRESS
 	select LZO_DECOMPRESS
 	select RAID6_PQ
 	select RAID6_PQ
 	select XOR_BLOCKS
 	select XOR_BLOCKS
+	select SRCU
 
 
 	help
 	help
 	  Btrfs is a general purpose copy-on-write filesystem with extents,
 	  Btrfs is a general purpose copy-on-write filesystem with extents,

+ 1 - 0
fs/notify/Kconfig

@@ -1,5 +1,6 @@
 config FSNOTIFY
 config FSNOTIFY
 	def_bool n
 	def_bool n
+	select SRCU
 
 
 source "fs/notify/dnotify/Kconfig"
 source "fs/notify/dnotify/Kconfig"
 source "fs/notify/inotify/Kconfig"
 source "fs/notify/inotify/Kconfig"

+ 1 - 0
fs/quota/Kconfig

@@ -5,6 +5,7 @@
 config QUOTA
 config QUOTA
 	bool "Quota support"
 	bool "Quota support"
 	select QUOTACTL
 	select QUOTACTL
+	select SRCU
 	help
 	help
 	  If you say Y here, you will be able to set per user limits for disk
 	  If you say Y here, you will be able to set per user limits for disk
 	  usage (also called disk quotas). Currently, it works for the
 	  usage (also called disk quotas). Currently, it works for the

+ 9 - 0
init/Kconfig

@@ -501,9 +501,17 @@ config TINY_RCU
 
 
 endchoice
 endchoice
 
 
+config SRCU
+	bool
+	help
+	  This option selects the sleepable version of RCU. This version
+	  permits arbitrary sleeping or blocking within RCU read-side critical
+	  sections.
+
 config TASKS_RCU
 config TASKS_RCU
 	bool "Task_based RCU implementation using voluntary context switch"
 	bool "Task_based RCU implementation using voluntary context switch"
 	default n
 	default n
+	select SRCU
 	help
 	help
 	  This option enables a task-based RCU implementation that uses
 	  This option enables a task-based RCU implementation that uses
 	  only voluntary context switch (not preemption!), idle, and
 	  only voluntary context switch (not preemption!), idle, and
@@ -1595,6 +1603,7 @@ config PERF_EVENTS
 	depends on HAVE_PERF_EVENTS
 	depends on HAVE_PERF_EVENTS
 	select ANON_INODES
 	select ANON_INODES
 	select IRQ_WORK
 	select IRQ_WORK
+	select SRCU
 	help
 	help
 	  Enable kernel support for various performance events provided
 	  Enable kernel support for various performance events provided
 	  by software and hardware.
 	  by software and hardware.

+ 3 - 0
kernel/notifier.c

@@ -402,6 +402,7 @@ int raw_notifier_call_chain(struct raw_notifier_head *nh,
 }
 }
 EXPORT_SYMBOL_GPL(raw_notifier_call_chain);
 EXPORT_SYMBOL_GPL(raw_notifier_call_chain);
 
 
+#ifdef CONFIG_SRCU
 /*
 /*
  *	SRCU notifier chain routines.    Registration and unregistration
  *	SRCU notifier chain routines.    Registration and unregistration
  *	use a mutex, and call_chain is synchronized by SRCU (no locks).
  *	use a mutex, and call_chain is synchronized by SRCU (no locks).
@@ -528,6 +529,8 @@ void srcu_init_notifier_head(struct srcu_notifier_head *nh)
 }
 }
 EXPORT_SYMBOL_GPL(srcu_init_notifier_head);
 EXPORT_SYMBOL_GPL(srcu_init_notifier_head);
 
 
+#endif /* CONFIG_SRCU */
+
 static ATOMIC_NOTIFIER_HEAD(die_chain);
 static ATOMIC_NOTIFIER_HEAD(die_chain);
 
 
 int notrace notify_die(enum die_val val, const char *str,
 int notrace notify_die(enum die_val val, const char *str,

+ 1 - 0
kernel/power/Kconfig

@@ -251,6 +251,7 @@ config APM_EMULATION
 
 
 config PM_OPP
 config PM_OPP
 	bool
 	bool
+	select SRCU
 	---help---
 	---help---
 	  SOCs have a standard set of tuples consisting of frequency and
 	  SOCs have a standard set of tuples consisting of frequency and
 	  voltage pairs that the device will support per voltage domain. This
 	  voltage pairs that the device will support per voltage domain. This

+ 2 - 1
kernel/rcu/Makefile

@@ -1,4 +1,5 @@
-obj-y += update.o srcu.o
+obj-y += update.o
+obj-$(CONFIG_SRCU) += srcu.o
 obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
 obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
 obj-$(CONFIG_TREE_RCU) += tree.o
 obj-$(CONFIG_TREE_RCU) += tree.o
 obj-$(CONFIG_PREEMPT_RCU) += tree.o
 obj-$(CONFIG_PREEMPT_RCU) += tree.o

+ 1 - 0
lib/Kconfig.debug

@@ -1215,6 +1215,7 @@ config RCU_TORTURE_TEST
 	tristate "torture tests for RCU"
 	tristate "torture tests for RCU"
 	depends on DEBUG_KERNEL
 	depends on DEBUG_KERNEL
 	select TORTURE_TEST
 	select TORTURE_TEST
+	select SRCU
 	default n
 	default n
 	help
 	help
 	  This option provides a kernel module that runs torture tests
 	  This option provides a kernel module that runs torture tests

+ 1 - 0
mm/Kconfig

@@ -325,6 +325,7 @@ config VIRT_TO_BUS
 
 
 config MMU_NOTIFIER
 config MMU_NOTIFIER
 	bool
 	bool
+	select SRCU
 
 
 config KSM
 config KSM
 	bool "Enable KSM for page merging"
 	bool "Enable KSM for page merging"

+ 1 - 0
security/tomoyo/Kconfig

@@ -5,6 +5,7 @@ config SECURITY_TOMOYO
 	select SECURITYFS
 	select SECURITYFS
 	select SECURITY_PATH
 	select SECURITY_PATH
 	select SECURITY_NETWORK
 	select SECURITY_NETWORK
+	select SRCU
 	default n
 	default n
 	help
 	help
 	  This selects TOMOYO Linux, pathname-based access control.
 	  This selects TOMOYO Linux, pathname-based access control.