Commit ad8fc41c authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net-convert-tasklets-to-use-new-tasklet_setup-api'

Allen Pais says:

====================
net: convert tasklets to use new tasklet_setup API

Commit 12cc923f ("tasklet: Introduce new initialization API")'
introduced a new tasklet initialization API. This series converts
all the net/* drivers to use the new tasklet_setup() API

The following series is based on net-next (9faebeb2)

v3:
 introduce qdisc_from_priv, suggested by Eric Dumazet.
v2:
  get rid of QDISC_ALIGN()
v1:
  fix kerneldoc
====================

Link: https://lore.kernel.org/r/20201103091823.586717-1-allen.lkml@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents ae0d0bb2 158d31da
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -24,6 +24,11 @@ static inline void *qdisc_priv(struct Qdisc *q)
	return &q->privdata;
}

static inline struct Qdisc *qdisc_from_priv(void *priv)
{
	return container_of(priv, struct Qdisc, privdata);
}

/* 
   Timer resolution MUST BE < 10% of min_schedulable_packet_size/bandwidth
   
+6 −6
Original line number Diff line number Diff line
@@ -215,13 +215,14 @@ static void dccp_delack_timer(struct timer_list *t)

/**
 * dccp_write_xmitlet  -  Workhorse for CCID packet dequeueing interface
 * @data: Socket to act on
 * @t: pointer to the tasklet associated with this handler
 *
 * See the comments above %ccid_dequeueing_decision for supported modes.
 */
static void dccp_write_xmitlet(unsigned long data)
static void dccp_write_xmitlet(struct tasklet_struct *t)
{
	struct sock *sk = (struct sock *)data;
	struct dccp_sock *dp = from_tasklet(dp, t, dccps_xmitlet);
	struct sock *sk = &dp->dccps_inet_connection.icsk_inet.sk;

	bh_lock_sock(sk);
	if (sock_owned_by_user(sk))
@@ -235,16 +236,15 @@ static void dccp_write_xmitlet(unsigned long data)
static void dccp_write_xmit_timer(struct timer_list *t)
{
	struct dccp_sock *dp = from_timer(dp, t, dccps_xmit_timer);
	struct sock *sk = &dp->dccps_inet_connection.icsk_inet.sk;

	dccp_write_xmitlet((unsigned long)sk);
	dccp_write_xmitlet(&dp->dccps_xmitlet);
}

void dccp_init_xmit_timers(struct sock *sk)
{
	struct dccp_sock *dp = dccp_sk(sk);

	tasklet_init(&dp->dccps_xmitlet, dccp_write_xmitlet, (unsigned long)sk);
	tasklet_setup(&dp->dccps_xmitlet, dccp_write_xmitlet);
	timer_setup(&dp->dccps_xmit_timer, dccp_write_xmit_timer, 0);
	inet_csk_init_xmit_timers(sk, &dccp_write_timer, &dccp_delack_timer,
				  &dccp_keepalive_timer);
+3 −5
Original line number Diff line number Diff line
@@ -1038,9 +1038,9 @@ static void tcp_tsq_handler(struct sock *sk)
 * transferring tsq->head because tcp_wfree() might
 * interrupt us (non NAPI drivers)
 */
static void tcp_tasklet_func(unsigned long data)
static void tcp_tasklet_func(struct tasklet_struct *t)
{
	struct tsq_tasklet *tsq = (struct tsq_tasklet *)data;
	struct tsq_tasklet *tsq = from_tasklet(tsq,  t, tasklet);
	LIST_HEAD(list);
	unsigned long flags;
	struct list_head *q, *n;
@@ -1125,9 +1125,7 @@ void __init tcp_tasklet_init(void)
		struct tsq_tasklet *tsq = &per_cpu(tsq_tasklet, i);

		INIT_LIST_HEAD(&tsq->head);
		tasklet_init(&tsq->tasklet,
			     tcp_tasklet_func,
			     (unsigned long)tsq);
		tasklet_setup(&tsq->tasklet, tcp_tasklet_func);
	}
}

+2 −2
Original line number Diff line number Diff line
@@ -1795,7 +1795,7 @@ static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata)

/* tx handling */
void ieee80211_clear_tx_pending(struct ieee80211_local *local);
void ieee80211_tx_pending(unsigned long data);
void ieee80211_tx_pending(struct tasklet_struct *t);
netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
					 struct net_device *dev);
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
@@ -2146,7 +2146,7 @@ void ieee80211_txq_remove_vlan(struct ieee80211_local *local,
			       struct ieee80211_sub_if_data *sdata);
void ieee80211_fill_txq_stats(struct cfg80211_txq_stats *txqstats,
			      struct txq_info *txqi);
void ieee80211_wake_txqs(unsigned long data);
void ieee80211_wake_txqs(struct tasklet_struct *t);
void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
			 u16 transaction, u16 auth_alg, u16 status,
			 const u8 *extra, size_t extra_len, const u8 *bssid,
+5 −9
Original line number Diff line number Diff line
@@ -220,9 +220,9 @@ u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
	       BSS_CHANGED_ERP_SLOT;
}

static void ieee80211_tasklet_handler(unsigned long data)
static void ieee80211_tasklet_handler(struct tasklet_struct *t)
{
	struct ieee80211_local *local = (struct ieee80211_local *) data;
	struct ieee80211_local *local = from_tasklet(local, t, tasklet);
	struct sk_buff *skb;

	while ((skb = skb_dequeue(&local->skb_queue)) ||
@@ -733,16 +733,12 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
		skb_queue_head_init(&local->pending[i]);
		atomic_set(&local->agg_queue_stop[i], 0);
	}
	tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
		     (unsigned long)local);
	tasklet_setup(&local->tx_pending_tasklet, ieee80211_tx_pending);

	if (ops->wake_tx_queue)
		tasklet_init(&local->wake_txqs_tasklet, ieee80211_wake_txqs,
			     (unsigned long)local);
		tasklet_setup(&local->wake_txqs_tasklet, ieee80211_wake_txqs);

	tasklet_init(&local->tasklet,
		     ieee80211_tasklet_handler,
		     (unsigned long) local);
	tasklet_setup(&local->tasklet, ieee80211_tasklet_handler);

	skb_queue_head_init(&local->skb_queue);
	skb_queue_head_init(&local->skb_queue_unreliable);
Loading