diff options
author | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2015-04-10 22:14:31 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2015-04-14 18:08:37 -0400 |
commit | 8b4a98c7fa0344c08c34657e2bd2cc2293a67238 (patch) | |
tree | 7c30afa1a5544208c2b30f7113b03a800bfde665 /drivers/net/ethernet/intel | |
parent | 4c16ceae8daa13c99ca1b7b46d372678f5024a6f (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.h | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/fm10k/fm10k_netdev.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/fm10k/fm10k_pci.c | 22 |
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); | |||
457 | void fm10k_update_stats(struct fm10k_intfc *interface); | 457 | void fm10k_update_stats(struct fm10k_intfc *interface); |
458 | void fm10k_service_event_schedule(struct fm10k_intfc *interface); | 458 | void fm10k_service_event_schedule(struct fm10k_intfc *interface); |
459 | void fm10k_update_rx_drop_en(struct fm10k_intfc *interface); | 459 | void fm10k_update_rx_drop_en(struct fm10k_intfc *interface); |
460 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
461 | void fm10k_netpoll(struct net_device *netdev); | ||
462 | #endif | ||
460 | 463 | ||
461 | /* Netdev */ | 464 | /* Netdev */ |
462 | struct net_device *fm10k_alloc_netdev(void); | 465 | struct 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 | **/ | ||
850 | void 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 |
843 | static void fm10k_print_fault(struct fm10k_intfc *interface, int type, | 865 | static void fm10k_print_fault(struct fm10k_intfc *interface, int type, |
844 | struct fm10k_fault *fault) | 866 | struct fm10k_fault *fault) |