diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-12-08 14:08:33 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-12-11 09:51:07 -0500 |
commit | 7fe26a60e08f38c797851fb3b444d753af616112 (patch) | |
tree | d112dd98b9db72805e57c157ac670f74cd41ad0e /drivers/net/chelsio/cxgb2.c | |
parent | 0f0d84e52cb2a6e0b1d101484a92121410135da1 (diff) |
[PATCH] chelsio: working NAPI
This driver tries to enable/disable NAPI at runtime, but
does so in an unsafe manner, and the NAPI interrupt handling is
a mess. Replace it with a compile time selected NAPI implementation.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/chelsio/cxgb2.c')
-rw-r--r-- | drivers/net/chelsio/cxgb2.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/net/chelsio/cxgb2.c b/drivers/net/chelsio/cxgb2.c index de48eadddbc4..fd5d821f3f2a 100644 --- a/drivers/net/chelsio/cxgb2.c +++ b/drivers/net/chelsio/cxgb2.c | |||
@@ -220,9 +220,8 @@ static int cxgb_up(struct adapter *adapter) | |||
220 | 220 | ||
221 | t1_interrupts_clear(adapter); | 221 | t1_interrupts_clear(adapter); |
222 | 222 | ||
223 | adapter->params.has_msi = !disable_msi && pci_enable_msi(adapter->pdev) == 0; | 223 | adapter->params.has_msi = !disable_msi && !pci_enable_msi(adapter->pdev); |
224 | err = request_irq(adapter->pdev->irq, | 224 | err = request_irq(adapter->pdev->irq, t1_interrupt, |
225 | t1_select_intr_handler(adapter), | ||
226 | adapter->params.has_msi ? 0 : IRQF_SHARED, | 225 | adapter->params.has_msi ? 0 : IRQF_SHARED, |
227 | adapter->name, adapter); | 226 | adapter->name, adapter); |
228 | if (err) { | 227 | if (err) { |
@@ -764,18 +763,7 @@ static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c) | |||
764 | { | 763 | { |
765 | struct adapter *adapter = dev->priv; | 764 | struct adapter *adapter = dev->priv; |
766 | 765 | ||
767 | /* | 766 | adapter->params.sge.rx_coalesce_usecs = c->rx_coalesce_usecs; |
768 | * If RX coalescing is requested we use NAPI, otherwise interrupts. | ||
769 | * This choice can be made only when all ports and the TOE are off. | ||
770 | */ | ||
771 | if (adapter->open_device_map == 0) | ||
772 | adapter->params.sge.polling = c->use_adaptive_rx_coalesce; | ||
773 | |||
774 | if (adapter->params.sge.polling) { | ||
775 | adapter->params.sge.rx_coalesce_usecs = 0; | ||
776 | } else { | ||
777 | adapter->params.sge.rx_coalesce_usecs = c->rx_coalesce_usecs; | ||
778 | } | ||
779 | adapter->params.sge.coalesce_enable = c->use_adaptive_rx_coalesce; | 767 | adapter->params.sge.coalesce_enable = c->use_adaptive_rx_coalesce; |
780 | adapter->params.sge.sample_interval_usecs = c->rate_sample_interval; | 768 | adapter->params.sge.sample_interval_usecs = c->rate_sample_interval; |
781 | t1_sge_set_coalesce_params(adapter->sge, &adapter->params.sge); | 769 | t1_sge_set_coalesce_params(adapter->sge, &adapter->params.sge); |
@@ -944,7 +932,7 @@ static void t1_netpoll(struct net_device *dev) | |||
944 | struct adapter *adapter = dev->priv; | 932 | struct adapter *adapter = dev->priv; |
945 | 933 | ||
946 | local_irq_save(flags); | 934 | local_irq_save(flags); |
947 | t1_select_intr_handler(adapter)(adapter->pdev->irq, adapter); | 935 | t1_interrupt(adapter->pdev->irq, adapter); |
948 | local_irq_restore(flags); | 936 | local_irq_restore(flags); |
949 | } | 937 | } |
950 | #endif | 938 | #endif |
@@ -1165,7 +1153,10 @@ static int __devinit init_one(struct pci_dev *pdev, | |||
1165 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1153 | #ifdef CONFIG_NET_POLL_CONTROLLER |
1166 | netdev->poll_controller = t1_netpoll; | 1154 | netdev->poll_controller = t1_netpoll; |
1167 | #endif | 1155 | #endif |
1156 | #ifdef CONFIG_CHELSIO_T1_NAPI | ||
1168 | netdev->weight = 64; | 1157 | netdev->weight = 64; |
1158 | netdev->poll = t1_poll; | ||
1159 | #endif | ||
1169 | 1160 | ||
1170 | SET_ETHTOOL_OPS(netdev, &t1_ethtool_ops); | 1161 | SET_ETHTOOL_OPS(netdev, &t1_ethtool_ops); |
1171 | } | 1162 | } |