[PATCH] s2io: netpoll support
This adds netpoll support for things like netconsole/kgdboe to the s2io 10GbE driver. Signed-off-by: Brian Haley <brian.haley@hp.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
4b2d9cf009
commit
612eff0e37
1 changed files with 48 additions and 0 deletions
|
@ -2626,6 +2626,50 @@ static int s2io_poll(struct net_device *dev, int *budget)
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* s2io_netpoll - Rx interrupt service handler for netpoll support
|
||||
* @dev : pointer to the device structure.
|
||||
* Description:
|
||||
* Polling 'interrupt' - used by things like netconsole to send skbs
|
||||
* without having to re-enable interrupts. It's not called while
|
||||
* the interrupt routine is executing.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
static void s2io_netpoll(struct net_device *dev)
|
||||
{
|
||||
nic_t *nic = dev->priv;
|
||||
mac_info_t *mac_control;
|
||||
struct config_param *config;
|
||||
XENA_dev_config_t __iomem *bar0 = nic->bar0;
|
||||
u64 val64;
|
||||
int i;
|
||||
|
||||
disable_irq(dev->irq);
|
||||
|
||||
atomic_inc(&nic->isr_cnt);
|
||||
mac_control = &nic->mac_control;
|
||||
config = &nic->config;
|
||||
|
||||
val64 = readq(&bar0->rx_traffic_int);
|
||||
writeq(val64, &bar0->rx_traffic_int);
|
||||
|
||||
for (i = 0; i < config->rx_ring_num; i++)
|
||||
rx_intr_handler(&mac_control->rings[i]);
|
||||
|
||||
for (i = 0; i < config->rx_ring_num; i++) {
|
||||
if (fill_rx_buffers(nic, i) == -ENOMEM) {
|
||||
DBG_PRINT(ERR_DBG, "%s:Out of memory", dev->name);
|
||||
DBG_PRINT(ERR_DBG, " in Rx Netpoll!!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
atomic_dec(&nic->isr_cnt);
|
||||
enable_irq(dev->irq);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* rx_intr_handler - Rx interrupt handler
|
||||
* @nic: device private variable.
|
||||
|
@ -6967,6 +7011,10 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
|
|||
dev->weight = 32;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = s2io_netpoll;
|
||||
#endif
|
||||
|
||||
dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
|
||||
if (sp->high_dma_flag == TRUE)
|
||||
dev->features |= NETIF_F_HIGHDMA;
|
||||
|
|
Loading…
Reference in a new issue