aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/e1000/e1000.h5
-rw-r--r--drivers/net/e1000/e1000_ethtool.c8
-rw-r--r--drivers/net/e1000/e1000_hw.h1
-rw-r--r--drivers/net/e1000/e1000_main.c76
-rw-r--r--drivers/net/e1000/e1000_param.c4
5 files changed, 55 insertions, 39 deletions
diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h
index 4dd1326dd04f..5940f7a223bc 100644
--- a/drivers/net/e1000/e1000.h
+++ b/drivers/net/e1000/e1000.h
@@ -268,6 +268,7 @@ struct e1000_adapter {
268#ifdef CONFIG_E1000_MQ 268#ifdef CONFIG_E1000_MQ
269 struct e1000_tx_ring **cpu_tx_ring; /* per-cpu */ 269 struct e1000_tx_ring **cpu_tx_ring; /* per-cpu */
270#endif 270#endif
271 unsigned long tx_queue_len;
271 uint32_t txd_cmd; 272 uint32_t txd_cmd;
272 uint32_t tx_int_delay; 273 uint32_t tx_int_delay;
273 uint32_t tx_abs_int_delay; 274 uint32_t tx_abs_int_delay;
@@ -303,7 +304,8 @@ struct e1000_adapter {
303 struct call_async_data_struct rx_sched_call_data; 304 struct call_async_data_struct rx_sched_call_data;
304 int cpu_for_queue[4]; 305 int cpu_for_queue[4];
305#endif 306#endif
306 int num_queues; 307 int num_tx_queues;
308 int num_rx_queues;
307 309
308 uint64_t hw_csum_err; 310 uint64_t hw_csum_err;
309 uint64_t hw_csum_good; 311 uint64_t hw_csum_good;
@@ -336,6 +338,7 @@ struct e1000_adapter {
336 struct e1000_rx_ring test_rx_ring; 338 struct e1000_rx_ring test_rx_ring;
337 339
338 340
341 u32 *config_space;
339 int msg_enable; 342 int msg_enable;
340#ifdef CONFIG_PCI_MSI 343#ifdef CONFIG_PCI_MSI
341 boolean_t have_msi; 344 boolean_t have_msi;
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c
index 54ae8805e79f..fa9a4659369a 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -614,8 +614,8 @@ e1000_set_ringparam(struct net_device *netdev,
614 struct e1000_rx_ring *rxdr, *rx_old, *rx_new; 614 struct e1000_rx_ring *rxdr, *rx_old, *rx_new;
615 int i, err, tx_ring_size, rx_ring_size; 615 int i, err, tx_ring_size, rx_ring_size;
616 616
617 tx_ring_size = sizeof(struct e1000_tx_ring) * adapter->num_queues; 617 tx_ring_size = sizeof(struct e1000_tx_ring) * adapter->num_tx_queues;
618 rx_ring_size = sizeof(struct e1000_rx_ring) * adapter->num_queues; 618 rx_ring_size = sizeof(struct e1000_rx_ring) * adapter->num_rx_queues;
619 619
620 if (netif_running(adapter->netdev)) 620 if (netif_running(adapter->netdev))
621 e1000_down(adapter); 621 e1000_down(adapter);
@@ -654,10 +654,10 @@ e1000_set_ringparam(struct net_device *netdev,
654 E1000_MAX_TXD : E1000_MAX_82544_TXD)); 654 E1000_MAX_TXD : E1000_MAX_82544_TXD));
655 E1000_ROUNDUP(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE); 655 E1000_ROUNDUP(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE);
656 656
657 for (i = 0; i < adapter->num_queues; i++) { 657 for (i = 0; i < adapter->num_tx_queues; i++)
658 txdr[i].count = txdr->count; 658 txdr[i].count = txdr->count;
659 for (i = 0; i < adapter->num_rx_queues; i++)
659 rxdr[i].count = rxdr->count; 660 rxdr[i].count = rxdr->count;
660 }
661 661
662 if(netif_running(adapter->netdev)) { 662 if(netif_running(adapter->netdev)) {
663 /* Try to get new resources before deleting old */ 663 /* Try to get new resources before deleting old */
diff --git a/drivers/net/e1000/e1000_hw.h b/drivers/net/e1000/e1000_hw.h
index 7caa35748cea..1ddfd56fc5df 100644
--- a/drivers/net/e1000/e1000_hw.h
+++ b/drivers/net/e1000/e1000_hw.h
@@ -1497,6 +1497,7 @@ struct e1000_hw {
1497#define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */ 1497#define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */
1498#define E1000_CTRL_EXT_IPS 0x00004000 /* Invert Power State */ 1498#define E1000_CTRL_EXT_IPS 0x00004000 /* Invert Power State */
1499#define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */ 1499#define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */
1500#define E1000_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */
1500#define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 1501#define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000
1501#define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000 1502#define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000
1502#define E1000_CTRL_EXT_LINK_MODE_TBI 0x00C00000 1503#define E1000_CTRL_EXT_LINK_MODE_TBI 0x00C00000
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 5f848b3a3a4d..540c8561fc24 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -411,8 +411,9 @@ e1000_up(struct e1000_adapter *adapter)
411 e1000_configure_tx(adapter); 411 e1000_configure_tx(adapter);
412 e1000_setup_rctl(adapter); 412 e1000_setup_rctl(adapter);
413 e1000_configure_rx(adapter); 413 e1000_configure_rx(adapter);
414 for (i = 0; i < adapter->num_queues; i++) 414 for (i = 0; i < adapter->num_rx_queues; i++) {
415 adapter->alloc_rx_buf(adapter, &adapter->rx_ring[i]); 415 adapter->alloc_rx_buf(adapter, &adapter->rx_ring[i]);
416 }
416 417
417#ifdef CONFIG_PCI_MSI 418#ifdef CONFIG_PCI_MSI
418 if(adapter->hw.mac_type > e1000_82547_rev_2) { 419 if(adapter->hw.mac_type > e1000_82547_rev_2) {
@@ -867,7 +868,7 @@ e1000_remove(struct pci_dev *pdev)
867 868
868 unregister_netdev(netdev); 869 unregister_netdev(netdev);
869#ifdef CONFIG_E1000_NAPI 870#ifdef CONFIG_E1000_NAPI
870 for (i = 0; i < adapter->num_queues; i++) 871 for (i = 0; i < adapter->num_rx_queues; i++)
871 __dev_put(&adapter->polling_netdev[i]); 872 __dev_put(&adapter->polling_netdev[i]);
872#endif 873#endif
873 874
@@ -972,15 +973,25 @@ e1000_sw_init(struct e1000_adapter *adapter)
972 switch (hw->mac_type) { 973 switch (hw->mac_type) {
973 case e1000_82571: 974 case e1000_82571:
974 case e1000_82572: 975 case e1000_82572:
975 adapter->num_queues = 2; 976 /* These controllers support 2 tx queues, but with a single
977 * qdisc implementation, multiple tx queues aren't quite as
978 * interesting. If we can find a logical way of mapping
979 * flows to a queue, then perhaps we can up the num_tx_queue
980 * count back to its default. Until then, we run the risk of
981 * terrible performance due to SACK overload. */
982 adapter->num_tx_queues = 1;
983 adapter->num_rx_queues = 2;
976 break; 984 break;
977 default: 985 default:
978 adapter->num_queues = 1; 986 adapter->num_tx_queues = 1;
987 adapter->num_rx_queues = 1;
979 break; 988 break;
980 } 989 }
981 adapter->num_queues = min(adapter->num_queues, num_online_cpus()); 990 adapter->num_rx_queues = min(adapter->num_rx_queues, num_online_cpus());
991 adapter->num_tx_queues = min(adapter->num_tx_queues, num_online_cpus());
982#else 992#else
983 adapter->num_queues = 1; 993 adapter->num_tx_queues = 1;
994 adapter->num_rx_queues = 1;
984#endif 995#endif
985 996
986 if (e1000_alloc_queues(adapter)) { 997 if (e1000_alloc_queues(adapter)) {
@@ -989,7 +1000,7 @@ e1000_sw_init(struct e1000_adapter *adapter)
989 } 1000 }
990 1001
991#ifdef CONFIG_E1000_NAPI 1002#ifdef CONFIG_E1000_NAPI
992 for (i = 0; i < adapter->num_queues; i++) { 1003 for (i = 0; i < adapter->num_rx_queues; i++) {
993 adapter->polling_netdev[i].priv = adapter; 1004 adapter->polling_netdev[i].priv = adapter;
994 adapter->polling_netdev[i].poll = &e1000_clean; 1005 adapter->polling_netdev[i].poll = &e1000_clean;
995 adapter->polling_netdev[i].weight = 64; 1006 adapter->polling_netdev[i].weight = 64;
@@ -1022,13 +1033,13 @@ e1000_alloc_queues(struct e1000_adapter *adapter)
1022{ 1033{
1023 int size; 1034 int size;
1024 1035
1025 size = sizeof(struct e1000_tx_ring) * adapter->num_queues; 1036 size = sizeof(struct e1000_tx_ring) * adapter->num_tx_queues;
1026 adapter->tx_ring = kmalloc(size, GFP_KERNEL); 1037 adapter->tx_ring = kmalloc(size, GFP_KERNEL);
1027 if (!adapter->tx_ring) 1038 if (!adapter->tx_ring)
1028 return -ENOMEM; 1039 return -ENOMEM;
1029 memset(adapter->tx_ring, 0, size); 1040 memset(adapter->tx_ring, 0, size);
1030 1041
1031 size = sizeof(struct e1000_rx_ring) * adapter->num_queues; 1042 size = sizeof(struct e1000_rx_ring) * adapter->num_rx_queues;
1032 adapter->rx_ring = kmalloc(size, GFP_KERNEL); 1043 adapter->rx_ring = kmalloc(size, GFP_KERNEL);
1033 if (!adapter->rx_ring) { 1044 if (!adapter->rx_ring) {
1034 kfree(adapter->tx_ring); 1045 kfree(adapter->tx_ring);
@@ -1037,7 +1048,7 @@ e1000_alloc_queues(struct e1000_adapter *adapter)
1037 memset(adapter->rx_ring, 0, size); 1048 memset(adapter->rx_ring, 0, size);
1038 1049
1039#ifdef CONFIG_E1000_NAPI 1050#ifdef CONFIG_E1000_NAPI
1040 size = sizeof(struct net_device) * adapter->num_queues; 1051 size = sizeof(struct net_device) * adapter->num_rx_queues;
1041 adapter->polling_netdev = kmalloc(size, GFP_KERNEL); 1052 adapter->polling_netdev = kmalloc(size, GFP_KERNEL);
1042 if (!adapter->polling_netdev) { 1053 if (!adapter->polling_netdev) {
1043 kfree(adapter->tx_ring); 1054 kfree(adapter->tx_ring);
@@ -1066,12 +1077,12 @@ e1000_setup_queue_mapping(struct e1000_adapter *adapter)
1066 lock_cpu_hotplug(); 1077 lock_cpu_hotplug();
1067 i = 0; 1078 i = 0;
1068 for_each_online_cpu(cpu) { 1079 for_each_online_cpu(cpu) {
1069 *per_cpu_ptr(adapter->cpu_tx_ring, cpu) = &adapter->tx_ring[i % adapter->num_queues]; 1080 *per_cpu_ptr(adapter->cpu_tx_ring, cpu) = &adapter->tx_ring[i % adapter->num_tx_queues];
1070 /* This is incomplete because we'd like to assign separate 1081 /* This is incomplete because we'd like to assign separate
1071 * physical cpus to these netdev polling structures and 1082 * physical cpus to these netdev polling structures and
1072 * avoid saturating a subset of cpus. 1083 * avoid saturating a subset of cpus.
1073 */ 1084 */
1074 if (i < adapter->num_queues) { 1085 if (i < adapter->num_rx_queues) {
1075 *per_cpu_ptr(adapter->cpu_netdev, cpu) = &adapter->polling_netdev[i]; 1086 *per_cpu_ptr(adapter->cpu_netdev, cpu) = &adapter->polling_netdev[i];
1076 adapter->cpu_for_queue[i] = cpu; 1087 adapter->cpu_for_queue[i] = cpu;
1077 } else 1088 } else
@@ -1291,7 +1302,7 @@ e1000_setup_all_tx_resources(struct e1000_adapter *adapter)
1291{ 1302{
1292 int i, err = 0; 1303 int i, err = 0;
1293 1304
1294 for (i = 0; i < adapter->num_queues; i++) { 1305 for (i = 0; i < adapter->num_tx_queues; i++) {
1295 err = e1000_setup_tx_resources(adapter, &adapter->tx_ring[i]); 1306 err = e1000_setup_tx_resources(adapter, &adapter->tx_ring[i]);
1296 if (err) { 1307 if (err) {
1297 DPRINTK(PROBE, ERR, 1308 DPRINTK(PROBE, ERR,
@@ -1319,7 +1330,7 @@ e1000_configure_tx(struct e1000_adapter *adapter)
1319 1330
1320 /* Setup the HW Tx Head and Tail descriptor pointers */ 1331 /* Setup the HW Tx Head and Tail descriptor pointers */
1321 1332
1322 switch (adapter->num_queues) { 1333 switch (adapter->num_tx_queues) {
1323 case 2: 1334 case 2:
1324 tdba = adapter->tx_ring[1].dma; 1335 tdba = adapter->tx_ring[1].dma;
1325 tdlen = adapter->tx_ring[1].count * 1336 tdlen = adapter->tx_ring[1].count *
@@ -1537,7 +1548,7 @@ e1000_setup_all_rx_resources(struct e1000_adapter *adapter)
1537{ 1548{
1538 int i, err = 0; 1549 int i, err = 0;
1539 1550
1540 for (i = 0; i < adapter->num_queues; i++) { 1551 for (i = 0; i < adapter->num_rx_queues; i++) {
1541 err = e1000_setup_rx_resources(adapter, &adapter->rx_ring[i]); 1552 err = e1000_setup_rx_resources(adapter, &adapter->rx_ring[i]);
1542 if (err) { 1553 if (err) {
1543 DPRINTK(PROBE, ERR, 1554 DPRINTK(PROBE, ERR,
@@ -1709,7 +1720,7 @@ e1000_configure_rx(struct e1000_adapter *adapter)
1709 1720
1710 /* Setup the HW Rx Head and Tail Descriptor Pointers and 1721 /* Setup the HW Rx Head and Tail Descriptor Pointers and
1711 * the Base and Length of the Rx Descriptor Ring */ 1722 * the Base and Length of the Rx Descriptor Ring */
1712 switch (adapter->num_queues) { 1723 switch (adapter->num_rx_queues) {
1713#ifdef CONFIG_E1000_MQ 1724#ifdef CONFIG_E1000_MQ
1714 case 2: 1725 case 2:
1715 rdba = adapter->rx_ring[1].dma; 1726 rdba = adapter->rx_ring[1].dma;
@@ -1736,7 +1747,7 @@ e1000_configure_rx(struct e1000_adapter *adapter)
1736 } 1747 }
1737 1748
1738#ifdef CONFIG_E1000_MQ 1749#ifdef CONFIG_E1000_MQ
1739 if (adapter->num_queues > 1) { 1750 if (adapter->num_rx_queues > 1) {
1740 uint32_t random[10]; 1751 uint32_t random[10];
1741 1752
1742 get_random_bytes(&random[0], 40); 1753 get_random_bytes(&random[0], 40);
@@ -1746,7 +1757,7 @@ e1000_configure_rx(struct e1000_adapter *adapter)
1746 E1000_WRITE_REG(hw, RSSIM, 0); 1757 E1000_WRITE_REG(hw, RSSIM, 0);
1747 } 1758 }
1748 1759
1749 switch (adapter->num_queues) { 1760 switch (adapter->num_rx_queues) {
1750 case 2: 1761 case 2:
1751 default: 1762 default:
1752 reta = 0x00800080; 1763 reta = 0x00800080;
@@ -1838,7 +1849,7 @@ e1000_free_all_tx_resources(struct e1000_adapter *adapter)
1838{ 1849{
1839 int i; 1850 int i;
1840 1851
1841 for (i = 0; i < adapter->num_queues; i++) 1852 for (i = 0; i < adapter->num_tx_queues; i++)
1842 e1000_free_tx_resources(adapter, &adapter->tx_ring[i]); 1853 e1000_free_tx_resources(adapter, &adapter->tx_ring[i]);
1843} 1854}
1844 1855
@@ -1905,7 +1916,7 @@ e1000_clean_all_tx_rings(struct e1000_adapter *adapter)
1905{ 1916{
1906 int i; 1917 int i;
1907 1918
1908 for (i = 0; i < adapter->num_queues; i++) 1919 for (i = 0; i < adapter->num_tx_queues; i++)
1909 e1000_clean_tx_ring(adapter, &adapter->tx_ring[i]); 1920 e1000_clean_tx_ring(adapter, &adapter->tx_ring[i]);
1910} 1921}
1911 1922
@@ -1949,7 +1960,7 @@ e1000_free_all_rx_resources(struct e1000_adapter *adapter)
1949{ 1960{
1950 int i; 1961 int i;
1951 1962
1952 for (i = 0; i < adapter->num_queues; i++) 1963 for (i = 0; i < adapter->num_rx_queues; i++)
1953 e1000_free_rx_resources(adapter, &adapter->rx_ring[i]); 1964 e1000_free_rx_resources(adapter, &adapter->rx_ring[i]);
1954} 1965}
1955 1966
@@ -2025,7 +2036,7 @@ e1000_clean_all_rx_rings(struct e1000_adapter *adapter)
2025{ 2036{
2026 int i; 2037 int i;
2027 2038
2028 for (i = 0; i < adapter->num_queues; i++) 2039 for (i = 0; i < adapter->num_rx_queues; i++)
2029 e1000_clean_rx_ring(adapter, &adapter->rx_ring[i]); 2040 e1000_clean_rx_ring(adapter, &adapter->rx_ring[i]);
2030} 2041}
2031 2042
@@ -2325,7 +2336,10 @@ e1000_watchdog_task(struct e1000_adapter *adapter)
2325 2336
2326 e1000_update_adaptive(&adapter->hw); 2337 e1000_update_adaptive(&adapter->hw);
2327 2338
2328 if (adapter->num_queues == 1 && !netif_carrier_ok(netdev)) { 2339#ifdef CONFIG_E1000_MQ
2340 txdr = *per_cpu_ptr(adapter->cpu_tx_ring, smp_processor_id());
2341#endif
2342 if (!netif_carrier_ok(netdev)) {
2329 if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) { 2343 if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
2330 /* We've lost link, so the controller stops DMA, 2344 /* We've lost link, so the controller stops DMA,
2331 * but we've got queued Tx work that's never going 2345 * but we've got queued Tx work that's never going
@@ -3197,14 +3211,12 @@ e1000_intr(int irq, void *data, struct pt_regs *regs)
3197 E1000_WRITE_FLUSH(hw); 3211 E1000_WRITE_FLUSH(hw);
3198#ifdef CONFIG_E1000_MQ 3212#ifdef CONFIG_E1000_MQ
3199 if (atomic_read(&adapter->rx_sched_call_data.count) == 0) { 3213 if (atomic_read(&adapter->rx_sched_call_data.count) == 0) {
3200 cpu_set(adapter->cpu_for_queue[0], 3214 /* We must setup the cpumask once count == 0 since
3201 adapter->rx_sched_call_data.cpumask); 3215 * each cpu bit is cleared when the work is done. */
3202 for (i = 1; i < adapter->num_queues; i++) { 3216 adapter->rx_sched_call_data.cpumask = adapter->cpumask;
3203 cpu_set(adapter->cpu_for_queue[i], 3217 atomic_add(adapter->num_rx_queues - 1, &adapter->irq_sem);
3204 adapter->rx_sched_call_data.cpumask); 3218 atomic_set(&adapter->rx_sched_call_data.count,
3205 atomic_inc(&adapter->irq_sem); 3219 adapter->num_rx_queues);
3206 }
3207 atomic_set(&adapter->rx_sched_call_data.count, i);
3208 smp_call_async_mask(&adapter->rx_sched_call_data); 3220 smp_call_async_mask(&adapter->rx_sched_call_data);
3209 } else { 3221 } else {
3210 printk("call_data.count == %u\n", atomic_read(&adapter->rx_sched_call_data.count)); 3222 printk("call_data.count == %u\n", atomic_read(&adapter->rx_sched_call_data.count));
@@ -3267,7 +3279,7 @@ e1000_clean(struct net_device *poll_dev, int *budget)
3267 3279
3268 while (poll_dev != &adapter->polling_netdev[i]) { 3280 while (poll_dev != &adapter->polling_netdev[i]) {
3269 i++; 3281 i++;
3270 if (unlikely(i == adapter->num_queues)) 3282 if (unlikely(i == adapter->num_rx_queues))
3271 BUG(); 3283 BUG();
3272 } 3284 }
3273 3285
diff --git a/drivers/net/e1000/e1000_param.c b/drivers/net/e1000/e1000_param.c
index 852841f12fb9..b0be7d69af34 100644
--- a/drivers/net/e1000/e1000_param.c
+++ b/drivers/net/e1000/e1000_param.c
@@ -320,7 +320,7 @@ e1000_check_options(struct e1000_adapter *adapter)
320 } else { 320 } else {
321 tx_ring->count = opt.def; 321 tx_ring->count = opt.def;
322 } 322 }
323 for (i = 0; i < adapter->num_queues; i++) 323 for (i = 0; i < adapter->num_tx_queues; i++)
324 tx_ring[i].count = tx_ring->count; 324 tx_ring[i].count = tx_ring->count;
325 } 325 }
326 { /* Receive Descriptor Count */ 326 { /* Receive Descriptor Count */
@@ -346,7 +346,7 @@ e1000_check_options(struct e1000_adapter *adapter)
346 } else { 346 } else {
347 rx_ring->count = opt.def; 347 rx_ring->count = opt.def;
348 } 348 }
349 for (i = 0; i < adapter->num_queues; i++) 349 for (i = 0; i < adapter->num_rx_queues; i++)
350 rx_ring[i].count = rx_ring->count; 350 rx_ring[i].count = rx_ring->count;
351 } 351 }
352 { /* Checksum Offload Enable/Disable */ 352 { /* Checksum Offload Enable/Disable */