Skip to content

Commit 7353026

Browse files
mpredfearnralfbaechle
authored andcommitted
MIPS: PCI: Fix smp_processor_id() in preemptible
Commit 1c3c5ea ("sched/core: Enable might_sleep() and smp_processor_id() checks early") enables checks for might_sleep() and smp_processor_id() being used in preemptible code earlier in the boot than before. This results in a new BUG from pcibios_set_cache_line_size(). BUG: using smp_processor_id() in preemptible [00000000] code: swapper/0/1 caller is pcibios_set_cache_line_size+0x10/0x70 CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.13.0-rc1-00007-g3ce3e4ba4275 #615 Stack: 0000000000000000 ffffffff81189694 0000000000000000 ffffffff81822318 000000000000004e 0000000000000001 800000000e20bd08 20c49ba5e3540000 0000000000000000 0000000000000000 ffffffff818d0000 0000000000000000 0000000000000000 ffffffff81189328 ffffffff818ce692 0000000000000000 0000000000000000 ffffffff81189bc8 ffffffff818d0000 0000000000000000 ffffffff81828907 ffffffff81769970 800000020ec78d80 ffffffff818c7b48 0000000000000001 0000000000000001 ffffffff818652b0 ffffffff81896268 ffffffff818c0000 800000020ec7fb40 800000020ec7fc58 ffffffff81684cac 0000000000000000 ffffffff8118ab50 0000000000000030 ffffffff81769970 0000000000000001 ffffffff81122a58 0000000000000000 0000000000000000 ... Call Trace: [<ffffffff81122a58>] show_stack+0x90/0xb0 [<ffffffff81684cac>] dump_stack+0xac/0xf0 [<ffffffff813f7050>] check_preemption_disabled+0x120/0x128 [<ffffffff818855e8>] pcibios_set_cache_line_size+0x10/0x70 [<ffffffff81100578>] do_one_initcall+0x48/0x140 [<ffffffff81865dc4>] kernel_init_freeable+0x194/0x24c [<ffffffff8169c534>] kernel_init+0x14/0x118 [<ffffffff8111ca84>] ret_from_kernel_thread+0x14/0x1c Fix this by using the cpu_*cache_line_size() macros instead. These macros are the "proper" way to determine the CPU cache sizes. This makes use of the newly added cpu_tcache_line_size. Fixes: 1c3c5ea ("sched/core: Enable might_sleep() and smp_processor_id() checks early") Signed-off-by: Matt Redfearn <[email protected]> Suggested-by: James Hogan <[email protected]> Reviewed-by: James Hogan <[email protected]> Signed-off-by: Ralf Baechle <[email protected]>
1 parent 21da533 commit 7353026

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

arch/mips/pci/pci.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,15 @@ EXPORT_SYMBOL(PCIBIOS_MIN_MEM);
2828

2929
static int __init pcibios_set_cache_line_size(void)
3030
{
31-
struct cpuinfo_mips *c = &current_cpu_data;
3231
unsigned int lsize;
3332

3433
/*
3534
* Set PCI cacheline size to that of the highest level in the
3635
* cache hierarchy.
3736
*/
38-
lsize = c->dcache.linesz;
39-
lsize = c->scache.linesz ? : lsize;
40-
lsize = c->tcache.linesz ? : lsize;
37+
lsize = cpu_dcache_line_size();
38+
lsize = cpu_scache_line_size() ? : lsize;
39+
lsize = cpu_tcache_line_size() ? : lsize;
4140

4241
BUG_ON(!lsize);
4342

0 commit comments

Comments
 (0)