[ANNOUNCE] 3.6.3-rt8

From: Thomas Gleixner
Date: Sat Oct 27 2012 - 15:33:07 EST


Dear RT Folks,

I'm pleased to announce the 3.6.3-rt8 release.

Changes since 3.6.3-rt7:

* Fix the SLUB fallout on NUMA machines

I missed to fixup the smp function calls which can result in a
deadlock on RT.

* Fix a mainline issue with cpufreq/powernow-k8 (Same patch is
queued upstream, but one of Carstens test systems stumbled over
it so I carry that until it hits 3.6.stable)

The delta patch against 3.6.3-rt7 is appended below and can be found
here:

http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/incr/patch-3.6.3-rt7-rt8.patch.xz

The RT patch against 3.6.3 can be found here:

http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/patch-3.6.3-rt8.patch.xz

The split quilt queue is available at:

http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/patches-3.6.3-rt8.tar.xz

Enjoy,

tglx

---------->
Index: linux-stable/localversion-rt
===================================================================
--- linux-stable.orig/localversion-rt
+++ linux-stable/localversion-rt
@@ -1 +1 @@
--rt7
+-rt8
Index: linux-stable/mm/slub.c
===================================================================
--- linux-stable.orig/mm/slub.c
+++ linux-stable/mm/slub.c
@@ -1874,10 +1874,10 @@ redo:
*
* This function must be called with interrupt disabled.
*/
-static void unfreeze_partials(struct kmem_cache *s)
+static void unfreeze_partials(struct kmem_cache *s, unsigned int cpu)
{
struct kmem_cache_node *n = NULL, *n2 = NULL;
- struct kmem_cache_cpu *c = this_cpu_ptr(s->cpu_slab);
+ struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu);
struct page *page, *discard_page = NULL;

while ((page = c->partial)) {
@@ -1963,7 +1963,7 @@ int put_cpu_partial(struct kmem_cache *s
* set to the per node partial list.
*/
local_lock_irqsave(slub_lock, flags);
- unfreeze_partials(s);
+ unfreeze_partials(s, smp_processor_id());
local_unlock_irqrestore(slub_lock, flags);
pobjects = 0;
pages = 0;
@@ -2005,17 +2005,10 @@ static inline void __flush_cpu_slab(stru
if (c->page)
flush_slab(s, c);

- unfreeze_partials(s);
+ unfreeze_partials(s, cpu);
}
}

-static void flush_cpu_slab(void *d)
-{
- struct kmem_cache *s = d;
-
- __flush_cpu_slab(s, smp_processor_id());
-}
-
static bool has_cpu_slab(int cpu, void *info)
{
struct kmem_cache *s = info;
@@ -2024,10 +2017,29 @@ static bool has_cpu_slab(int cpu, void *
return c->page || c->partial;
}

+#ifndef CONFIG_PREEMPT_RT_FULL
+static void flush_cpu_slab(void *d)
+{
+ struct kmem_cache *s = d;
+
+ __flush_cpu_slab(s, smp_processor_id());
+}
+
static void flush_all(struct kmem_cache *s)
{
on_each_cpu_cond(has_cpu_slab, flush_cpu_slab, s, 1, GFP_ATOMIC);
}
+#else
+static void flush_all(struct kmem_cache *s)
+{
+ int cpu;
+
+ for_each_online_cpu(cpu) {
+ if (has_cpu_slab(cpu, s))
+ __flush_cpu_slab(s, cpu);
+ }
+}
+#endif

/*
* Check if the objects in a per cpu structure fit numa
Index: linux-stable/drivers/cpufreq/powernow-k8.c
===================================================================
--- linux-stable.orig/drivers/cpufreq/powernow-k8.c
+++ linux-stable/drivers/cpufreq/powernow-k8.c
@@ -1224,13 +1224,12 @@ static int powernowk8_target(struct cpuf
.relation = relation };

/*
- * Must run on @pol->cpu. cpufreq core is responsible for ensuring
- * that we're bound to the current CPU and pol->cpu stays online.
+ * Must run on @pol->cpu. We queue it on the target cpu even
+ * if we are currently on the target cpu. This is preemptible
+ * non cpu bound context, so we can't call the target function
+ * directly.
*/
- if (smp_processor_id() == pol->cpu)
- return powernowk8_target_fn(&pta);
- else
- return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta);
+ return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta);
}

/* Driver entry point to verify the policy and range of frequencies */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/