Re: [PATCH V2 7/7] x86,rcu: use percpu rcu_preempt_depth

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2019/11/3 12:30 上午, Borislav Petkov wrote:
Resending again because your mail has the craziest header:

Reply-To: 20191101162109.GN20975@paulmck-ThinkPad-P72

and hitting Reply-to-all creates only confusion. WTF?


Sorry, I send the emails via git send-email with the wrong
argument "--reply-to", it should have been "--in-reply-to".


On Sat, Nov 02, 2019 at 12:45:59PM +0000, Lai Jiangshan wrote:
Convert x86 to use a per-cpu rcu_preempt_depth. The reason for doing so
is that accessing per-cpu variables is a lot cheaper than accessing
task_struct or thread_info variables.

We need to save/restore the actual rcu_preempt_depth when switch.
We also place the per-cpu rcu_preempt_depth close to __preempt_count
and current_task variable.

Using the idea of per-cpu __preempt_count.

No function call when using rcu_read_[un]lock().
Single instruction for rcu_read_lock().
2 instructions for fast path of rcu_read_unlock().

CC: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxxxxx>
---
  arch/x86/Kconfig                         |  2 +
  arch/x86/include/asm/rcu_preempt_depth.h | 87 ++++++++++++++++++++++++
  arch/x86/kernel/cpu/common.c             |  7 ++
  arch/x86/kernel/process_32.c             |  2 +
  arch/x86/kernel/process_64.c             |  2 +
  include/linux/rcupdate.h                 | 24 +++++++
  init/init_task.c                         |  2 +-
  kernel/fork.c                            |  2 +-
  kernel/rcu/Kconfig                       |  3 +
  kernel/rcu/tree_exp.h                    |  2 +
  kernel/rcu/tree_plugin.h                 | 37 +++++++---
  11 files changed, 158 insertions(+), 12 deletions(-)
  create mode 100644 arch/x86/include/asm/rcu_preempt_depth.h

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index d6e1faa28c58..af9fedc0fdc4 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -18,6 +18,7 @@ config X86_32
  	select MODULES_USE_ELF_REL
  	select OLD_SIGACTION
  	select GENERIC_VDSO_32
+	select ARCH_HAVE_RCU_PREEMPT_DEEPTH

WTF is a "DEEPTH"?


Sorry, bad English.




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux