Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  bnx2: Fix bug in bnx2_free_rx_mem().
  irda: Add irda_skb_cb qdisc related padding
  jme: Fixed a typo
  net: kernel BUG at drivers/net/phy/mdio_bus.c:165!
  drivers/net: starfire: Fix napi ->poll() weight handling
  tlan: Fix pci memory unmapping
  enc28j60: use netif_rx_ni() to deliver RX packets
  tlan: Fix small (< 64 bytes) datagram transmissions
  netfilter: ctnetlink: fix missing CTA_NAT_SEQ_UNSPEC
This commit is contained in:
Linus Torvalds 2008-12-18 12:00:46 -08:00
commit b3806c3b94
8 changed files with 32 additions and 16 deletions

View file

@ -543,9 +543,9 @@ bnx2_free_rx_mem(struct bnx2 *bp)
for (j = 0; j < bp->rx_max_pg_ring; j++) { for (j = 0; j < bp->rx_max_pg_ring; j++) {
if (rxr->rx_pg_desc_ring[j]) if (rxr->rx_pg_desc_ring[j])
pci_free_consistent(bp->pdev, RXBD_RING_SIZE, pci_free_consistent(bp->pdev, RXBD_RING_SIZE,
rxr->rx_pg_desc_ring[i], rxr->rx_pg_desc_ring[j],
rxr->rx_pg_desc_mapping[i]); rxr->rx_pg_desc_mapping[j]);
rxr->rx_pg_desc_ring[i] = NULL; rxr->rx_pg_desc_ring[j] = NULL;
} }
if (rxr->rx_pg_ring) if (rxr->rx_pg_ring)
vfree(rxr->rx_pg_ring); vfree(rxr->rx_pg_ring);

View file

@ -959,7 +959,7 @@ static void enc28j60_hw_rx(struct net_device *ndev)
ndev->stats.rx_packets++; ndev->stats.rx_packets++;
ndev->stats.rx_bytes += len; ndev->stats.rx_bytes += len;
ndev->last_rx = jiffies; ndev->last_rx = jiffies;
netif_rx(skb); netif_rx_ni(skb);
} }
} }
/* /*

View file

@ -22,7 +22,7 @@
*/ */
#ifndef __JME_H_INCLUDED__ #ifndef __JME_H_INCLUDED__
#define __JME_H_INCLUDEE__ #define __JME_H_INCLUDED__
#define DRV_NAME "jme" #define DRV_NAME "jme"
#define DRV_VERSION "1.0.3" #define DRV_VERSION "1.0.3"

View file

@ -105,8 +105,6 @@ int mdiobus_register(struct mii_bus *bus)
return -EINVAL; return -EINVAL;
} }
bus->state = MDIOBUS_REGISTERED;
mutex_init(&bus->mdio_lock); mutex_init(&bus->mdio_lock);
if (bus->reset) if (bus->reset)
@ -123,6 +121,9 @@ int mdiobus_register(struct mii_bus *bus)
} }
} }
if (!err)
bus->state = MDIOBUS_REGISTERED;
pr_info("%s: probed\n", bus->name); pr_info("%s: probed\n", bus->name);
return err; return err;

View file

@ -1509,6 +1509,11 @@ static int __netdev_rx(struct net_device *dev, int *quota)
desc->status = 0; desc->status = 0;
np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE;
} }
if (*quota == 0) { /* out of rx quota */
retcode = 1;
goto out;
}
writew(np->rx_done, np->base + CompletionQConsumerIdx); writew(np->rx_done, np->base + CompletionQConsumerIdx);
out: out:

View file

