linux/arch/mips
Matt Redfearn 8a46f71d34 MIPS: CPS: Fix use of current_cpu_data in preemptible code
Commit 1ec9dd80be ("MIPS: CPS: Detect CPUs in secondary clusters")
added a check in cps_boot_secondary() that the secondary being booted is
in the same cluster as the CPU running this code. This check is
performed using current_cpu_data without disabling preemption. As such
when CONFIG_PREEMPT=y, a BUG is triggered:

[   57.991693] BUG: using smp_processor_id() in preemptible [00000000] code: hotplug/1749
<snip>
[   58.063077] Call Trace:
[   58.065842] [<8040cdb4>] show_stack+0x84/0x114
[   58.070830] [<80b11b38>] dump_stack+0xf8/0x140
[   58.075796] [<8079b12c>] check_preemption_disabled+0xec/0x118
[   58.082204] [<80415110>] cps_boot_secondary+0x84/0x44c
[   58.087935] [<80413a14>] __cpu_up+0x34/0x98
[   58.092624] [<80434240>] bringup_cpu+0x38/0x114
[   58.097680] [<80434af0>] cpuhp_invoke_callback+0x168/0x8f0
[   58.103801] [<804362d0>] _cpu_up+0x154/0x1c8
[   58.108565] [<804363dc>] do_cpu_up+0x98/0xa8
[   58.113333] [<808261f8>] device_online+0x84/0xc0
[   58.118481] [<80826294>] online_store+0x60/0x98
[   58.123562] [<8062261c>] kernfs_fop_write+0x158/0x1d4
[   58.129196] [<805a2ae4>] __vfs_write+0x4c/0x168
[   58.134247] [<805a2dc8>] vfs_write+0xe0/0x190
[   58.139095] [<805a2fe0>] SyS_write+0x68/0xc4
[   58.143854] [<80415d58>] syscall_common+0x34/0x58

In reality we don't currently support running the kernel on CPUs not in
cluster 0, so the answer to cpu_cluster(&current_cpu_data) will always
be 0, even if this task being preempted and continues running on a
different CPU. Regardless, the BUG should not be triggered, so fix this
by switching to raw_current_cpu_data. When multicluster support lands
upstream this check will need removing or changing anyway.

