On Fri, 25 Feb 2022 at 21:23, Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> wrote: > > Hi, > > While working with the PCI endpoint subsystem, I stumbled upon the sleeping > in atomic context bug during CORE_INIT phase. The issue seems to be due to the > usage of "epc lock" (mutex) in functions such as set_msi, set_msix, > write_header, etc... > > These functions are supposed to be used in the atomic notifier chain by the > CORE_INIT notifier. While using the lock is necessary in these functions as > pci_epc_create() would've been called, I see two possible workarounds: > > 1. Using non-atomic notifier chains such as blocking or raw. > 2. Modifying the EPF drivers to use workqueue in CORE_INIT notifier chain. But > this has the implication of missing the workqueue execution before hitting other > PCI events as there might be a delay in scheduling the work item. Just a note: using workqueue wouldn't help if one has to process link down events. The driver would expect that after dispatching the link down event it can disable the hardware, thus making worker access disabled hw instance. -- With best wishes Dmitry