mirror of
https://github.com/torvalds/linux.git
synced 2026-08-08 08:26:18 +02:00
The following splat has been observed on a SAMA5D27 platform using atmel_serial: BUG: sleeping function called from invalid context at kernel/irq/manage.c:738 in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 27, name: kworker/u5:0 preempt_count: 1, expected: 0 INFO: lockdep is turned off. irq event stamp: 0 hardirqs last enabled at (0): [<00000000>] 0x0 hardirqs last disabled at (0): [<c01588f0>] copy_process+0x1c4c/0x7bec softirqs last enabled at (0): [<c0158944>] copy_process+0x1ca0/0x7bec softirqs last disabled at (0): [<00000000>] 0x0 CPU: 0 UID: 0 PID: 27 Comm: kworker/u5:0 Not tainted 6.13.0-rc7+ #74 Hardware name: Atmel SAMA5 Workqueue: hci0 hci_power_on [bluetooth] Call trace: unwind_backtrace from show_stack+0x18/0x1c show_stack from dump_stack_lvl+0x44/0x70 dump_stack_lvl from __might_resched+0x38c/0x598 __might_resched from disable_irq+0x1c/0x48 disable_irq from mctrl_gpio_disable_ms+0x74/0xc0 mctrl_gpio_disable_ms from atmel_disable_ms.part.0+0x80/0x1f4 atmel_disable_ms.part.0 from atmel_set_termios+0x764/0x11e8 atmel_set_termios from uart_change_line_settings+0x15c/0x994 uart_change_line_settings from uart_set_termios+0x2b0/0x668 uart_set_termios from tty_set_termios+0x600/0x8ec tty_set_termios from ttyport_set_flow_control+0x188/0x1e0 ttyport_set_flow_control from wilc_setup+0xd0/0x524 [hci_wilc] wilc_setup [hci_wilc] from hci_dev_open_sync+0x330/0x203c [bluetooth] hci_dev_open_sync [bluetooth] from hci_dev_do_open+0x40/0xb0 [bluetooth] hci_dev_do_open [bluetooth] from hci_power_on+0x12c/0x664 [bluetooth] hci_power_on [bluetooth] from process_one_work+0x998/0x1a38 process_one_work from worker_thread+0x6e0/0xfb4 worker_thread from kthread+0x3d4/0x484 kthread from ret_from_fork+0x14/0x28 This warning is emitted when trying to toggle, at the highest level, some flow control (with serdev_device_set_flow_control) in a device driver. At the lowest level, the atmel_serial driver is using serial_mctrl_gpio lib to enable/disable the corresponding IRQs accordingly. The warning emitted by CONFIG_DEBUG_ATOMIC_SLEEP is due to disable_irq (called in mctrl_gpio_disable_ms) being possibly called in some atomic context (some tty drivers perform modem lines configuration in regions protected by port lock). Split mctrl_gpio_disable_ms into two differents APIs, a non-blocking one and a blocking one. Replace mctrl_gpio_disable_ms calls with the relevant version depending on whether the call is protected by some port lock. Suggested-by: Jiri Slaby <jirislaby@kernel.org> Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com> Acked-by: Richard Genoud <richard.genoud@bootlin.com> Link: https://lore.kernel.org/r/20250217-atomic_sleep_mctrl_serial_gpio-v3-1-59324b313eef@bootlin.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
||
|---|---|---|
| .. | ||
| 80211 | ||
| acpi | ||
| backlight | ||
| crypto | ||
| cxl | ||
| dmaengine | ||
| driver-model | ||
| early-userspace | ||
| firmware | ||
| fpga | ||
| gpio | ||
| hte | ||
| i3c | ||
| iio | ||
| md | ||
| media | ||
| mei | ||
| memory-devices | ||
| mmc | ||
| mtd | ||
| nfc | ||
| nvdimm | ||
| pci | ||
| phy | ||
| pldmfw | ||
| pm | ||
| rapidio | ||
| serial | ||
| soundwire | ||
| surface_aggregator | ||
| thermal | ||
| tty | ||
| usb | ||
| virtio | ||
| xilinx | ||
| aperture.rst | ||
| auxiliary_bus.rst | ||
| basics.rst | ||
| clk.rst | ||
| component.rst | ||
| connector.rst | ||
| console.rst | ||
| devfreq.rst | ||
| device_link.rst | ||
| device-io.rst | ||
| dma-buf.rst | ||
| dpll.rst | ||
| edac.rst | ||
| eisa.rst | ||
| extcon.rst | ||
| firewire.rst | ||
| frame-buffer.rst | ||
| generic-counter.rst | ||
| hsi.rst | ||
| i2c.rst | ||
| index.rst | ||
| infiniband.rst | ||
| infrastructure.rst | ||
| input.rst | ||
| interconnect.rst | ||
| io_ordering.rst | ||
| io-mapping.rst | ||
| ioctl.rst | ||
| ipmb.rst | ||
| ipmi.rst | ||
| isa.rst | ||
| libata.rst | ||
| mailbox.rst | ||
| men-chameleon-bus.rst | ||
| message-based.rst | ||
| misc_devices.rst | ||
| miscellaneous.rst | ||
| mtdnand.rst | ||
| ntb.rst | ||
| nvmem.rst | ||
| parport-lowlevel.rst | ||
| pin-control.rst | ||
| pps.rst | ||
| ptp.rst | ||
| pwm.rst | ||
| pwrseq.rst | ||
| regulator.rst | ||
| reset.rst | ||
| rfkill.rst | ||
| s390-drivers.rst | ||
| scsi.rst | ||
| slimbus.rst | ||
| sm501.rst | ||
| spi.rst | ||
| switchtec.rst | ||
| sync_file.rst | ||
| target.rst | ||
| tee.rst | ||
| uio-howto.rst | ||
| vfio-mediated-device.rst | ||
| vfio-pci-device-specific-driver-acceptance.rst | ||
| vfio.rst | ||
| vme.rst | ||
| w1.rst | ||
| wbrf.rst | ||
| wmi.rst | ||
| xillybus.rst | ||
| zorro.rst | ||