@ -1098,6 +1098,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
dma_addr_t tail_list_phys; dma_addr_t tail_list_phys;
u8 *tail_buffer; u8 *tail_buffer;
unsigned long flags; unsigned long flags;
unsigned int txlen;
if ( ! priv->phyOnline ) { if ( ! priv->phyOnline ) {
TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n",
@ -1108,6 +1109,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
if (skb_padto(skb, TLAN_MIN_FRAME_SIZE)) if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
return 0; return 0;
txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE);
tail_list = priv->txList + priv->txTail; tail_list = priv->txList + priv->txTail;
tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail;
@ -1125,16 +1127,16 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev )
if ( bbuf ) { if ( bbuf ) {
tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE );
skb_copy_from_linear_data(skb, tail_buffer, skb->len); skb_copy_from_linear_data(skb, tail_buffer, txlen);
} else { } else {
tail_list->buffer[0].address = pci_map_single(priv->pciDev, tail_list->buffer[0].address = pci_map_single(priv->pciDev,
skb->data, skb->len, skb->data, txlen,
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
TLan_StoreSKB(tail_list, skb); TLan_StoreSKB(tail_list, skb);
} }
tail_list->frameSize = (u16) skb->len; tail_list->frameSize = (u16) txlen;
tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len; tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen;
tail_list->buffer[1].count = 0; tail_list->buffer[1].count = 0;
tail_list->buffer[1].address = 0; tail_list->buffer[1].address = 0;
@ -1431,7 +1433,9 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int )
if ( ! bbuf ) { if ( ! bbuf ) {
struct sk_buff *skb = TLan_GetSKB(head_list); struct sk_buff *skb = TLan_GetSKB(head_list);
pci_unmap_single(priv->pciDev, head_list->buffer[0].address, pci_unmap_single(priv->pciDev, head_list->buffer[0].address,
skb->len, PCI_DMA_TODEVICE); max(skb->len,
(unsigned int)TLAN_MIN_FRAME_SIZE),
PCI_DMA_TODEVICE);
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
head_list->buffer[8].address = 0; head_list->buffer[8].address = 0;
head_list->buffer[9].address = 0; head_list->buffer[9].address = 0;
@ -2055,9 +2059,12 @@ static void TLan_FreeLists( struct net_device *dev )
list = priv->txList + i; list = priv->txList + i;
skb = TLan_GetSKB(list); skb = TLan_GetSKB(list);
if ( skb ) { if ( skb ) {
pci_unmap_single(priv->pciDev, pci_unmap_single(
list->buffer[0].address, skb->len, priv->pciDev,
PCI_DMA_TODEVICE); list->buffer[0].address,
max(skb->len,
(unsigned int)TLAN_MIN_FRAME_SIZE),
PCI_DMA_TODEVICE);
dev_kfree_skb_any( skb ); dev_kfree_skb_any( skb );
list->buffer[8].address = 0; list->buffer[8].address = 0;
list->buffer[9].address = 0; list->buffer[9].address = 0;

View file

@ -141,6 +141,7 @@ enum ctattr_protonat {
#define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1) #define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1)
enum ctattr_natseq { enum ctattr_natseq {
CTA_NAT_SEQ_UNSPEC,
CTA_NAT_SEQ_CORRECTION_POS, CTA_NAT_SEQ_CORRECTION_POS,
CTA_NAT_SEQ_OFFSET_BEFORE, CTA_NAT_SEQ_OFFSET_BEFORE,
CTA_NAT_SEQ_OFFSET_AFTER, CTA_NAT_SEQ_OFFSET_AFTER,

View file

@ -135,9 +135,11 @@ struct dongle_reg {
/* /*
* Per-packet information we need to hide inside sk_buff * Per-packet information we need to hide inside sk_buff
* (must not exceed 48 bytes, check with struct sk_buff) * (must not exceed 48 bytes, check with struct sk_buff)
* The default_qdisc_pad field is a temporary hack.
*/ */
struct irda_skb_cb { struct irda_skb_cb {
unsigned int default_qdisc_pad;
magic_t magic; /* Be sure that we can trust the information */ magic_t magic; /* Be sure that we can trust the information */
__u32 next_speed; /* The Speed to be set *after* this frame */ __u32 next_speed; /* The Speed to be set *after* this frame */
__u16 mtt; /* Minimum turn around time */ __u16 mtt; /* Minimum turn around time */