netdev: add more functions to netdevice ops
This patch moves neigh_setup and hard_start_xmit into the network device ops structure. For bisection, fix all the previously converted drivers as well. Bonding driver took the biggest hit on this. Added a prefetch of the hard_start_xmit in the fast path to try and reduce any impact this would have. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
6ab33d5171
commit
008298231a
@@ -12614,19 +12614,6 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
|
||||
else
|
||||
tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
|
||||
|
||||
/* All chips before 5787 can get confused if TX buffers
|
||||
* straddle the 4GB address boundary in some cases.
|
||||
*/
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
|
||||
tp->dev->hard_start_xmit = tg3_start_xmit;
|
||||
else
|
||||
tp->dev->hard_start_xmit = tg3_start_xmit_dma_bug;
|
||||
|
||||
tp->rx_offset = 2;
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
|
||||
(tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0)
|
||||
@@ -13346,6 +13333,26 @@ static void __devinit tg3_init_coal(struct tg3 *tp)
|
||||
static const struct net_device_ops tg3_netdev_ops = {
|
||||
.ndo_open = tg3_open,
|
||||
.ndo_stop = tg3_close,
|
||||
.ndo_start_xmit = tg3_start_xmit,
|
||||
.ndo_get_stats = tg3_get_stats,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_multicast_list = tg3_set_rx_mode,
|
||||
.ndo_set_mac_address = tg3_set_mac_addr,
|
||||
.ndo_do_ioctl = tg3_ioctl,
|
||||
.ndo_tx_timeout = tg3_tx_timeout,
|
||||
.ndo_change_mtu = tg3_change_mtu,
|
||||
#if TG3_VLAN_TAG_USED
|
||||
.ndo_vlan_rx_register = tg3_vlan_rx_register,
|
||||
#endif
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = tg3_poll_controller,
|
||||
#endif
|
||||
};
|
||||
|
||||
static const struct net_device_ops tg3_netdev_ops_dma_bug = {
|
||||
.ndo_open = tg3_open,
|
||||
.ndo_stop = tg3_close,
|
||||
.ndo_start_xmit = tg3_start_xmit_dma_bug,
|
||||
.ndo_get_stats = tg3_get_stats,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_multicast_list = tg3_set_rx_mode,
|
||||
@@ -13475,7 +13482,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
||||
tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
|
||||
tp->tx_pending = TG3_DEF_TX_RING_PENDING;
|
||||
|
||||
dev->netdev_ops = &tg3_netdev_ops;
|
||||
netif_napi_add(dev, &tp->napi, tg3_poll, 64);
|
||||
dev->ethtool_ops = &tg3_ethtool_ops;
|
||||
dev->watchdog_timeo = TG3_TX_TIMEOUT;
|
||||
@@ -13488,6 +13494,17 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
||||
goto err_out_iounmap;
|
||||
}
|
||||
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
|
||||
dev->netdev_ops = &tg3_netdev_ops;
|
||||
else
|
||||
dev->netdev_ops = &tg3_netdev_ops_dma_bug;
|
||||
|
||||
|
||||
/* The EPB bridge inside 5714, 5715, and 5780 and any
|
||||
* device behind the EPB cannot support DMA addresses > 40-bit.
|
||||
* On 64-bit systems with IOMMU, use 40-bit dma_mask.
|
||||
|
Reference in New Issue
Block a user