Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qlcnic: reduce rx ring size

If eswitch is enabled, rcv ring size can be reduce, as
physical port is partition-ed.

Signed-off-by: Sony Chacko <sony.chacko@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sony Chacko and committed by
David S. Miller
90d19005 e5edb7b1

+21 -20
+4
drivers/net/qlcnic/qlcnic.h
··· 146 146 #define MAX_CMD_DESCRIPTORS 1024 147 147 #define MAX_RCV_DESCRIPTORS_1G 4096 148 148 #define MAX_RCV_DESCRIPTORS_10G 8192 149 + #define MAX_RCV_DESCRIPTORS_VF 2048 149 150 #define MAX_JUMBO_RCV_DESCRIPTORS_1G 512 150 151 #define MAX_JUMBO_RCV_DESCRIPTORS_10G 1024 151 152 152 153 #define DEFAULT_RCV_DESCRIPTORS_1G 2048 153 154 #define DEFAULT_RCV_DESCRIPTORS_10G 4096 155 + #define DEFAULT_RCV_DESCRIPTORS_VF 1024 154 156 #define MAX_RDS_RINGS 2 155 157 156 158 #define get_next_index(index, length) \ ··· 973 971 u16 num_txd; 974 972 u16 num_rxd; 975 973 u16 num_jumbo_rxd; 974 + u16 max_rxd; 975 + u16 max_jumbo_rxd; 976 976 977 977 u8 max_rds_rings; 978 978 u8 max_sds_rings;
+5 -18
drivers/net/qlcnic/qlcnic_ethtool.c
··· 437 437 ring->rx_jumbo_pending = adapter->num_jumbo_rxd; 438 438 ring->tx_pending = adapter->num_txd; 439 439 440 - if (adapter->ahw.port_type == QLCNIC_GBE) { 441 - ring->rx_max_pending = MAX_RCV_DESCRIPTORS_1G; 442 - ring->rx_jumbo_max_pending = MAX_JUMBO_RCV_DESCRIPTORS_1G; 443 - } else { 444 - ring->rx_max_pending = MAX_RCV_DESCRIPTORS_10G; 445 - ring->rx_jumbo_max_pending = MAX_JUMBO_RCV_DESCRIPTORS_10G; 446 - } 447 - 440 + ring->rx_max_pending = adapter->max_rxd; 441 + ring->rx_jumbo_max_pending = adapter->max_jumbo_rxd; 448 442 ring->tx_max_pending = MAX_CMD_DESCRIPTORS; 449 443 450 444 ring->rx_mini_max_pending = 0; ··· 466 472 struct ethtool_ringparam *ring) 467 473 { 468 474 struct qlcnic_adapter *adapter = netdev_priv(dev); 469 - u16 max_rcv_desc = MAX_RCV_DESCRIPTORS_10G; 470 - u16 max_jumbo_desc = MAX_JUMBO_RCV_DESCRIPTORS_10G; 471 475 u16 num_rxd, num_jumbo_rxd, num_txd; 472 - 473 476 474 477 if (ring->rx_mini_pending) 475 478 return -EOPNOTSUPP; 476 479 477 - if (adapter->ahw.port_type == QLCNIC_GBE) { 478 - max_rcv_desc = MAX_RCV_DESCRIPTORS_1G; 479 - max_jumbo_desc = MAX_JUMBO_RCV_DESCRIPTORS_10G; 480 - } 481 - 482 480 num_rxd = qlcnic_validate_ringparam(ring->rx_pending, 483 - MIN_RCV_DESCRIPTORS, max_rcv_desc, "rx"); 481 + MIN_RCV_DESCRIPTORS, adapter->max_rxd, "rx"); 484 482 485 483 num_jumbo_rxd = qlcnic_validate_ringparam(ring->rx_jumbo_pending, 486 - MIN_JUMBO_DESCRIPTORS, max_jumbo_desc, "rx jumbo"); 484 + MIN_JUMBO_DESCRIPTORS, adapter->max_jumbo_rxd, 485 + "rx jumbo"); 487 486 488 487 num_txd = qlcnic_validate_ringparam(ring->tx_pending, 489 488 MIN_CMD_DESCRIPTORS, MAX_CMD_DESCRIPTORS, "tx");
+12 -2
drivers/net/qlcnic/qlcnic_main.c
··· 656 656 657 657 dev_info(&pdev->dev, "firmware v%d.%d.%d\n", 658 658 fw_major, fw_minor, fw_build); 659 - 660 659 if (adapter->ahw.port_type == QLCNIC_XGBE) { 661 - adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; 660 + if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { 661 + adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF; 662 + adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF; 663 + } else { 664 + adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; 665 + adapter->max_rxd = MAX_RCV_DESCRIPTORS_10G; 666 + } 667 + 662 668 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; 669 + adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; 670 + 663 671 } else if (adapter->ahw.port_type == QLCNIC_GBE) { 664 672 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; 665 673 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; 674 + adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; 675 + adapter->max_rxd = MAX_RCV_DESCRIPTORS_1G; 666 676 } 667 677 668 678 adapter->msix_supported = !!use_msi_x;