From mboxrd@z Thu Jan 1 00:00:00 1970 From: Emil Renner Berthing Subject: [PATCH] asm-generic/mmiowb: Get cpu in mmiowb_set_pending Date: Sun, 5 Jul 2020 16:26:40 +0200 Message-ID: <20200705142640.279439-1-kernel@esmil.dk> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726781AbgGEO1P (ORCPT ); Sun, 5 Jul 2020 10:27:15 -0400 Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07C95C061794 for ; Sun, 5 Jul 2020 07:27:15 -0700 (PDT) Received: by mail-wm1-x341.google.com with SMTP id q15so36449383wmj.2 for ; Sun, 05 Jul 2020 07:27:14 -0700 (PDT) Sender: linux-arch-owner@vger.kernel.org List-ID: To: linux-riscv@lists.infradead.org Cc: Emil Renner Berthing , Arnd Bergmann , Palmer Dabbelt , Paul Walmsley , linux-arch@vger.kernel.org Without this enabling CONFIG_PREEMPT and CONFIG_DEBUG_PREEMPT results in many errors like this on the HiFive Unleashed RISC-V board: BUG: using smp_processor_id() in preemptible [00000000] code: swapper/0/1 caller is regmap_mmio_write32le+0x1c/0x46 CPU: 3 PID: 1 Comm: swapper/0 Not tainted 5.8.0-rc3-hfu+ #1 Call Trace: [] walk_stackframe+0x0/0x7a [] dump_stack+0x6e/0x88 [] regmap_mmio_write32le+0x18/0x46 [] check_preemption_disabled+0xa4/0xaa [] regmap_mmio_write32le+0x18/0x46 [] regmap_mmio_write+0x26/0x44 [] regmap_write+0x28/0x48 [] sifive_gpio_probe+0xc0/0x1da [] rdinit_setup+0x22/0x26 [] platform_drv_probe+0x24/0x52 [] really_probe+0x92/0x21a [] device_driver_attach+0x42/0x4a [] device_driver_attach+0x46/0x4a [] __driver_attach+0x40/0xac [] device_driver_attach+0x46/0x4a [] bus_for_each_dev+0x3c/0x64 [] bus_add_driver+0x11e/0x184 [] driver_register+0x32/0xc6 [] gpiolib_sysfs_init+0xaa/0xae [] do_one_initcall+0x50/0xfc [] rdinit_setup+0x22/0x26 [] kernel_init_freeable+0x152/0x1da [] rest_init+0xde/0xe2 [] kernel_init+0xa/0x11a [] rest_init+0xde/0xe2 [] ret_from_syscall_rejected+0x8/0xc Signed-off-by: Emil Renner Berthing --- This patch fixes it, but my guess is that it's not the right fix. Do anyone have a better idea? include/asm-generic/mmiowb.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/asm-generic/mmiowb.h b/include/asm-generic/mmiowb.h index 9439ff037b2d..31a21cdfbbcf 100644 --- a/include/asm-generic/mmiowb.h +++ b/include/asm-generic/mmiowb.h @@ -34,8 +34,12 @@ DECLARE_PER_CPU(struct mmiowb_state, __mmiowb_state); static inline void mmiowb_set_pending(void) { - struct mmiowb_state *ms = __mmiowb_state(); + struct mmiowb_state *ms; + + get_cpu(); + ms = __mmiowb_state(); ms->mmiowb_pending = ms->nesting_count; + put_cpu(); } static inline void mmiowb_spin_lock(void) -- 2.27.0