Avoid false quiescent states in rcutree with CONFIG_RCU_FAST_NO_HZ. (rhbz 577968)
This commit is contained in:
parent
737c9c7da8
commit
27b62b6f85
@ -51,7 +51,7 @@ Summary: The Linux kernel
|
|||||||
# For non-released -rc kernels, this will be prepended with "0.", so
|
# For non-released -rc kernels, this will be prepended with "0.", so
|
||||||
# for example a 3 here will become 0.3
|
# for example a 3 here will become 0.3
|
||||||
#
|
#
|
||||||
%global baserelease 1
|
%global baserelease 2
|
||||||
%global fedora_build %{baserelease}
|
%global fedora_build %{baserelease}
|
||||||
|
|
||||||
# base_sublevel is the kernel version we're starting with and patching
|
# base_sublevel is the kernel version we're starting with and patching
|
||||||
@ -697,6 +697,8 @@ Patch2900: linux-2.6-v4l-dvb-update.patch
|
|||||||
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
||||||
Patch2902: linux-2.6-v4l-dvb-uvcvideo-update.patch
|
Patch2902: linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||||
|
|
||||||
|
Patch3000: rcutree-avoid-false-quiescent-states.patch
|
||||||
|
|
||||||
# fs fixes
|
# fs fixes
|
||||||
|
|
||||||
# NFSv4
|
# NFSv4
|
||||||
@ -1307,6 +1309,8 @@ ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
|
|||||||
#ApplyPatch linux-2.6-v4l-dvb-uvcvideo-update.patch
|
#ApplyPatch linux-2.6-v4l-dvb-uvcvideo-update.patch
|
||||||
|
|
||||||
# Patches headed upstream
|
# Patches headed upstream
|
||||||
|
ApplyPatch rcutree-avoid-false-quiescent-states.patch
|
||||||
|
|
||||||
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
||||||
|
|
||||||
ApplyPatch add-appleir-usb-driver.patch
|
ApplyPatch add-appleir-usb-driver.patch
|
||||||
@ -2039,6 +2043,9 @@ fi
|
|||||||
# ||----w |
|
# ||----w |
|
||||||
# || ||
|
# || ||
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Sep 12 2011 Josh Boyer <jwboyer@redhat.com>
|
||||||
|
- Avoid false quiescent states in rcutree with CONFIG_RCU_FAST_NO_HZ. (rhbz 577968)
|
||||||
|
|
||||||
* Fri Sep 09 2011 Josh Boyer <jwboyer@redhat.com>
|
* Fri Sep 09 2011 Josh Boyer <jwboyer@redhat.com>
|
||||||
- Change to 64K page size for ppc64 kernels (rhbz 736751)
|
- Change to 64K page size for ppc64 kernels (rhbz 736751)
|
||||||
|
|
||||||
|
67
rcutree-avoid-false-quiescent-states.patch
Normal file
67
rcutree-avoid-false-quiescent-states.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
|
||||||
|
index ba06207..c38a882 100644
|
||||||
|
--- a/kernel/rcutree.c
|
||||||
|
+++ b/kernel/rcutree.c
|
||||||
|
@@ -1476,9 +1476,6 @@ static void rcu_process_callbacks(struct softirq_action *unused)
|
||||||
|
&__get_cpu_var(rcu_sched_data));
|
||||||
|
__rcu_process_callbacks(&rcu_bh_state, &__get_cpu_var(rcu_bh_data));
|
||||||
|
rcu_preempt_process_callbacks();
|
||||||
|
-
|
||||||
|
- /* If we are last CPU on way to dyntick-idle mode, accelerate it. */
|
||||||
|
- rcu_needs_cpu_flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
|
||||||
|
index 01b2ccd..795f7fc 100644
|
||||||
|
--- a/kernel/rcutree.h
|
||||||
|
+++ b/kernel/rcutree.h
|
||||||
|
@@ -450,7 +450,6 @@ static int rcu_preempt_needs_cpu(int cpu);
|
||||||
|
static void __cpuinit rcu_preempt_init_percpu_data(int cpu);
|
||||||
|
static void rcu_preempt_send_cbs_to_online(void);
|
||||||
|
static void __init __rcu_init_preempt(void);
|
||||||
|
-static void rcu_needs_cpu_flush(void);
|
||||||
|
static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
|
||||||
|
static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
|
||||||
|
static void invoke_rcu_callbacks_kthread(void);
|
||||||
|
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
|
||||||
|
index 8aafbb8..b0254de 100644
|
||||||
|
--- a/kernel/rcutree_plugin.h
|
||||||
|
+++ b/kernel/rcutree_plugin.h
|
||||||
|
@@ -1907,15 +1907,6 @@ int rcu_needs_cpu(int cpu)
|
||||||
|
return rcu_needs_cpu_quick_check(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Check to see if we need to continue a callback-flush operations to
|
||||||
|
- * allow the last CPU to enter dyntick-idle mode. But fast dyntick-idle
|
||||||
|
- * entry is not configured, so we never do need to.
|
||||||
|
- */
|
||||||
|
-static void rcu_needs_cpu_flush(void)
|
||||||
|
-{
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
#else /* #if !defined(CONFIG_RCU_FAST_NO_HZ) */
|
||||||
|
|
||||||
|
#define RCU_NEEDS_CPU_FLUSHES 5
|
||||||
|
@@ -1991,20 +1982,4 @@ int rcu_needs_cpu(int cpu)
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Check to see if we need to continue a callback-flush operations to
|
||||||
|
- * allow the last CPU to enter dyntick-idle mode.
|
||||||
|
- */
|
||||||
|
-static void rcu_needs_cpu_flush(void)
|
||||||
|
-{
|
||||||
|
- int cpu = smp_processor_id();
|
||||||
|
- unsigned long flags;
|
||||||
|
-
|
||||||
|
- if (per_cpu(rcu_dyntick_drain, cpu) <= 0)
|
||||||
|
- return;
|
||||||
|
- local_irq_save(flags);
|
||||||
|
- (void)rcu_needs_cpu(cpu);
|
||||||
|
- local_irq_restore(flags);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
#endif /* #else #if !defined(CONFIG_RCU_FAST_NO_HZ) */
|
Loading…
Reference in New Issue
Block a user