]> git.itanic.dy.fi Git - linux-stable/commitdiff
Merge patch series "can: m_can: Optimizations for m_can/tcan part 2"
authorMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 24 Mar 2023 18:14:02 +0000 (19:14 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 24 Mar 2023 18:14:02 +0000 (19:14 +0100)
Markus Schneider-Pargmann <msp@baylibre.com> says:

third version part 2, functionally I had to move from spin_lock to
spin_lock_irqsave because of an interrupt that was calling start_xmit,
see attached stack. This is tested on tcan455x but I don't have the
integrated hardware myself so any testing is appreciated.

The series implements many small and bigger throughput improvements.

Changes in v3:
- Remove parenthesis in error messages
- Use memcpy_and_pad for buffer copy in 'can: m_can: Write transmit
  header and data in one transaction'.
- Replace spin_lock with spin_lock_irqsave. I got a report of a
  interrupt that was calling start_xmit just after the netqueue was
  woken up before the locked region was exited. spin_lock_irqsave should
  fix this. I attached the full stack at the end of the mail if someone
  wants to know.
- Rebased to v6.3-rc1.
- Removed tcan4x5x patches from this series.

Changes in v2: https://lore.kernel.org/all/20230125195059.630377-1-msp@baylibre.com
- Rebased on v6.2-rc5
- Fixed missing/broken accounting for non peripheral m_can devices.

part 1:
v1 - https://lore.kernel.org/lkml/20221116205308.2996556-1-msp@baylibre.com
v2 - https://lore.kernel.org/lkml/20221206115728.1056014-1-msp@baylibre.com

part 2:
v1 - https://lore.kernel.org/lkml/20221221152537.751564-1-msp@baylibre.com
v2 - https://lore.kernel.org/lkml/20230125195059.630377-1-msp@baylibre.com

stack of calling start_xmit within locked region:
[  308.170171]  dump_backtrace+0x0/0x1a0
[  308.173841]  show_stack+0x18/0x70
[  308.177158]  sched_show_task+0x154/0x180
[  308.181084]  dump_cpu_task+0x44/0x54
[  308.184664]  rcu_dump_cpu_stacks+0xe8/0x12c
[  308.188846]  rcu_sched_clock_irq+0x9f4/0xd10
[  308.193118]  update_process_times+0x9c/0xec
[  308.197304]  tick_sched_handle+0x34/0x60
[  308.201231]  tick_sched_timer+0x4c/0xa4
[  308.205071]  __hrtimer_run_queues+0x138/0x1e0
[  308.209429]  hrtimer_interrupt+0xe8/0x244
[  308.213440]  arch_timer_handler_phys+0x38/0x50
[  308.217890]  handle_percpu_devid_irq+0x84/0x130
[  308.222422]  handle_domain_irq+0x60/0x90
[  308.226347]  gic_handle_irq+0x54/0x130
[  308.230099]  do_interrupt_handler+0x34/0x60
[  308.234286]  el1_interrupt+0x30/0x80
[  308.237861]  el1h_64_irq_handler+0x18/0x24
[  308.241958]  el1h_64_irq+0x78/0x7c
[  308.245360]  queued_spin_lock_slowpath+0xf4/0x390
[  308.250067]  m_can_start_tx+0x20/0xb0 [m_can]
[  308.254431]  m_can_start_xmit+0xd8/0x230 [m_can]
[  308.259054]  dev_hard_start_xmit+0xd4/0x15c
[  308.263241]  sch_direct_xmit+0xe8/0x370
[  308.267080]  __qdisc_run+0x118/0x650
[  308.270660]  net_tx_action+0x118/0x230
[  308.274409]  _stext+0x124/0x2a0
[  308.277549]  __irq_exit_rcu+0xe4/0x100
[  308.281302]  irq_exit+0x10/0x20
[  308.284444]  handle_domain_irq+0x64/0x90
[  308.288367]  gic_handle_irq+0x54/0x130
[  308.292119]  call_on_irq_stack+0x2c/0x54
[  308.296043]  do_interrupt_handler+0x54/0x60
[  308.300228]  el1_interrupt+0x30/0x80
[  308.303804]  el1h_64_irq_handler+0x18/0x24
[  308.307901]  el1h_64_irq+0x78/0x7c
[  308.311303]  __netif_schedule+0x78/0xa0
[  308.315138]  netif_tx_wake_queue+0x50/0x7c
[  308.319237]  m_can_isr+0x474/0x1710 [m_can]
[  308.323425]  irq_thread_fn+0x2c/0x9c
[  308.327005]  irq_thread+0x178/0x2c0
[  308.330497]  kthread+0x150/0x160
[  308.333727]  ret_from_fork+0x10/0x20

Link: https://lore.kernel.org/all/20230315110546.2518305-1-msp@baylibre.com
[mkl: apply patches 1...5 only, adjust message accordingly]
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

Trivial merge