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

Commit 5c6c82df authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo
Browse files

ath10k: remove wmi event worker thread



It's not really necessary to have this processed
in a worker. There are no sleepable calls (and
actually shouldn't be).

Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 7cc23016
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -113,9 +113,6 @@ struct ath10k_wmi {
	struct completion service_ready;
	struct completion service_ready;
	struct completion unified_ready;
	struct completion unified_ready;
	wait_queue_head_t tx_credits_wq;
	wait_queue_head_t tx_credits_wq;

	struct sk_buff_head wmi_event_list;
	struct work_struct wmi_event_work;
};
};


struct ath10k_peer_stat {
struct ath10k_peer_stat {
+1 −43
Original line number Original line Diff line number Diff line
@@ -1055,7 +1055,7 @@ static int ath10k_wmi_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
	return 0;
	return 0;
}
}


static void ath10k_wmi_event_process(struct ath10k *ar, struct sk_buff *skb)
static void ath10k_wmi_process_rx(struct ath10k *ar, struct sk_buff *skb)
{
{
	struct wmi_cmd_hdr *cmd_hdr;
	struct wmi_cmd_hdr *cmd_hdr;
	enum wmi_event_id id;
	enum wmi_event_id id;
@@ -1174,43 +1174,6 @@ static void ath10k_wmi_event_process(struct ath10k *ar, struct sk_buff *skb)
	dev_kfree_skb(skb);
	dev_kfree_skb(skb);
}
}


static void ath10k_wmi_event_work(struct work_struct *work)
{
	struct ath10k *ar = container_of(work, struct ath10k,
					 wmi.wmi_event_work);
	struct sk_buff *skb;

	for (;;) {
		skb = skb_dequeue(&ar->wmi.wmi_event_list);
		if (!skb)
			break;

		ath10k_wmi_event_process(ar, skb);
	}
}

static void ath10k_wmi_process_rx(struct ath10k *ar, struct sk_buff *skb)
{
	struct wmi_cmd_hdr *cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
	enum wmi_event_id event_id;

	event_id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID);

	/* some events require to be handled ASAP
	 * thus can't be defered to a worker thread */
	switch (event_id) {
	case WMI_MGMT_RX_EVENTID:
	case WMI_HOST_SWBA_EVENTID:
		ath10k_wmi_event_process(ar, skb);
		return;
	default:
		break;
	}

	skb_queue_tail(&ar->wmi.wmi_event_list, skb);
	queue_work(ar->workqueue, &ar->wmi.wmi_event_work);
}

/* WMI Initialization functions */
/* WMI Initialization functions */
int ath10k_wmi_attach(struct ath10k *ar)
int ath10k_wmi_attach(struct ath10k *ar)
{
{
@@ -1218,16 +1181,11 @@ int ath10k_wmi_attach(struct ath10k *ar)
	init_completion(&ar->wmi.unified_ready);
	init_completion(&ar->wmi.unified_ready);
	init_waitqueue_head(&ar->wmi.tx_credits_wq);
	init_waitqueue_head(&ar->wmi.tx_credits_wq);


	skb_queue_head_init(&ar->wmi.wmi_event_list);
	INIT_WORK(&ar->wmi.wmi_event_work, ath10k_wmi_event_work);

	return 0;
	return 0;
}
}


void ath10k_wmi_detach(struct ath10k *ar)
void ath10k_wmi_detach(struct ath10k *ar)
{
{
	cancel_work_sync(&ar->wmi.wmi_event_work);
	skb_queue_purge(&ar->wmi.wmi_event_list);
}
}


int ath10k_wmi_connect_htc_service(struct ath10k *ar)
int ath10k_wmi_connect_htc_service(struct ath10k *ar)