projects
/
linux-2.6-microblaze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ebd297a
)
can: m_can: m_can_class_allocate_dev(): initialize spin lock on device probe
author
Antonios Salios
<antonios@mwa.re>
Fri, 25 Apr 2025 11:17:45 +0000
(13:17 +0200)
committer
Marc Kleine-Budde
<mkl@pengutronix.de>
Tue, 6 May 2025 13:45:31 +0000
(15:45 +0200)
The spin lock tx_handling_spinlock in struct m_can_classdev is not
being initialized. This leads the following spinlock bad magic
complaint from the kernel, eg. when trying to send CAN frames with
cansend from can-utils:
| BUG: spinlock bad magic on CPU#0, cansend/95
| lock: 0xff60000002ec1010, .magic:
00000000
, .owner: <none>/-1, .owner_cpu: 0
| CPU: 0 UID: 0 PID: 95 Comm: cansend Not tainted
6.15.0-rc3-00032-ga79be02bba5c
#5 NONE
| Hardware name: MachineWare SIM-V (DT)
| Call Trace:
| [<
ffffffff800133e0
>] dump_backtrace+0x1c/0x24
| [<
ffffffff800022f2
>] show_stack+0x28/0x34
| [<
ffffffff8000de3e
>] dump_stack_lvl+0x4a/0x68
| [<
ffffffff8000de70
>] dump_stack+0x14/0x1c
| [<
ffffffff80003134
>] spin_dump+0x62/0x6e
| [<
ffffffff800883ba
>] do_raw_spin_lock+0xd0/0x142
| [<
ffffffff807a6fcc
>] _raw_spin_lock_irqsave+0x20/0x2c
| [<
ffffffff80536dba
>] m_can_start_xmit+0x90/0x34a
| [<
ffffffff806148b0
>] dev_hard_start_xmit+0xa6/0xee
| [<
ffffffff8065b730
>] sch_direct_xmit+0x114/0x292
| [<
ffffffff80614e2a
>] __dev_queue_xmit+0x3b0/0xaa8
| [<
ffffffff8073b8fa
>] can_send+0xc6/0x242
| [<
ffffffff8073d1c0
>] raw_sendmsg+0x1a8/0x36c
| [<
ffffffff805ebf06
>] sock_write_iter+0x9a/0xee
| [<
ffffffff801d06ea
>] vfs_write+0x184/0x3a6
| [<
ffffffff801d0a88
>] ksys_write+0xa0/0xc0
| [<
ffffffff801d0abc
>] __riscv_sys_write+0x14/0x1c
| [<
ffffffff8079ebf8
>] do_trap_ecall_u+0x168/0x212
| [<
ffffffff807a830a
>] handle_exception+0x146/0x152
Initializing the spin lock in m_can_class_allocate_dev solves that
problem.
Fixes:
1fa80e23c150
("can: m_can: Introduce a tx_fifo_in_flight counter")
Signed-off-by: Antonios Salios <antonios@mwa.re>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link:
https://patch.msgid.link/20250425111744.37604-2-antonios@mwa.re
Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/m_can/m_can.c
patch
|
blob
|
history
diff --git
a/drivers/net/can/m_can/m_can.c
b/drivers/net/can/m_can/m_can.c
index
884a635
..
326ede9
100644
(file)
--- a/
drivers/net/can/m_can/m_can.c
+++ b/
drivers/net/can/m_can/m_can.c
@@
-2379,6
+2379,7
@@
struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
SET_NETDEV_DEV(net_dev, dev);
m_can_of_parse_mram(class_dev, mram_config_vals);
+ spin_lock_init(&class_dev->tx_handling_spinlock);
out:
return class_dev;
}