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

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

netdev: Move next_sched into struct netdev_queue.



We schedule queues, not the device, for output queue processing in BH.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 74d58a0c
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -454,6 +454,7 @@ struct netdev_queue {
	struct Qdisc		*qdisc;
	struct Qdisc		*qdisc_sleeping;
	struct list_head	qdisc_list;
	struct netdev_queue	*next_sched;
};

/*
@@ -545,8 +546,6 @@ struct net_device
#define NETIF_F_V6_CSUM		(NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
#define NETIF_F_ALL_CSUM	(NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)

	struct net_device	*next_sched;

	/* Interface index. Unique device identifier	*/
	int			ifindex;
	int			iflink;
@@ -940,7 +939,7 @@ static inline int unregister_gifconf(unsigned int family)
 */
struct softnet_data
{
	struct net_device	*output_queue;
	struct netdev_queue	*output_queue;
	struct sk_buff_head	input_pkt_queue;
	struct list_head	poll_list;
	struct sk_buff		*completion_queue;
+7 −8
Original line number Diff line number Diff line
@@ -1323,13 +1323,14 @@ static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)
void __netif_schedule(struct net_device *dev)
{
	if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) {
		struct netdev_queue *txq = &dev->tx_queue;
		unsigned long flags;
		struct softnet_data *sd;

		local_irq_save(flags);
		sd = &__get_cpu_var(softnet_data);
		dev->next_sched = sd->output_queue;
		sd->output_queue = dev;
		txq->next_sched = sd->output_queue;
		sd->output_queue = txq;
		raise_softirq_irqoff(NET_TX_SOFTIRQ);
		local_irq_restore(flags);
	}
@@ -1912,7 +1913,7 @@ static void net_tx_action(struct softirq_action *h)
	}

	if (sd->output_queue) {
		struct net_device *head;
		struct netdev_queue *head;

		local_irq_disable();
		head = sd->output_queue;
@@ -1920,12 +1921,10 @@ static void net_tx_action(struct softirq_action *h)
		local_irq_enable();

		while (head) {
			struct net_device *dev = head;
			struct netdev_queue *txq;
			struct netdev_queue *txq = head;
			struct net_device *dev = txq->dev;
			head = head->next_sched;

			txq = &dev->tx_queue;

			smp_mb__before_clear_bit();
			clear_bit(__LINK_STATE_SCHED, &dev->state);

@@ -4346,7 +4345,7 @@ static int dev_cpu_callback(struct notifier_block *nfb,
			    void *ocpu)
{
	struct sk_buff **list_skb;
	struct net_device **list_net;
	struct netdev_queue **list_net;
	struct sk_buff *skb;
	unsigned int cpu, oldcpu = (unsigned long)ocpu;
	struct softnet_data *sd, *oldsd;