> -----Original Message----- > From: Hyong Youb Kim (hyonkim) <[email protected]> > Sent: Wednesday, July 17, 2019 11:26 AM > To: Nithin Kumar Dabilpuram <[email protected]>; David Marchand > <[email protected]>; Thomas Monjalon > <[email protected]>; Ferruh Yigit <[email protected]>; Bruce > Richardson <[email protected]> > Cc: Jerin Jacob Kollanukkaran <[email protected]>; John Daley (johndale) > <[email protected]>; Shahed Shaikh <[email protected]>; > [email protected] > Subject: RE: [RFC PATCH v3 2/3] eal: add mask and unmask interrupt APIs > > +rte_intr_mask(const struct rte_intr_handle *intr_handle) { > > + if (intr_handle && intr_handle->type == RTE_INTR_HANDLE_VDEV) > > + return 0; > > + > > + if (!intr_handle || intr_handle->fd < 0 || intr_handle->uio_cfg_fd < > 0) > > + return -1; > > + > > + switch (intr_handle->type){ > > + /* Both masking and disabling are same for UIO */ > > + case RTE_INTR_HANDLE_UIO: > > + if (uio_intr_disable(intr_handle)) > > + return -1; > > + break; > > + case RTE_INTR_HANDLE_UIO_INTX: > > + if (uio_intx_intr_disable(intr_handle)) > > + return -1; > > + break; > > + /* not used at this moment */ > > + case RTE_INTR_HANDLE_ALARM: > > + return -1; > > +#ifdef VFIO_PRESENT > > + case RTE_INTR_HANDLE_VFIO_MSIX: > > + case RTE_INTR_HANDLE_VFIO_MSI: > > + return 0; > > Isn't this a little confusing? It returns success, but irq is not masked.
Yes. How about changing the API to rte_intr_ack()(Acknowledge the interrupt) Or something similar? i.e replace rte_intr_unmask() with rte_intr_ack() for this use case. > As is, return code 0 means... > - igb_uio: irq is masked for INTx, MSI, MSI-X > - vfio-pci + INTx: irq is masked > - vfio-pci + MSI/MSI-X: no changes > > Masking is useful only for INTx, IMO... > > Masking MSI/MSI-X via PCI-defined mechanisms (e.g. Mask bit in MSI-X > Table) has no practical use for drivers. Handshaking/masking/unmasking is > done via device/vendor specific ways, as needed. See all those > ack/block/unblock/credit/... mechanisms used in various drivers/NICs to > control interrupts their own way. > > A long time ago in early PCIe days, the linux kernel did auto-masking for > MSI/MSI-X (i.e. mask before calling netdev irq handler). It was soon removed > as it was unnecessary overhead (expensive PIOs to NIC for every interrupt). > Windows and FreeBSD do not do auto-masking either. rte_intr_ack() can abstract FreeBSD and Windows difference.

