Patch "cpu/cacheinfo: Fix teardown path" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
cpu/cacheinfo: Fix teardown path
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cpu-cacheinfo-fix-teardown-path.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
2110d70c5e58326a10e93cfefdc0b3686e2ada12Mon Sep 17 00:00:00 2001
From: Borislav Petkov <[email protected]>
Date: Sat, 8 Aug 2015 10:46:02 +0200
Subject: cpu/cacheinfo: Fix teardown path
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Borislav Petkov <[email protected]>
commit 2110d70c5e58326a10e93cfefdc0b3686e2ada12 upstream.
Philip Müller reported a hang when booting 32-bit 4.1 kernel on an AMD box. A fragment of the splat was enough to pinpoint the issue:
task: f58e0000 ti: f58e8000 task.ti: f58e800
EIP: 0060:[<c135a903>] EFLAGS: 00010206 CPU: 0 EIP is at free_cache_attributes+0x83/0xd0
EAX: 00000001 EBX: f589d46c ECX: 00000090 EDX: 360c2000
ESI: 00000000 EDI: c1724a80 EBP: f58e9ec0 ESP: f58e9ea0
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
CR0: 8005003b CR2: 000000ac CR3: 01731000 CR4: 000006d0
cache_shared_cpu_map_setup() did check sibling CPUs cacheinfo descriptor while the respective teardown path cache_shared_cpu_map_remove() didn't. Fix that.
Quoted 1 line
Quoted 1 line
From tglx's version: to be on the safe side, move the cacheinfo
descriptor check to free_cache_attributes(), thus cleaning up the hotplug path a little and making this even more robust.
--- drivers/base/cacheinfo.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/base/cacheinfo.c +8 -2
@@ -148,7 +148,11 @@ static void cache_shared_cpu_map_remove(if (sibling == cpu)/* skip itself */ continue ; + sib_cpu_ci =get_cpu_cacheinfo (sibling); +if (!sib_cpu_ci->info_list) +continue ; + sib_leaf = sib_cpu_ci->info_list + index;cpumask_clear_cpu (cpu, &sib_leaf->shared_cpu_map);cpumask_clear_cpu (sibling, &this_leaf->shared_cpu_map);
@@ -159,6 +163,9 @@ static void cache_shared_cpu_map_remove(static void free_cache_attributes (unsigned int cpu) { +if (!per_cpu_cacheinfo (cpu)) +return ; +cache_shared_cpu_map_remove (cpu);kfree (per_cpu_cacheinfo (cpu));
@@ -514,8 +521,7 @@ static int cacheinfo_cpu_callback(structbreak ;case CPU_DEAD :cache_remove_dev (cpu); -if (per_cpu_cacheinfo (cpu)) -free_cache_attributes (cpu); +free_cache_attributes (cpu);break ; }return notifier_from_errno (rc);
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/x86-efi-fix-boot-crash-by-mapping-efi-memmap-entries-bottom-up-at-runtime-instead-of-top-down.patch queue-4.1/perf-header-fixup-reading-of-header_nrcpus-feature.patch queue-4.1/cpu-cacheinfo-fix-teardown-path.patch