Fixes: 1ec9dd80be ("MIPS: CPS: Detect CPUs in secondary clusters")
Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
Reviewed-by: Paul Burton <paul.burton@mips.com>
CC: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/17563/
Signed-off-by: James Hogan <jhogan@kernel.org>
2017-11-01 21:05:57 +00:00
..
alchemy Merge branch '4.14-features' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2017-09-15 20:43:33 -07:00
ar7 MIPS: AR7: allow NULL clock for clk_get_rate 2017-09-06 12:35:21 +02:00
ath25
ath79 MIPS: PCI: Move map_irq() hooks out of initdata 2017-09-19 14:55:26 -05:00
bcm47xx MIPS: BCM47XX: Fix button inversion for Asus WL-500W 2017-02-17 11:16:46 +00:00
bcm63xx MIPS: BCM63XX: allow NULL clock for clk_get_rate 2017-09-06 12:36:21 +02:00
bmips
boot MIPS: jz4780: DTS: Probe the jz4740-rtc driver from devicetree 2017-09-06 10:13:38 +02:00
cavium-octeon MIPS: Octeon: Allow access to CIU3 IRQ domains. 2017-09-04 21:19:03 +02:00
cobalt
configs Merge branch '4.14-features' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2017-09-15 20:43:33 -07:00
dec MIPS: DEC: Fix an int-handler.S CPU_DADDI_WORKAROUNDS regression 2017-08-07 16:31:03 +02:00
emma MIPS: Avoid old-style declaration 2017-01-25 02:51:11 +01:00
fw MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
generic MIPS: generic: Fix compilation error from include asm/mips-cpc.h 2017-10-31 23:49:48 +00:00
include MIPS: Fix CM region target definitions 2017-10-31 23:54:20 +00:00
jazz MIPS: Audit and remove any unnecessary uses of module.h 2017-02-14 09:00:25 +00:00
jz4740 MIPS: jz4740: Remove custom GPIO code 2017-05-22 17:26:34 +02:00
kernel MIPS: CPS: Fix use of current_cpu_data in preemptible code 2017-11-01 21:05:57 +00:00
kvm kvm,mips: Fix potential swait_active() races 2017-09-15 16:57:13 +02:00
lantiq MIPS: lantiq: Remove the arch/mips/lantiq/xway/reset.c implementation 2017-09-04 21:19:03 +02:00
lasat MIPS: Audit and remove any unnecessary uses of module.h 2017-02-14 09:00:25 +00:00
lib MIPS: Add __ioread64_copy 2017-09-04 13:53:14 +02:00
loongson32 MIPS: loongson1: set default number of rx and tx queues for stmmac 2017-10-09 14:53:38 +02:00
loongson64 MIPS: Loongson 2F: allow NULL clock for clk_get_rate 2017-09-06 12:36:59 +02:00
math-emu MIPS: math-emu: Remove pr_err() calls from fpu_emu() 2017-10-09 16:33:34 +02:00
mm MIPS: microMIPS: Fix incorrect mask in insn_table_MM 2017-11-01 00:09:16 +00:00
mti-malta Update MIPS email addresses 2017-10-31 22:42:39 +00:00
net MIPS: bpf: Fix a typo in build_one_insn() 2017-11-01 00:09:17 +00:00
netlogic Merge branch '4.14-features' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2017-09-15 20:43:33 -07:00
oprofile MIPS: Abstract CPU core & VP(E) ID access through accessor functions 2017-08-30 00:57:26 +02:00
paravirt MIPS: SMP: Allow boot_secondary SMP op to return errors 2017-08-30 00:57:27 +02:00
pci Update MIPS email addresses 2017-10-31 22:42:39 +00:00
pic32 clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
pistachio MIPS: Remove unnecessary inclusions of linux/irqchip/mips-gic.h 2017-09-04 13:53:14 +02:00
pmcs-msp71xx MIPS: MSP71xx: Include asm/setup.h 2017-09-21 16:15:17 +02:00
pnx833x mtd: nand: Rename nand.h into rawnand.h 2017-08-13 10:11:49 +02:00
power
ralink MIPS: ralink: allow NULL clock for clk_get_rate 2017-09-06 12:37:45 +02:00
rb532 mtd: nand: Rename nand.h into rawnand.h 2017-08-13 10:11:49 +02:00
sgi-ip22 mips: sgi-ip22: ecard: use dev_groups and not dev_attrs for bus_type 2017-06-09 11:00:45 +02:00
sgi-ip27 MIPS: SMP: Allow boot_secondary SMP op to return errors 2017-08-30 00:57:27 +02:00
sgi-ip32 MIPS: Add missing include files 2017-03-08 10:38:06 +01:00
sibyte MIPS: SMP: Allow boot_secondary SMP op to return errors 2017-08-30 00:57:27 +02:00
sni
tools Update MIPS email addresses 2017-10-31 22:42:39 +00:00
txx9 MIPS: PCI: Move map_irq() hooks out of initdata 2017-09-19 14:55:26 -05:00
vdso MIPS: Add DWARF unwinding to assembly 2017-09-06 11:01:52 +02:00
vr41xx MIPS: Audit and remove any unnecessary uses of module.h 2017-02-14 09:00:25 +00:00
xilfpga clocksource/drivers: Rename clocksource_probe to timer_probe 2017-06-14 11:59:16 +02:00
Kbuild MIPS: Disable Werror when W= is set 2017-04-10 11:56:07 +02:00
Kbuild.platforms
Kconfig MIPS: Make CONFIG_MIPS_MT_SMP default y 2017-08-30 00:57:28 +02:00
Kconfig.debug MIPS: Sibyte: Fix Kconfig warning. 2017-04-21 03:34:01 +02:00
Makefile MIPS: Add DWARF unwinding to assembly 2017-09-06 11:01:52 +02:00
Makefile.postlink MIPS: Fix distclean with Makefile.postlink 2017-02-13 18:57:34 +00:00