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

Commit 8a83d939 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'dev_kfree_skb_any'



Eric W. Biederman says:

====================
Using dev_kfree_skb_any for functions called in multiple contexts

This patchset should be an uncontroversial set of changes to change
dev_kfree_skb to dev_kfree_skb_any for code paths that are called in
hard irq contexts in addition to other contexts.  netpoll is the reason
this code gets called in multiple contexts.

There is more coming but these changes are a good starting place, and
stand on their own.

Since the last round changes to the rx path have been removed netpoll
will changed to avoid that.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
parents d52afde9 c9974ad4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2479,7 +2479,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
	return NETDEV_TX_OK;
err_free:
	/* no suitable interface, frame not sent */
	kfree_skb(skb);
	dev_kfree_skb_any(skb);
	goto out;
}

+1 −1
Original line number Diff line number Diff line
@@ -1464,7 +1464,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
	}

	/* no suitable interface, frame not sent */
	kfree_skb(skb);
	dev_kfree_skb_any(skb);
out:
	return NETDEV_TX_OK;
}
+5 −5
Original line number Diff line number Diff line
@@ -3548,7 +3548,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int sl
		}
	}
	/* no slave that can tx has been found */
	kfree_skb(skb);
	dev_kfree_skb_any(skb);
}

/**
@@ -3624,7 +3624,7 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d
	if (slave)
		bond_dev_queue_xmit(bond, skb, slave->dev);
	else
		kfree_skb(skb);
		dev_kfree_skb_any(skb);

	return NETDEV_TX_OK;
}
@@ -3667,7 +3667,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
	if (slave && IS_UP(slave->dev) && slave->link == BOND_LINK_UP)
		bond_dev_queue_xmit(bond, skb, slave->dev);
	else
		kfree_skb(skb);
		dev_kfree_skb_any(skb);

	return NETDEV_TX_OK;
}
@@ -3754,7 +3754,7 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
		pr_err("%s: Error: Unknown bonding mode %d\n",
		       dev->name, bond->params.mode);
		WARN_ON_ONCE(1);
		kfree_skb(skb);
		dev_kfree_skb_any(skb);
		return NETDEV_TX_OK;
	}
}
@@ -3775,7 +3775,7 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
	if (bond_has_slaves(bond))
		ret = __bond_start_xmit(skb, dev);
	else
		kfree_skb(skb);
		dev_kfree_skb_any(skb);
	rcu_read_unlock();

	return ret;
+3 −3
Original line number Diff line number Diff line
@@ -2885,7 +2885,7 @@ bnx2_tx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
		sw_cons = BNX2_NEXT_TX_BD(sw_cons);

		tx_bytes += skb->len;
		dev_kfree_skb(skb);
		dev_kfree_skb_any(skb);
		tx_pkt++;
		if (tx_pkt == budget)
			break;
@@ -6604,7 +6604,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)

	mapping = dma_map_single(&bp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE);
	if (dma_mapping_error(&bp->pdev->dev, mapping)) {
		dev_kfree_skb(skb);
		dev_kfree_skb_any(skb);
		return NETDEV_TX_OK;
	}

@@ -6697,7 +6697,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
			       PCI_DMA_TODEVICE);
	}

	dev_kfree_skb(skb);
	dev_kfree_skb_any(skb);
	return NETDEV_TX_OK;
}

+7 −7
Original line number Diff line number Diff line
@@ -6593,7 +6593,7 @@ static void tg3_tx(struct tg3_napi *tnapi)
		pkts_compl++;
		bytes_compl += skb->len;

		dev_kfree_skb(skb);
		dev_kfree_skb_any(skb);

		if (unlikely(tx_bug)) {
			tg3_tx_recover(tp);
@@ -6924,7 +6924,7 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)

		if (len > (tp->dev->mtu + ETH_HLEN) &&
		    skb->protocol != htons(ETH_P_8021Q)) {
			dev_kfree_skb(skb);
			dev_kfree_skb_any(skb);
			goto drop_it_no_recycle;
		}

@@ -7807,7 +7807,7 @@ static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
					  PCI_DMA_TODEVICE);
		/* Make sure the mapping succeeded */
		if (pci_dma_mapping_error(tp->pdev, new_addr)) {
			dev_kfree_skb(new_skb);
			dev_kfree_skb_any(new_skb);
			ret = -1;
		} else {
			u32 save_entry = *entry;
@@ -7822,13 +7822,13 @@ static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
					    new_skb->len, base_flags,
					    mss, vlan)) {
				tg3_tx_skb_unmap(tnapi, save_entry, -1);
				dev_kfree_skb(new_skb);
				dev_kfree_skb_any(new_skb);
				ret = -1;
			}
		}
	}

	dev_kfree_skb(skb);
	dev_kfree_skb_any(skb);
	*pskb = new_skb;
	return ret;
}
@@ -7871,7 +7871,7 @@ static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
	} while (segs);

tg3_tso_bug_end:
	dev_kfree_skb(skb);
	dev_kfree_skb_any(skb);

	return NETDEV_TX_OK;
}
@@ -8093,7 +8093,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
	tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
	tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
drop:
	dev_kfree_skb(skb);
	dev_kfree_skb_any(skb);
drop_nofree:
	tp->tx_dropped++;
	return NETDEV_TX_OK;
Loading