net/enic: enable link check interrupt
Signed-off-by: Nelson Escobar <neescoba@cisco.com> Reviewed-by: John Daley <johndale@cisco.com>
This commit is contained in:
parent
cf8d9826b7
commit
53fa8cc0d5
@ -76,7 +76,8 @@ Configuration information
|
||||
|
||||
Only one interrupt per vNIC interface should be configured in the UCS
|
||||
manager regardless of the number receive/transmit queues. The ENIC PMD
|
||||
uses this interrupt to get information about errors in the fast path.
|
||||
uses this interrupt to get information about link status and errors
|
||||
in the fast path.
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
|
@ -5,6 +5,7 @@
|
||||
;
|
||||
[Features]
|
||||
Link status = Y
|
||||
Link status event = Y
|
||||
Queue start/stop = Y
|
||||
MTU update = P
|
||||
Jumbo frame = Y
|
||||
|
@ -635,7 +635,7 @@ static int eth_enicpmd_dev_init(struct rte_eth_dev *eth_dev)
|
||||
static struct eth_driver rte_enic_pmd = {
|
||||
.pci_drv = {
|
||||
.id_table = pci_id_enic_map,
|
||||
.drv_flags = RTE_PCI_DRV_NEED_MAPPING,
|
||||
.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
|
||||
.probe = rte_eth_dev_pci_probe,
|
||||
.remove = rte_eth_dev_pci_remove,
|
||||
},
|
||||
|
@ -430,10 +430,13 @@ static void
|
||||
enic_intr_handler(__rte_unused struct rte_intr_handle *handle,
|
||||
void *arg)
|
||||
{
|
||||
struct enic *enic = pmd_priv((struct rte_eth_dev *)arg);
|
||||
struct rte_eth_dev *dev = (struct rte_eth_dev *)arg;
|
||||
struct enic *enic = pmd_priv(dev);
|
||||
|
||||
vnic_intr_return_all_credits(&enic->intr);
|
||||
|
||||
enic_link_update(enic);
|
||||
_rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC);
|
||||
enic_log_q_error(enic);
|
||||
}
|
||||
|
||||
@ -446,6 +449,13 @@ int enic_enable(struct enic *enic)
|
||||
eth_dev->data->dev_link.link_speed = vnic_dev_port_speed(enic->vdev);
|
||||
eth_dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX;
|
||||
|
||||
/* vnic notification of link status has already been turned on in
|
||||
* enic_dev_init() which is called during probe time. Here we are
|
||||
* just turning on interrupt vector 0 if needed.
|
||||
*/
|
||||
if (eth_dev->data->dev_conf.intr_conf.lsc)
|
||||
vnic_dev_notify_set(enic->vdev, 0);
|
||||
|
||||
if (enic_clsf_init(enic))
|
||||
dev_warning(enic, "Init of hash table for clsf failed."\
|
||||
"Flow director feature will not work\n");
|
||||
@ -837,6 +847,13 @@ int enic_disable(struct enic *enic)
|
||||
}
|
||||
}
|
||||
|
||||
/* If we were using interrupts, set the interrupt vector to -1
|
||||
* to disable interrupts. We are not disabling link notifcations,
|
||||
* though, as we want the polling of link status to continue working.
|
||||
*/
|
||||
if (enic->rte_dev->data->dev_conf.intr_conf.lsc)
|
||||
vnic_dev_notify_set(enic->vdev, -1);
|
||||
|
||||
vnic_dev_set_reset_flag(enic->vdev, 1);
|
||||
|
||||
for (i = 0; i < enic->wq_count; i++)
|
||||
|
Loading…
Reference in New Issue
Block a user