Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 256479
b: refs/heads/master
c: 25009a1
h: refs/heads/master
i:
  256477: 69c86f1
  256475: 956be94
  256471: ae50135
  256463: 8df8285
  256447: 73f7a8b
v: v3
  • Loading branch information
David S. Miller committed Jul 15, 2011
1 parent f63dad8 commit 5d24490
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 84 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 95a943c162d74b20d869917bdf5df11293c35b63
refs/heads/master: 25009a1ae1171eda6bff44b7e44eb0e076713811
83 changes: 27 additions & 56 deletions trunk/drivers/net/8139cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,6 @@
#include <asm/irq.h>
#include <asm/uaccess.h>

/* VLAN tagging feature enable/disable */
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
#define CP_VLAN_TAG_USED 1
#define CP_VLAN_TX_TAG(tx_desc,vlan_tag_value) \
do { (tx_desc)->opts2 = cpu_to_le32(vlan_tag_value); } while (0)
#else
#define CP_VLAN_TAG_USED 0
#define CP_VLAN_TX_TAG(tx_desc,vlan_tag_value) \
do { (tx_desc)->opts2 = 0; } while (0)
#endif

/* These identify the driver base version and may not be removed. */
static char version[] =
DRV_NAME ": 10/100 PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
Expand Down Expand Up @@ -356,9 +345,6 @@ struct cp_private {
unsigned rx_buf_sz;
unsigned wol_enabled : 1; /* Is Wake-on-LAN enabled? */

#if CP_VLAN_TAG_USED
struct vlan_group *vlgrp;
#endif
dma_addr_t ring_dma;

struct mii_if_info mii_if;
Expand Down Expand Up @@ -423,24 +409,6 @@ static struct {
};


#if CP_VLAN_TAG_USED
static void cp_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
{
struct cp_private *cp = netdev_priv(dev);
unsigned long flags;

spin_lock_irqsave(&cp->lock, flags);
cp->vlgrp = grp;
if (grp)
cp->cpcmd |= RxVlanOn;
else
cp->cpcmd &= ~RxVlanOn;

cpw16(CpCmd, cp->cpcmd);
spin_unlock_irqrestore(&cp->lock, flags);
}
#endif /* CP_VLAN_TAG_USED */

static inline void cp_set_rxbufsize (struct cp_private *cp)
{
unsigned int mtu = cp->dev->mtu;
Expand All @@ -455,18 +423,17 @@ static inline void cp_set_rxbufsize (struct cp_private *cp)
static inline void cp_rx_skb (struct cp_private *cp, struct sk_buff *skb,
struct cp_desc *desc)
{
u32 opts2 = le32_to_cpu(desc->opts2);

skb->protocol = eth_type_trans (skb, cp->dev);

cp->dev->stats.rx_packets++;
cp->dev->stats.rx_bytes += skb->len;

#if CP_VLAN_TAG_USED
if (cp->vlgrp && (desc->opts2 & cpu_to_le32(RxVlanTagged))) {
vlan_hwaccel_receive_skb(skb, cp->vlgrp,
swab16(le32_to_cpu(desc->opts2) & 0xffff));
} else
#endif
netif_receive_skb(skb);
if (opts2 & RxVlanTagged)
__vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff));

napi_gro_receive(&cp->napi, skb);
}

static void cp_rx_err_acct (struct cp_private *cp, unsigned rx_tail,
Expand Down Expand Up @@ -730,16 +697,20 @@ static void cp_tx (struct cp_private *cp)
netif_wake_queue(cp->dev);
}

static inline u32 cp_tx_vlan_tag(struct sk_buff *skb)
{
return vlan_tx_tag_present(skb) ?
TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
}

static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
struct net_device *dev)
{
struct cp_private *cp = netdev_priv(dev);
unsigned entry;
u32 eor, flags;
unsigned long intr_flags;
#if CP_VLAN_TAG_USED
u32 vlan_tag = 0;
#endif
__le32 opts2;
int mss = 0;

spin_lock_irqsave(&cp->lock, intr_flags);
Expand All @@ -752,23 +723,20 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
return NETDEV_TX_BUSY;
}

#if CP_VLAN_TAG_USED
if (vlan_tx_tag_present(skb))
vlan_tag = TxVlanTag | swab16(vlan_tx_tag_get(skb));
#endif

entry = cp->tx_head;
eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
mss = skb_shinfo(skb)->gso_size;

opts2 = cpu_to_le32(cp_tx_vlan_tag(skb));

if (skb_shinfo(skb)->nr_frags == 0) {
struct cp_desc *txd = &cp->tx_ring[entry];
u32 len;
dma_addr_t mapping;

len = skb->len;
mapping = dma_map_single(&cp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE);
CP_VLAN_TX_TAG(txd, vlan_tag);
txd->opts2 = opts2;
txd->addr = cpu_to_le64(mapping);
wmb();

Expand Down Expand Up @@ -839,7 +807,7 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
ctrl |= LastFrag;

txd = &cp->tx_ring[entry];
CP_VLAN_TX_TAG(txd, vlan_tag);
txd->opts2 = opts2;
txd->addr = cpu_to_le64(mapping);
wmb();

Expand All @@ -851,7 +819,7 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
}

