mirror of https://gitee.com/openkylin/linux.git
amd8111e: delete non NAPI code from the driver.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> Acked-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a6676019a7
commit
6ba33ac8a4
|
@ -1306,20 +1306,6 @@ config AMD8111_ETH
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called amd8111e.
|
||||
|
||||
config AMD8111E_NAPI
|
||||
bool "Use RX polling (NAPI)"
|
||||
depends on AMD8111_ETH
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ADAPTEC_STARFIRE
|
||||
tristate "Adaptec Starfire/DuraLAN support"
|
||||
depends on NET_PCI && PCI
|
||||
|
|
|
@ -101,9 +101,9 @@ Revision History:
|
|||
|
||||
#include "amd8111e.h"
|
||||
#define MODULE_NAME "amd8111e"
|
||||
#define MODULE_VERS "3.0.6"
|
||||
#define MODULE_VERS "3.0.7"
|
||||
MODULE_AUTHOR("Advanced Micro Devices, Inc.");
|
||||
MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version 3.0.6");
|
||||
MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version "MODULE_VERS);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl);
|
||||
module_param_array(speed_duplex, int, NULL, 0);
|
||||
|
@ -671,11 +671,7 @@ This is the receive indication function for packets with vlan tag.
|
|||
*/
|
||||
static int amd8111e_vlan_rx(struct amd8111e_priv *lp, struct sk_buff *skb, u16 vlan_tag)
|
||||
{
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
return vlan_hwaccel_receive_skb(skb, lp->vlgrp,vlan_tag);
|
||||
#else
|
||||
return vlan_hwaccel_rx(skb, lp->vlgrp, vlan_tag);
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -722,7 +718,6 @@ static int amd8111e_tx(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
/* This function handles the driver receive operation in polling mode */
|
||||
static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
|
@ -734,7 +729,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
|||
int min_pkt_len, status;
|
||||
unsigned int intr0;
|
||||
int num_rx_pkt = 0;
|
||||
/*int max_rx_pkt = NUM_RX_BUFFERS;*/
|
||||
short pkt_len;
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
short vtag;
|
||||
|
@ -850,108 +844,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
|||
return num_rx_pkt;
|
||||
}
|
||||
|
||||
#else
|
||||
/*
|
||||
This function will check the ownership of receive buffers and descriptors. It will indicate to kernel up to half the number of maximum receive buffers in the descriptor ring, in a single receive interrupt. It will also replenish the descriptors with new skbs.
|
||||
*/
|
||||
static int amd8111e_rx(struct net_device *dev)
|
||||
{
|
||||
struct amd8111e_priv *lp = netdev_priv(dev);
|
||||
struct sk_buff *skb,*new_skb;
|
||||
int rx_index = lp->rx_idx & RX_RING_DR_MOD_MASK;
|
||||
int min_pkt_len, status;
|
||||
int num_rx_pkt = 0;
|
||||
int max_rx_pkt = NUM_RX_BUFFERS;
|
||||
short pkt_len;
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
short vtag;
|
||||
#endif
|
||||
|
||||
/* If we own the next entry, it's a new packet. Send it up. */
|
||||
while(++num_rx_pkt <= max_rx_pkt){
|
||||
status = le16_to_cpu(lp->rx_ring[rx_index].rx_flags);
|
||||
if(status & OWN_BIT)
|
||||
return 0;
|
||||
|
||||
/* check if err summary bit is set */
|
||||
if(status & ERR_BIT){
|
||||
/*
|
||||
* There is a tricky error noted by John Murphy,
|
||||
* <murf@perftech.com> to Russ Nelson: Even with full-sized
|
||||
* buffers it's possible for a jabber packet to use two
|
||||
* buffers, with only the last correctly noting the error. */
|
||||
/* reseting flags */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
/* check for STP and ENP */
|
||||
if(!((status & STP_BIT) && (status & ENP_BIT))){
|
||||
/* reseting flags */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
pkt_len = le16_to_cpu(lp->rx_ring[rx_index].msg_count) - 4;
|
||||
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
vtag = status & TT_MASK;
|
||||
/*MAC will strip vlan tag*/
|
||||
if(lp->vlgrp != NULL && vtag !=0)
|
||||
min_pkt_len =MIN_PKT_LEN - 4;
|
||||
else
|
||||
#endif
|
||||
min_pkt_len =MIN_PKT_LEN;
|
||||
|
||||
if (pkt_len < min_pkt_len) {
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
lp->drv_rx_errors++;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
if(!(new_skb = dev_alloc_skb(lp->rx_buff_len))){
|
||||
/* if allocation fail,
|
||||
ignore that pkt and go to next one */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
lp->drv_rx_errors++;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
|
||||
skb_reserve(new_skb, 2);
|
||||
skb = lp->rx_skbuff[rx_index];
|
||||
pci_unmap_single(lp->pci_dev,lp->rx_dma_addr[rx_index],
|
||||
lp->rx_buff_len-2, PCI_DMA_FROMDEVICE);
|
||||
skb_put(skb, pkt_len);
|
||||
lp->rx_skbuff[rx_index] = new_skb;
|
||||
lp->rx_dma_addr[rx_index] = pci_map_single(lp->pci_dev,
|
||||
new_skb->data, lp->rx_buff_len-2,PCI_DMA_FROMDEVICE);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
if(lp->vlgrp != NULL && (vtag == TT_VLAN_TAGGED)){
|
||||
amd8111e_vlan_rx(lp, skb,
|
||||
le16_to_cpu(lp->rx_ring[rx_index].tag_ctrl_info));
|
||||
} else
|
||||
#endif
|
||||
|
||||
netif_rx (skb);
|
||||
/*COAL update rx coalescing parameters*/
|
||||
lp->coal_conf.rx_packets++;
|
||||
lp->coal_conf.rx_bytes += pkt_len;
|
||||
|
||||
dev->last_rx = jiffies;
|
||||
|
||||
err_next_pkt:
|
||||
lp->rx_ring[rx_index].buff_phy_addr
|
||||
= cpu_to_le32(lp->rx_dma_addr[rx_index]);
|
||||
lp->rx_ring[rx_index].buff_count =
|
||||
cpu_to_le16(lp->rx_buff_len-2);
|
||||
wmb();
|
||||
lp->rx_ring[rx_index].rx_flags |= cpu_to_le16(OWN_BIT);
|
||||
rx_index = (++lp->rx_idx) & RX_RING_DR_MOD_MASK;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
/*
|
||||
This function will indicate the link status to the kernel.
|
||||
*/
|
||||
|
@ -1280,29 +1172,22 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
|
|||
writel(intr0, mmio + INT0);
|
||||
|
||||
/* Check if Receive Interrupt has occurred. */
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
if(intr0 & RINT0){
|
||||
if(netif_rx_schedule_prep(dev, &lp->napi)){
|
||||
if (intr0 & RINT0) {
|
||||
if (netif_rx_schedule_prep(dev, &lp->napi)) {
|
||||
/* Disable receive interupts */
|
||||
writel(RINTEN0, mmio + INTEN0);
|
||||
/* Schedule a polling routine */
|
||||
__netif_rx_schedule(dev, &lp->napi);
|
||||
}
|
||||
else if (intren0 & RINTEN0) {
|
||||
} else if (intren0 & RINTEN0) {
|
||||
printk("************Driver bug! \
|
||||
interrupt while in poll\n");
|
||||
/* Fix by disable receive interrupts */
|
||||
writel(RINTEN0, mmio + INTEN0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if(intr0 & RINT0){
|
||||
amd8111e_rx(dev);
|
||||
writel(VAL2 | RDMD0, mmio + CMD0);
|
||||
}
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
|
||||
/* Check if Transmit Interrupt has occurred. */
|
||||
if(intr0 & TINT0)
|
||||
if (intr0 & TINT0)
|
||||
amd8111e_tx(dev);
|
||||
|
||||
/* Check if Link Change Interrupt has occurred. */
|
||||
|
@ -1340,9 +1225,7 @@ static int amd8111e_close(struct net_device * dev)
|
|||
struct amd8111e_priv *lp = netdev_priv(dev);
|
||||
netif_stop_queue(dev);
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_disable(&lp->napi);
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&lp->lock);
|
||||
|
||||
|
@ -1374,9 +1257,7 @@ static int amd8111e_open(struct net_device * dev )
|
|||
dev->name, dev))
|
||||
return -EAGAIN;
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_enable(&lp->napi);
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&lp->lock);
|
||||
|
||||
|
@ -1384,9 +1265,7 @@ static int amd8111e_open(struct net_device * dev )
|
|||
|
||||
if(amd8111e_restart(dev)){
|
||||
spin_unlock_irq(&lp->lock);
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_disable(&lp->napi);
|
||||
#endif
|
||||
if (dev->irq)
|
||||
free_irq(dev->irq, dev);
|
||||
return -ENOMEM;
|
||||
|
@ -2036,9 +1915,7 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
|
|||
dev->irq =pdev->irq;
|
||||
dev->tx_timeout = amd8111e_tx_timeout;
|
||||
dev->watchdog_timeo = AMD8111E_TX_TIMEOUT;
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32);
|
||||
#endif
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = amd8111e_poll;
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue