[RTnet-developers] [PATCH 6/6] e1000e: enable MSI again.
Brought to you by:
bet-frogger,
kiszka
From: Arnout V. (Essensium/Mind) <ar...@mi...> - 2011-10-06 20:37:22
|
From: "Arnout Vandecappelle (Essensium/Mind)" <ar...@mi...> e1000_test_msi(), which is a workaround for malfunctioning PCIe chipsets, is not included. It is assumed the IntMode module parameter will be used if required. Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <ar...@mi...> --- drivers/experimental/e1000e/netdev.c | 35 ++++++++++++++++++++++++++------- drivers/experimental/e1000e/param.c | 4 +- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/drivers/experimental/e1000e/netdev.c b/drivers/experimental/e1000e/netdev.c index d005956..7bc606b 100644 --- a/drivers/experimental/e1000e/netdev.c +++ b/drivers/experimental/e1000e/netdev.c @@ -1419,14 +1419,16 @@ static void e1000_configure_msix(struct e1000_adapter *adapter) ew32(CTRL_EXT, ctrl_ext); e1e_flush(); } +#endif void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter) { - if (adapter->msix_entries) { - pci_disable_msix(adapter->pdev); - kfree(adapter->msix_entries); - adapter->msix_entries = NULL; - } else if (adapter->flags & FLAG_MSI_ENABLED) { +// if (adapter->msix_entries) { +// pci_disable_msix(adapter->pdev); +// kfree(adapter->msix_entries); +// adapter->msix_entries = NULL; +// } else + if (adapter->flags & FLAG_MSI_ENABLED) { pci_disable_msi(adapter->pdev); adapter->flags &= ~FLAG_MSI_ENABLED; } @@ -1442,11 +1444,12 @@ void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter) **/ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) { - int err; - int numvecs, i; +// int err; +// int numvecs, i; switch (adapter->int_mode) { +#ifdef DISABLED_FOR_RTNET case E1000E_INT_MODE_MSIX: if (adapter->flags & FLAG_HAS_MSIX) { numvecs = 3; /* RxQ0, TxQ0 and other */ @@ -1470,6 +1473,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) } adapter->int_mode = E1000E_INT_MODE_MSI; /* Fall through */ +#endif case E1000E_INT_MODE_MSI: if (!pci_enable_msi(adapter->pdev)) { adapter->flags |= FLAG_MSI_ENABLED; @@ -1487,6 +1491,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter) return; } +#ifdef DISABLED_FOR_RTNET /** * e1000_request_msix - Initialize MSI-X interrupts * @@ -1549,6 +1554,16 @@ static int e1000_request_irq(struct e1000_adapter *adapter) rt_stack_connect(netdev, &STACK_manager); + if (adapter->flags & FLAG_MSI_ENABLED) { + err = rtdm_irq_request(&adapter->irq_handle, adapter->pdev->irq, + &e1000_intr, 0, netdev->name, netdev); + if (!err) + return err; + + /* fall back to legacy interrupt */ + e1000e_reset_interrupt_capability(adapter); + adapter->int_mode = E1000E_INT_MODE_LEGACY; + } err = rtdm_irq_request(&adapter->irq_handle, adapter->pdev->irq, &e1000_intr, RTDM_IRQTYPE_SHARED, netdev->name, netdev); if (err) @@ -2884,6 +2899,8 @@ static int __devinit e1000_sw_init(struct e1000_adapter *adapter) adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; + e1000e_set_interrupt_capability(adapter); + if (rtskb_pool_init(&adapter->skb_pool, 16) < 16) { rtskb_pool_release(&adapter->skb_pool); @@ -4393,7 +4410,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake) e1000e_down(adapter); e1000_free_irq(adapter); } -// e1000e_reset_interrupt_capability(adapter); + e1000e_reset_interrupt_capability(adapter); retval = pci_save_state(pdev); if (retval) @@ -5186,6 +5203,8 @@ static void __devexit e1000_remove(struct pci_dev *pdev) */ e1000_release_hw_control(adapter); + e1000e_reset_interrupt_capability(adapter); + rt_unregister_rtnetdev(netdev); if (!e1000_check_reset_block(&adapter->hw)) diff --git a/drivers/experimental/e1000e/param.c b/drivers/experimental/e1000e/param.c index a57ddb8..09d5e60 100644 --- a/drivers/experimental/e1000e/param.c +++ b/drivers/experimental/e1000e/param.c @@ -424,8 +424,8 @@ void __devinit e1000e_check_options(struct e1000_adapter *adapter) struct e1000_option opt = { .type = range_option, .name = "Interrupt Mode", - .err = "defaulting to 2 (MSI-X)", - .def = E1000E_INT_MODE_LEGACY, //E1000E_INT_MODE_MSIX, + .err = "defaulting to 1 (MSI)", + .def = E1000E_INT_MODE_MSI, .arg = { .r = { .min = MIN_INTMODE, .max = MAX_INTMODE } } }; -- 1.7.6.3 |