Re: [PATCH v3 0/3] uio: add MSI/MSI-X support to uio_pci_generic driver

From: Avi Kivity
Date: Tue Oct 06 2015 - 11:12:10 EST




On 10/06/2015 05:30 PM, Michael S. Tsirkin wrote:
On Tue, Oct 06, 2015 at 11:37:59AM +0300, Vlad Zolotarov wrote:
Bus mastering is easily enabled from the user space (taken from DPDK code):

static int
pci_uio_set_bus_master(int dev_fd)
{
uint16_t reg;
int ret;

ret = pread(dev_fd, &reg, sizeof(reg), PCI_COMMAND);
if (ret != sizeof(reg)) {
RTE_LOG(ERR, EAL,
"Cannot read command from PCI config space!\n");
return -1;
}

/* return if bus mastering is already on */
if (reg & PCI_COMMAND_MASTER)
return 0;

reg |= PCI_COMMAND_MASTER;

ret = pwrite(dev_fd, &reg, sizeof(reg), PCI_COMMAND);
if (ret != sizeof(reg)) {
RTE_LOG(ERR, EAL,
"Cannot write command to PCI config space!\n");
return -1;
}

return 0;
}

So, this is a non-issue. ;)
There might be valid reasons for DPDK to do this, e.g. if using VFIO.

DPDK does this when using vfio, and when using uio_pci_generic. All of the network cards that DPDK supports require DMA.

I'm guessing it doesn't enable MSI though, does it?

It does not enable MSI, because the main kernel driver used for interacting with the device, pci_uio_generic, does not support MSI. In some configurations, PCI INTA is not available, while MSI(X) is, hence the desire that pci_uio_generic support MSI.

While it is possible that userspace malfunctions and accidentally programs MSI incorrectly, the risk is dwarfed by the ability of userspace to program DMA incorrectly. Under normal operation userspace programs tens of millions of DMA operations per second, while it never touches the MSI BARs (it is the kernel that programs them).
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/