Skip to content

Commit 4a95449

Browse files
jbuddhabmichalsimek
authored andcommitted
soc: xilinx: rename cpu_number1 to dummy_cpu_number
The per cpu variable cpu_number1 is passed to xlnx_event_handler as argument "dev_id", but it 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 call trace 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 Fixes: daed80e ("soc: xilinx: Fix for call trace due to the usage of smp_processor_id()") Signed-off-by: Jay Buddhabhatti <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Michal Simek <[email protected]>
1 parent 56f4526 commit 4a95449

File tree

1 file changed

+4
-11
lines changed

1 file changed

+4
-11
lines changed

drivers/soc/xilinx/xlnx_event_manager.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Xilinx Event Management Driver
44
*
55
* Copyright (C) 2021 Xilinx, Inc.
6+
* Copyright (C) 2024 Advanced Micro Devices, Inc.
67
*
78
* Abhyuday Godhasara <[email protected]>
89
*/
@@ -19,7 +20,7 @@
1920
#include <linux/platform_device.h>
2021
#include <linux/slab.h>
2122

22-
static DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number1);
23+
static DEFINE_PER_CPU_READ_MOSTLY(int, dummy_cpu_number);
2324

2425
static int virq_sgi;
2526
static int event_manager_availability = -EACCES;
@@ -570,7 +571,6 @@ static void xlnx_disable_percpu_irq(void *data)
570571
static int xlnx_event_init_sgi(struct platform_device *pdev)
571572
{
572573
int ret = 0;
573-
int cpu;
574574
/*
575575
* IRQ related structures are used for the following:
576576
* for each SGI interrupt ensure its mapped by GIC IRQ domain
@@ -607,11 +607,8 @@ static int xlnx_event_init_sgi(struct platform_device *pdev)
607607
sgi_fwspec.param[0] = sgi_num;
608608
virq_sgi = irq_create_fwspec_mapping(&sgi_fwspec);
609609

610-
cpu = get_cpu();
611-
per_cpu(cpu_number1, cpu) = cpu;
612610
ret = request_percpu_irq(virq_sgi, xlnx_event_handler, "xlnx_event_mgmt",
613-
&cpu_number1);
614-
put_cpu();
611+
&dummy_cpu_number);
615612

616613
WARN_ON(ret);
617614
if (ret) {
@@ -627,16 +624,12 @@ static int xlnx_event_init_sgi(struct platform_device *pdev)
627624

628625
static void xlnx_event_cleanup_sgi(struct platform_device *pdev)
629626
{
630-
int cpu = smp_processor_id();
631-
632-
per_cpu(cpu_number1, cpu) = cpu;
633-
634627
cpuhp_remove_state(CPUHP_AP_ONLINE_DYN);
635628

636629
on_each_cpu(xlnx_disable_percpu_irq, NULL, 1);
637630

638631
irq_clear_status_flags(virq_sgi, IRQ_PER_CPU);
639-
free_percpu_irq(virq_sgi, &cpu_number1);
632+
free_percpu_irq(virq_sgi, &dummy_cpu_number);
640633
irq_dispose_mapping(virq_sgi);
641634
}
642635

0 commit comments

Comments
 (0)