txd = &cp->tx_ring[first_entry];
CP_VLAN_TX_TAG(txd, vlan_tag);
txd->opts2 = opts2;
txd->addr = cpu_to_le64(first_mapping);
wmb();

Expand Down Expand Up @@ -1431,6 +1399,11 @@ static int cp_set_features(struct net_device *dev, u32 features)
else
cp->cpcmd &= ~RxChkSum;

if (features & NETIF_F_HW_VLAN_RX)
cp->cpcmd |= RxVlanOn;
else
cp->cpcmd &= ~RxVlanOn;

cpw16_f(CpCmd, cp->cpcmd);
spin_unlock_irqrestore(&cp->lock, flags);

Expand Down Expand Up @@ -1818,9 +1791,6 @@ static const struct net_device_ops cp_netdev_ops = {
.ndo_start_xmit = cp_start_xmit,
.ndo_tx_timeout = cp_tx_timeout,
.ndo_set_features = cp_set_features,
#if CP_VLAN_TAG_USED
.ndo_vlan_rx_register = cp_vlan_rx_register,
#endif
#ifdef BROKEN
.ndo_change_mtu = cp_change_mtu,
#endif
Expand Down Expand Up @@ -1949,15 +1919,16 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
dev->ethtool_ops = &cp_ethtool_ops;
dev->watchdog_timeo = TX_TIMEOUT;

#if CP_VLAN_TAG_USED
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
#endif

if (pci_using_dac)
dev->features |= NETIF_F_HIGHDMA;

/* disabled by default until verified */
dev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
dev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
NETIF_F_HIGHDMA;

dev->irq = pdev->irq;

Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/net/bna/bnad.c
Original file line number Diff line number Diff line change
Expand Up @@ -1109,7 +1109,7 @@ bnad_mbox_irq_alloc(struct bnad *bnad,
struct bna_intr_info *intr_info)
{
int err = 0;
unsigned long irq_flags = 0, flags;
unsigned long irq_flags, flags;
u32 irq;
irq_handler_t irq_handler;

Expand All @@ -1123,6 +1123,7 @@ bnad_mbox_irq_alloc(struct bnad *bnad,
if (bnad->cfg_flags & BNAD_CF_MSIX) {
irq_handler = (irq_handler_t)bnad_msix_mbox_handler;
irq = bnad->msix_table[bnad->msix_num - 1].vector;
irq_flags = 0;
intr_info->intr_type = BNA_INTR_T_MSIX;
intr_info->idl[0].vector = bnad->msix_num - 1;
} else {
Expand All @@ -1133,7 +1134,6 @@ bnad_mbox_irq_alloc(struct bnad *bnad,
/* intr_info->idl.vector = 0 ? */
}
spin_unlock_irqrestore(&bnad->bna_lock, flags);
flags = irq_flags;
sprintf(bnad->mbox_irq_name, "%s", BNAD_NAME);

/*
Expand All @@ -1144,7 +1144,7 @@ bnad_mbox_irq_alloc(struct bnad *bnad,

BNAD_UPDATE_CTR(bnad, mbox_intr_disabled);

err = request_irq(irq, irq_handler, flags,
err = request_irq(irq, irq_handler, irq_flags,
bnad->mbox_irq_name, bnad);

if (err) {
Expand Down
27 changes: 6 additions & 21 deletions trunk/drivers/net/can/slcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,12 +473,10 @@ static void slc_sync(void)
static struct slcan *slc_alloc(dev_t line)
{
int i;
char name[IFNAMSIZ];
struct net_device *dev = NULL;
struct slcan *sl;

if (slcan_devs == NULL)
return NULL; /* Master array missing ! */

for (i = 0; i < maxdev; i++) {
dev = slcan_devs[i];
if (dev == NULL)
Expand All @@ -490,25 +488,12 @@ static struct slcan *slc_alloc(dev_t line)
if (i >= maxdev)
return NULL;

if (dev) {
sl = netdev_priv(dev);
if (test_bit(SLF_INUSE, &sl->flags)) {
unregister_netdevice(dev);
dev = NULL;
slcan_devs[i] = NULL;
}
}

if (!dev) {
char name[IFNAMSIZ];
sprintf(name, "slcan%d", i);

dev = alloc_netdev(sizeof(*sl), name, slc_setup);
if (!dev)
return NULL;
dev->base_addr = i;
}
sprintf(name, "slcan%d", i);
dev = alloc_netdev(sizeof(*sl), name, slc_setup);
if (!dev)
return NULL;

dev->base_addr = i;
sl = netdev_priv(dev);

/* Initialize channel control data */
Expand Down
4 changes: 1 addition & 3 deletions trunk/net/sched/sch_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,16 +190,14 @@ static inline int qdisc_restart(struct Qdisc *q)
void __qdisc_run(struct Qdisc *q)
{
int quota = weight_p;
int work = 0;

while (qdisc_restart(q)) {
work++;
/*
* Ordered by possible occurrence: Postpone processing if
* 1. we've exceeded packet quota
* 2. another process needs the CPU;
*/
if (work >= quota || need_resched()) {
if (--quota <= 0 || need_resched()) {
__netif_schedule(q);
break;
}
Expand Down

0 comments on commit 5d24490

Please sign in to comment.