Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9415fddd authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [IFB]: Fix crash on input device removal
  [BNX2]: Fix link interrupt problem.
parents 297640e8 c01003c2
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -54,8 +54,8 @@

#define DRV_MODULE_NAME		"bnx2"
#define PFX DRV_MODULE_NAME	": "
#define DRV_MODULE_VERSION	"1.5.5"
#define DRV_MODULE_RELDATE	"February 1, 2007"
#define DRV_MODULE_VERSION	"1.5.6"
#define DRV_MODULE_RELDATE	"March 28, 2007"

#define RUN_AT(x) (jiffies + (x))

@@ -2033,8 +2033,8 @@ bnx2_has_work(struct bnx2 *bp)
	    (sblk->status_tx_quick_consumer_index0 != bp->hw_tx_cons))
		return 1;

	if (((sblk->status_attn_bits & STATUS_ATTN_BITS_LINK_STATE) != 0) !=
	    bp->link_up)
	if ((sblk->status_attn_bits & STATUS_ATTN_BITS_LINK_STATE) !=
	    (sblk->status_attn_bits_ack & STATUS_ATTN_BITS_LINK_STATE))
		return 1;

	return 0;
+13 −22
Original line number Diff line number Diff line
@@ -96,17 +96,24 @@ static void ri_tasklet(unsigned long dev)
		skb->tc_verd = SET_TC_NCLS(skb->tc_verd);
		stats->tx_packets++;
		stats->tx_bytes +=skb->len;

		skb->dev = __dev_get_by_index(skb->iif);
		if (!skb->dev) {
			dev_kfree_skb(skb);
			stats->tx_dropped++;
			break;
		}
		skb->iif = _dev->ifindex;

		if (from & AT_EGRESS) {
			dp->st_rx_frm_egr++;
			dev_queue_xmit(skb);
		} else if (from & AT_INGRESS) {

			dp->st_rx_frm_ing++;
			skb_pull(skb, skb->dev->hard_header_len);
			netif_rx(skb);
		} else {
			dev_kfree_skb(skb);
			stats->tx_dropped++;
		}
		} else
			BUG();
	}

	if (netif_tx_trylock(_dev)) {
@@ -157,26 +164,10 @@ static int ifb_xmit(struct sk_buff *skb, struct net_device *dev)
	stats->rx_packets++;
	stats->rx_bytes+=skb->len;

	if (!from || !skb->input_dev) {
dropped:
	if (!(from & (AT_INGRESS|AT_EGRESS)) || !skb->iif) {
		dev_kfree_skb(skb);
		stats->rx_dropped++;
		return ret;
	} else {
		/*
		 * note we could be going
		 * ingress -> egress or
		 * egress -> ingress
		*/
		skb->dev = skb->input_dev;
		skb->input_dev = dev;
		if (from & AT_INGRESS) {
			skb_pull(skb, skb->dev->hard_header_len);
		} else {
			if (!(from & AT_EGRESS)) {
				goto dropped;
			}
		}
	}

	if (skb_queue_len(&dp->rq) >= dev->tx_queue_len) {
+3 −2
Original line number Diff line number Diff line
@@ -188,7 +188,7 @@ enum {
 *	@sk: Socket we are owned by
 *	@tstamp: Time we arrived
 *	@dev: Device we arrived on/are leaving by
 *	@input_dev: Device we arrived on
 *	@iif: ifindex of device we arrived on
 *	@h: Transport layer header
 *	@nh: Network layer header
 *	@mac: Link layer header
@@ -235,7 +235,8 @@ struct sk_buff {
	struct sock		*sk;
	struct skb_timeval	tstamp;
	struct net_device	*dev;
	struct net_device	*input_dev;
	int			iif;
	/* 4 byte hole on 64 bit*/

	union {
		struct tcphdr	*th;
+5 −2
Original line number Diff line number Diff line
@@ -352,10 +352,13 @@ tcf_change_indev(struct tcf_proto *tp, char *indev, struct rtattr *indev_tlv)
static inline int
tcf_match_indev(struct sk_buff *skb, char *indev)
{
	struct net_device *dev;

	if (indev[0]) {
		if  (!skb->input_dev)
		if  (!skb->iif)
			return 0;
		if (strcmp(indev, skb->input_dev->name))
		dev = __dev_get_by_index(skb->iif);
		if (!dev || strcmp(indev, dev->name))
			return 0;
	}

+4 −4
Original line number Diff line number Diff line
@@ -1741,8 +1741,8 @@ static int ing_filter(struct sk_buff *skb)
	if (dev->qdisc_ingress) {
		__u32 ttl = (__u32) G_TC_RTTL(skb->tc_verd);
		if (MAX_RED_LOOP < ttl++) {
			printk(KERN_WARNING "Redir loop detected Dropping packet (%s->%s)\n",
				skb->input_dev->name, skb->dev->name);
			printk(KERN_WARNING "Redir loop detected Dropping packet (%d->%d)\n",
				skb->iif, skb->dev->ifindex);
			return TC_ACT_SHOT;
		}

@@ -1775,8 +1775,8 @@ int netif_receive_skb(struct sk_buff *skb)
	if (!skb->tstamp.off_sec)
		net_timestamp(skb);

	if (!skb->input_dev)
		skb->input_dev = skb->dev;
	if (!skb->iif)
		skb->iif = skb->dev->ifindex;

	orig_dev = skb_bond(skb);

Loading