From: Quanyang Wang <quanyang.w...@windriver.com>

The per cpu variable cpu_number1 is passed to xlnx_event_handler as
argument "dev_id", but is not used in this function. So drop the
initialization of this variable and rename it to dummy_cpu_number.
This patch is to fix the following calltrace when the kernel option
CONFIG_DEBUG_ATOMIC_SLEEP is enabled:

    BUG: sleeping function called from invalid context at 
include/linux/sched/mm.h:274
    in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper/0
    preempt_count: 1, expected: 0
    CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.1.0 #53
    Hardware name: Xilinx Versal vmk180 Eval board rev1.1 (QSPI) (DT)
    Call trace:
     dump_backtrace+0xd0/0xe0
     show_stack+0x18/0x40
     dump_stack_lvl+0x7c/0xa0
     dump_stack+0x18/0x34
     __might_resched+0x10c/0x140
     __might_sleep+0x4c/0xa0
     __kmem_cache_alloc_node+0xf4/0x168
     kmalloc_trace+0x28/0x38
     __request_percpu_irq+0x74/0x138
     xlnx_event_manager_probe+0xf8/0x298
     platform_probe+0x68/0xd8

Signed-off-by: Quanyang Wang <quanyang.w...@windriver.com>
---
Hi Bruce,
Would you please help merge this patch to the branches:
        v6.1/standard/preempt-rt/sdkv6.1/xlnx-soc
        v6.1/standard/sdkv6.1/xlnx-soc
Thanks,
Quanyang
---
 drivers/soc/xilinx/xlnx_event_manager.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/soc/xilinx/xlnx_event_manager.c 
b/drivers/soc/xilinx/xlnx_event_manager.c
index 9b6fe19666946..9156cb45bd533 100644
--- a/drivers/soc/xilinx/xlnx_event_manager.c
+++ b/drivers/soc/xilinx/xlnx_event_manager.c
@@ -22,7 +22,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
-static DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number1);
+static DEFINE_PER_CPU_READ_MOSTLY(int, dummy_cpu_number);
 
 static int virq_sgi;
 static int event_manager_availability = -EACCES;
@@ -569,7 +569,6 @@ static void xlnx_disable_percpu_irq(void *data)
 static int xlnx_event_init_sgi(struct platform_device *pdev)
 {
        int ret = 0;
-       int cpu;
        /*
         * IRQ related structures are used for the following:
         * for each SGI interrupt ensure its mapped by GIC IRQ domain
@@ -606,11 +605,8 @@ static int xlnx_event_init_sgi(struct platform_device 
*pdev)
        sgi_fwspec.param[0] = sgi_num;
        virq_sgi = irq_create_fwspec_mapping(&sgi_fwspec);
 
-       cpu = get_cpu();
-       per_cpu(cpu_number1, cpu) = cpu;
        ret = request_percpu_irq(virq_sgi, xlnx_event_handler, 
"xlnx_event_mgmt",
-                                &cpu_number1);
-       put_cpu();
+                                &dummy_cpu_number);
 
        WARN_ON(ret);
        if (ret) {
@@ -626,16 +622,12 @@ static int xlnx_event_init_sgi(struct platform_device 
*pdev)
 
 static void xlnx_event_cleanup_sgi(struct platform_device *pdev)
 {
-       int cpu = smp_processor_id();
-
-       per_cpu(cpu_number1, cpu) = cpu;
-
        cpuhp_remove_state(CPUHP_AP_ONLINE_DYN);
 
        on_each_cpu(xlnx_disable_percpu_irq, NULL, 1);
 
        irq_clear_status_flags(virq_sgi, IRQ_PER_CPU);
-       free_percpu_irq(virq_sgi, &cpu_number1);
+       free_percpu_irq(virq_sgi, &dummy_cpu_number);
        irq_dispose_mapping(virq_sgi);
 }
 
-- 
2.36.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#13488): 
https://lists.yoctoproject.org/g/linux-yocto/message/13488
Mute This Topic: https://lists.yoctoproject.org/mt/103778951/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to