提交 5dd2d332 编写于 作者: J Jeff Garzik 提交者: Jeff Garzik

[netdrvr] myri10ge, ixgbe: remove broken select INTEL_IOATDMA

We cannot select INTEL_IOATDMA in Kconfig as soon as MYRI10GE or IXGBE
is enabled since the former is not available on all architectures.

Just use a Kconfig bool {IXGBE,MYRI10GE}_DCA set to =y when DCA
support can actually be built.

[myri10ge portion written and signed-off-by] Brice Goglin <brice@myri.com>
Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
上级 8fa0b315
...@@ -2410,7 +2410,6 @@ config IXGBE ...@@ -2410,7 +2410,6 @@ config IXGBE
tristate "Intel(R) 10GbE PCI Express adapters support" tristate "Intel(R) 10GbE PCI Express adapters support"
depends on PCI && INET depends on PCI && INET
select INET_LRO select INET_LRO
select INTEL_IOATDMA
---help--- ---help---
This driver supports Intel(R) 10GbE PCI Express family of This driver supports Intel(R) 10GbE PCI Express family of
adapters. For more information on how to identify your adapter, go adapters. For more information on how to identify your adapter, go
...@@ -2426,6 +2425,11 @@ config IXGBE ...@@ -2426,6 +2425,11 @@ config IXGBE
To compile this driver as a module, choose M here. The module To compile this driver as a module, choose M here. The module
will be called ixgbe. will be called ixgbe.
config IXGBE_DCA
bool
default y
depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
config IXGB config IXGB
tristate "Intel(R) PRO/10GbE support" tristate "Intel(R) PRO/10GbE support"
depends on PCI depends on PCI
...@@ -2462,7 +2466,6 @@ config MYRI10GE ...@@ -2462,7 +2466,6 @@ config MYRI10GE
select FW_LOADER select FW_LOADER
select CRC32 select CRC32
select INET_LRO select INET_LRO
select INTEL_IOATDMA
---help--- ---help---
This driver supports Myricom Myri-10G Dual Protocol interface in This driver supports Myricom Myri-10G Dual Protocol interface in
Ethernet mode. If the eeprom on your board is not recent enough, Ethernet mode. If the eeprom on your board is not recent enough,
...@@ -2474,6 +2477,11 @@ config MYRI10GE ...@@ -2474,6 +2477,11 @@ config MYRI10GE
To compile this driver as a module, choose M here. The module To compile this driver as a module, choose M here. The module
will be called myri10ge. will be called myri10ge.
config MYRI10GE_DCA
bool
default y
depends on MYRI10GE && DCA && !(MYRI10GE=y && DCA=m)
config NETXEN_NIC config NETXEN_NIC
tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC" tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC"
depends on PCI depends on PCI
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#include "ixgbe_type.h" #include "ixgbe_type.h"
#include "ixgbe_common.h" #include "ixgbe_common.h"
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
#include <linux/dca.h> #include <linux/dca.h>
#endif #endif
...@@ -136,7 +136,7 @@ struct ixgbe_ring { ...@@ -136,7 +136,7 @@ struct ixgbe_ring {
* offset associated with this ring, which is different * offset associated with this ring, which is different
* for DCE and RSS modes */ * for DCE and RSS modes */
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
/* cpu for tx queue */ /* cpu for tx queue */
int cpu; int cpu;
#endif #endif
......
...@@ -80,7 +80,7 @@ static struct pci_device_id ixgbe_pci_tbl[] = { ...@@ -80,7 +80,7 @@ static struct pci_device_id ixgbe_pci_tbl[] = {
}; };
MODULE_DEVICE_TABLE(pci, ixgbe_pci_tbl); MODULE_DEVICE_TABLE(pci, ixgbe_pci_tbl);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
static int ixgbe_notify_dca(struct notifier_block *, unsigned long event, static int ixgbe_notify_dca(struct notifier_block *, unsigned long event,
void *p); void *p);
static struct notifier_block dca_notifier = { static struct notifier_block dca_notifier = {
...@@ -296,7 +296,7 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_adapter *adapter, ...@@ -296,7 +296,7 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_adapter *adapter,
return (total_packets ? true : false); return (total_packets ? true : false);
} }
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
static void ixgbe_update_rx_dca(struct ixgbe_adapter *adapter, static void ixgbe_update_rx_dca(struct ixgbe_adapter *adapter,
struct ixgbe_ring *rx_ring) struct ixgbe_ring *rx_ring)
{ {
...@@ -383,7 +383,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data) ...@@ -383,7 +383,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
return 0; return 0;
} }
#endif /* CONFIG_DCA or CONFIG_DCA_MODULE */ #endif /* CONFIG_IXGBE_DCA */
/** /**
* ixgbe_receive_skb - Send a completed packet up the stack * ixgbe_receive_skb - Send a completed packet up the stack
* @adapter: board private structure * @adapter: board private structure
...@@ -947,7 +947,7 @@ static irqreturn_t ixgbe_msix_clean_tx(int irq, void *data) ...@@ -947,7 +947,7 @@ static irqreturn_t ixgbe_msix_clean_tx(int irq, void *data)
r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues); r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
for (i = 0; i < q_vector->txr_count; i++) { for (i = 0; i < q_vector->txr_count; i++) {
tx_ring = &(adapter->tx_ring[r_idx]); tx_ring = &(adapter->tx_ring[r_idx]);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
ixgbe_update_tx_dca(adapter, tx_ring); ixgbe_update_tx_dca(adapter, tx_ring);
#endif #endif
...@@ -1022,7 +1022,7 @@ static int ixgbe_clean_rxonly(struct napi_struct *napi, int budget) ...@@ -1022,7 +1022,7 @@ static int ixgbe_clean_rxonly(struct napi_struct *napi, int budget)
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues); r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
rx_ring = &(adapter->rx_ring[r_idx]); rx_ring = &(adapter->rx_ring[r_idx]);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
ixgbe_update_rx_dca(adapter, rx_ring); ixgbe_update_rx_dca(adapter, rx_ring);
#endif #endif
...@@ -1066,7 +1066,7 @@ static int ixgbe_clean_rxonly_many(struct napi_struct *napi, int budget) ...@@ -1066,7 +1066,7 @@ static int ixgbe_clean_rxonly_many(struct napi_struct *napi, int budget)
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues); r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
for (i = 0; i < q_vector->rxr_count; i++) { for (i = 0; i < q_vector->rxr_count; i++) {
rx_ring = &(adapter->rx_ring[r_idx]); rx_ring = &(adapter->rx_ring[r_idx]);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
ixgbe_update_rx_dca(adapter, rx_ring); ixgbe_update_rx_dca(adapter, rx_ring);
#endif #endif
...@@ -2155,7 +2155,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter) ...@@ -2155,7 +2155,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
netif_carrier_off(netdev); netif_carrier_off(netdev);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) { if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED; adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
dca_remove_requester(&adapter->pdev->dev); dca_remove_requester(&adapter->pdev->dev);
...@@ -2167,7 +2167,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter) ...@@ -2167,7 +2167,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
ixgbe_clean_all_tx_rings(adapter); ixgbe_clean_all_tx_rings(adapter);
ixgbe_clean_all_rx_rings(adapter); ixgbe_clean_all_rx_rings(adapter);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
/* since we reset the hardware DCA settings were cleared */ /* since we reset the hardware DCA settings were cleared */
if (dca_add_requester(&adapter->pdev->dev) == 0) { if (dca_add_requester(&adapter->pdev->dev) == 0) {
adapter->flags |= IXGBE_FLAG_DCA_ENABLED; adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
...@@ -2193,7 +2193,7 @@ static int ixgbe_poll(struct napi_struct *napi, int budget) ...@@ -2193,7 +2193,7 @@ static int ixgbe_poll(struct napi_struct *napi, int budget)
struct ixgbe_adapter *adapter = q_vector->adapter; struct ixgbe_adapter *adapter = q_vector->adapter;
int tx_cleaned, work_done = 0; int tx_cleaned, work_done = 0;
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) { if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
ixgbe_update_tx_dca(adapter, adapter->tx_ring); ixgbe_update_tx_dca(adapter, adapter->tx_ring);
ixgbe_update_rx_dca(adapter, adapter->rx_ring); ixgbe_update_rx_dca(adapter, adapter->rx_ring);
...@@ -3922,7 +3922,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev, ...@@ -3922,7 +3922,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
if (err) if (err)
goto err_register; goto err_register;
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (dca_add_requester(&pdev->dev) == 0) { if (dca_add_requester(&pdev->dev) == 0) {
adapter->flags |= IXGBE_FLAG_DCA_ENABLED; adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
/* always use CB2 mode, difference is masked /* always use CB2 mode, difference is masked
...@@ -3972,7 +3972,7 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev) ...@@ -3972,7 +3972,7 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
flush_scheduled_work(); flush_scheduled_work();
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) { if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED; adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
dca_remove_requester(&pdev->dev); dca_remove_requester(&pdev->dev);
...@@ -4105,10 +4105,10 @@ static int __init ixgbe_init_module(void) ...@@ -4105,10 +4105,10 @@ static int __init ixgbe_init_module(void)
printk(KERN_INFO "%s: %s\n", ixgbe_driver_name, ixgbe_copyright); printk(KERN_INFO "%s: %s\n", ixgbe_driver_name, ixgbe_copyright);
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
dca_register_notify(&dca_notifier); dca_register_notify(&dca_notifier);
#endif #endif
ret = pci_register_driver(&ixgbe_driver); ret = pci_register_driver(&ixgbe_driver);
return ret; return ret;
} }
...@@ -4123,13 +4123,13 @@ module_init(ixgbe_init_module); ...@@ -4123,13 +4123,13 @@ module_init(ixgbe_init_module);
**/ **/
static void __exit ixgbe_exit_module(void) static void __exit ixgbe_exit_module(void)
{ {
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
dca_unregister_notify(&dca_notifier); dca_unregister_notify(&dca_notifier);
#endif #endif
pci_unregister_driver(&ixgbe_driver); pci_unregister_driver(&ixgbe_driver);
} }
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE) #ifdef CONFIG_IXGBE_DCA
static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event, static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
void *p) void *p)
{ {
...@@ -4140,7 +4140,7 @@ static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event, ...@@ -4140,7 +4140,7 @@ static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
return ret_val ? NOTIFY_BAD : NOTIFY_DONE; return ret_val ? NOTIFY_BAD : NOTIFY_DONE;
} }
#endif /* CONFIG_DCA or CONFIG_DCA_MODULE */ #endif /* CONFIG_IXGBE_DCA */
module_exit(ixgbe_exit_module); module_exit(ixgbe_exit_module);
......
...@@ -188,7 +188,7 @@ struct myri10ge_slice_state { ...@@ -188,7 +188,7 @@ struct myri10ge_slice_state {
dma_addr_t fw_stats_bus; dma_addr_t fw_stats_bus;
int watchdog_tx_done; int watchdog_tx_done;
int watchdog_tx_req; int watchdog_tx_req;
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
int cached_dca_tag; int cached_dca_tag;
int cpu; int cpu;
__be32 __iomem *dca_tag; __be32 __iomem *dca_tag;
...@@ -220,7 +220,7 @@ struct myri10ge_priv { ...@@ -220,7 +220,7 @@ struct myri10ge_priv {
int msi_enabled; int msi_enabled;
int msix_enabled; int msix_enabled;
struct msix_entry *msix_vectors; struct msix_entry *msix_vectors;
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
int dca_enabled; int dca_enabled;
#endif #endif
u32 link_state; u32 link_state;
...@@ -902,7 +902,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp) ...@@ -902,7 +902,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
struct myri10ge_slice_state *ss; struct myri10ge_slice_state *ss;
int i, status; int i, status;
size_t bytes; size_t bytes;
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
unsigned long dca_tag_off; unsigned long dca_tag_off;
#endif #endif
...@@ -1012,7 +1012,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp) ...@@ -1012,7 +1012,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
} }
put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr); put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr);
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
status = myri10ge_send_cmd(mgp, MXGEFW_CMD_GET_DCA_OFFSET, &cmd, 0); status = myri10ge_send_cmd(mgp, MXGEFW_CMD_GET_DCA_OFFSET, &cmd, 0);
dca_tag_off = cmd.data0; dca_tag_off = cmd.data0;
for (i = 0; i < mgp->num_slices; i++) { for (i = 0; i < mgp->num_slices; i++) {
...@@ -1051,7 +1051,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp) ...@@ -1051,7 +1051,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
return status; return status;
} }
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
static void static void
myri10ge_write_dca(struct myri10ge_slice_state *ss, int cpu, int tag) myri10ge_write_dca(struct myri10ge_slice_state *ss, int cpu, int tag)
{ {
...@@ -1505,7 +1505,7 @@ static int myri10ge_poll(struct napi_struct *napi, int budget) ...@@ -1505,7 +1505,7 @@ static int myri10ge_poll(struct napi_struct *napi, int budget)
struct net_device *netdev = ss->mgp->dev; struct net_device *netdev = ss->mgp->dev;
int work_done; int work_done;
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
if (ss->mgp->dca_enabled) if (ss->mgp->dca_enabled)
myri10ge_update_dca(ss); myri10ge_update_dca(ss);
#endif #endif
...@@ -1736,7 +1736,7 @@ static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = { ...@@ -1736,7 +1736,7 @@ static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = {
"tx_boundary", "WC", "irq", "MSI", "MSIX", "tx_boundary", "WC", "irq", "MSI", "MSIX",
"read_dma_bw_MBs", "write_dma_bw_MBs", "read_write_dma_bw_MBs", "read_dma_bw_MBs", "write_dma_bw_MBs", "read_write_dma_bw_MBs",
"serial_number", "watchdog_resets", "serial_number", "watchdog_resets",
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
"dca_capable_firmware", "dca_device_present", "dca_capable_firmware", "dca_device_present",
#endif #endif
"link_changes", "link_up", "dropped_link_overflow", "link_changes", "link_up", "dropped_link_overflow",
...@@ -1815,7 +1815,7 @@ myri10ge_get_ethtool_stats(struct net_device *netdev, ...@@ -1815,7 +1815,7 @@ myri10ge_get_ethtool_stats(struct net_device *netdev,
data[i++] = (unsigned int)mgp->read_write_dma; data[i++] = (unsigned int)mgp->read_write_dma;
data[i++] = (unsigned int)mgp->serial_number; data[i++] = (unsigned int)mgp->serial_number;
data[i++] = (unsigned int)mgp->watchdog_resets; data[i++] = (unsigned int)mgp->watchdog_resets;
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
data[i++] = (unsigned int)(mgp->ss[0].dca_tag != NULL); data[i++] = (unsigned int)(mgp->ss[0].dca_tag != NULL);
data[i++] = (unsigned int)(mgp->dca_enabled); data[i++] = (unsigned int)(mgp->dca_enabled);
#endif #endif
...@@ -3844,7 +3844,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -3844,7 +3844,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
dev_err(&pdev->dev, "failed reset\n"); dev_err(&pdev->dev, "failed reset\n");
goto abort_with_slices; goto abort_with_slices;
} }
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
myri10ge_setup_dca(mgp); myri10ge_setup_dca(mgp);
#endif #endif
pci_set_drvdata(pdev, mgp); pci_set_drvdata(pdev, mgp);
...@@ -3948,7 +3948,7 @@ static void myri10ge_remove(struct pci_dev *pdev) ...@@ -3948,7 +3948,7 @@ static void myri10ge_remove(struct pci_dev *pdev)
netdev = mgp->dev; netdev = mgp->dev;
unregister_netdev(netdev); unregister_netdev(netdev);
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
myri10ge_teardown_dca(mgp); myri10ge_teardown_dca(mgp);
#endif #endif
myri10ge_dummy_rdma(mgp, 0); myri10ge_dummy_rdma(mgp, 0);
...@@ -3993,7 +3993,7 @@ static struct pci_driver myri10ge_driver = { ...@@ -3993,7 +3993,7 @@ static struct pci_driver myri10ge_driver = {
#endif #endif
}; };
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
static int static int
myri10ge_notify_dca(struct notifier_block *nb, unsigned long event, void *p) myri10ge_notify_dca(struct notifier_block *nb, unsigned long event, void *p)
{ {
...@@ -4024,7 +4024,7 @@ static __init int myri10ge_init_module(void) ...@@ -4024,7 +4024,7 @@ static __init int myri10ge_init_module(void)
myri10ge_driver.name, myri10ge_rss_hash); myri10ge_driver.name, myri10ge_rss_hash);
myri10ge_rss_hash = MXGEFW_RSS_HASH_TYPE_SRC_PORT; myri10ge_rss_hash = MXGEFW_RSS_HASH_TYPE_SRC_PORT;
} }
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
dca_register_notify(&myri10ge_dca_notifier); dca_register_notify(&myri10ge_dca_notifier);
#endif #endif
if (myri10ge_max_slices > MYRI10GE_MAX_SLICES) if (myri10ge_max_slices > MYRI10GE_MAX_SLICES)
...@@ -4037,7 +4037,7 @@ module_init(myri10ge_init_module); ...@@ -4037,7 +4037,7 @@ module_init(myri10ge_init_module);
static __exit void myri10ge_cleanup_module(void) static __exit void myri10ge_cleanup_module(void)
{ {
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE) #ifdef CONFIG_MYRI10GE_DCA
dca_unregister_notify(&myri10ge_dca_notifier); dca_unregister_notify(&myri10ge_dca_notifier);
#endif #endif
pci_unregister_driver(&myri10ge_driver); pci_unregister_driver(&myri10ge_driver);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册