aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel
diff options
context:
space:
mode:
authorJeff Kirsher <jeffrey.t.kirsher@intel.com>2015-04-10 22:14:31 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2015-04-14 18:08:37 -0400
commit8b4a98c7fa0344c08c34657e2bd2cc2293a67238 (patch)
tree7c30afa1a5544208c2b30f7113b03a800bfde665 /drivers/net/ethernet/intel
parent4c16ceae8daa13c99ca1b7b46d372678f5024a6f (diff)
fm10k: Add netconsole support
This change adds a function called "fm10k_netpoll" that's used to define "ndo_poll_controller" in "fm10k_netdev_ops". This is required to enable support for "netconsole" in fm10k. Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Ngai-Mint Kwan <ngai-mint.kwan@intel.com> Acked-by: Matthew Vick <matthew.vick@intel.com> Tested-by: Krishneil Singh <krishneil.k.singh@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel')
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k.h3
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k_netdev.c3
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k_pci.c22
3 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index 65e70016abfb..b45f7978b9e6 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -457,6 +457,9 @@ void fm10k_down(struct fm10k_intfc *interface);
457void fm10k_update_stats(struct fm10k_intfc *interface); 457void fm10k_update_stats(struct fm10k_intfc *interface);
458void fm10k_service_event_schedule(struct fm10k_intfc *interface); 458void fm10k_service_event_schedule(struct fm10k_intfc *interface);
459void fm10k_update_rx_drop_en(struct fm10k_intfc *interface); 459void fm10k_update_rx_drop_en(struct fm10k_intfc *interface);
460#ifdef CONFIG_NET_POLL_CONTROLLER
461void fm10k_netpoll(struct net_device *netdev);
462#endif
460 463
461/* Netdev */ 464/* Netdev */
462struct net_device *fm10k_alloc_netdev(void); 465struct net_device *fm10k_alloc_netdev(void);
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
index a7db5e20e1f7..702d84547ba1 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
@@ -1382,6 +1382,9 @@ static const struct net_device_ops fm10k_netdev_ops = {
1382 .ndo_do_ioctl = fm10k_ioctl, 1382 .ndo_do_ioctl = fm10k_ioctl,
1383 .ndo_dfwd_add_station = fm10k_dfwd_add_station, 1383 .ndo_dfwd_add_station = fm10k_dfwd_add_station,
1384 .ndo_dfwd_del_station = fm10k_dfwd_del_station, 1384 .ndo_dfwd_del_station = fm10k_dfwd_del_station,
1385#ifdef CONFIG_NET_POLL_CONTROLLER
1386 .ndo_poll_controller = fm10k_netpoll,
1387#endif
1385 .ndo_features_check = fm10k_features_check, 1388 .ndo_features_check = fm10k_features_check,
1386}; 1389};
1387 1390
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
index 6fc996579587..90d6faefb8bd 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
@@ -839,6 +839,28 @@ static irqreturn_t fm10k_msix_mbx_vf(int irq, void *data)
839 return IRQ_HANDLED; 839 return IRQ_HANDLED;
840} 840}
841 841
842#ifdef CONFIG_NET_POLL_CONTROLLER
843/**
844 * fm10k_netpoll - A Polling 'interrupt' handler
845 * @netdev: network interface device structure
846 *
847 * This is used by netconsole to send skbs without having to re-enable
848 * interrupts. It's not called while the normal interrupt routine is executing.
849 **/
850void fm10k_netpoll(struct net_device *netdev)
851{
852 struct fm10k_intfc *interface = netdev_priv(netdev);
853 int i;
854
855 /* if interface is down do nothing */
856 if (test_bit(__FM10K_DOWN, &interface->state))
857 return;
858
859 for (i = 0; i < interface->num_q_vectors; i++)
860 fm10k_msix_clean_rings(0, interface->q_vector[i]);
861}
862
863#endif
842#define FM10K_ERR_MSG(type) case (type): error = #type; break 864#define FM10K_ERR_MSG(type) case (type): error = #type; break
843static void fm10k_print_fault(struct fm10k_intfc *interface, int type, 865static void fm10k_print_fault(struct fm10k_intfc *interface, int type,
844 struct fm10k_fault *fault) 866 struct fm10k_fault *fault)