Re: DMA operations by device when device is fake removed using PCI sysfs 'remove' interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2021-04-27 2:33 p.m., Bjorn Helgaas wrote:
On Thu, Apr 22, 2021 at 11:05:27AM -0400, Andrey Grodzovsky wrote:
Hi Bjorn, I am working on graceful device removal on PCI for our amdgppu
driver. As part of it I am triggering device remove by writing echo 1 >
/sys/bus/pci/drivers/amdgpu/xxxx:xx:xx.x/remove

Question - in case there is a DMA operation in flight while I hit the
'remove', is there a way to wait for completion of all the DMA operations of
the device being removed ? Is PCI core taking care of this
or is there an API we can use to do it in the driver's pci_remove callback ?
We are concerned with possible system memory corruptions otherwise.

As far as I am aware, the PCI core does not wait for completion of DMA
operations during remove.

The only generic way to do this that I can see would be to clear the
Bus Master Enable bit and then wait on the PCIe Device Status
Transactions Pending bit.  Obviously that would only work for PCIe,
not Conventional PCI.  There is one driver that calls
pci_wait_for_pending_transaction(), in ice_remove().

It looks like they do the opposite in ice, they first call pci_wait_for_pending_transaction and then call pci_disable_device which is the one turning off Bus mastering. Are they wrong ?

Andrey


Bjorn




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux