From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB747C433EF for ; Mon, 11 Apr 2022 15:16:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347741AbiDKPTJ (ORCPT ); Mon, 11 Apr 2022 11:19:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347731AbiDKPSx (ORCPT ); Mon, 11 Apr 2022 11:18:53 -0400 Received: from beige.elm.relay.mailchannels.net (beige.elm.relay.mailchannels.net [23.83.212.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26712B1D3 for ; Mon, 11 Apr 2022 08:16:37 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 6A05A22400; Mon, 11 Apr 2022 15:16:34 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 7FD7922A57; Mon, 11 Apr 2022 15:16:33 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690193; a=rsa-sha256; cv=none; b=uFmirawn8VXJ17kg3ctxX2LHmz75Cb7Kqz0QaA/8ErahmBRId03fpO7BKDwCWWukbp8ue6 SSL777fQgBhuK29qqBGYUBNX7jnbM4BRwt63+ndI/JowDn7qS4YVJM0lGKOdJDdayDaCt8 c3K44JZ6IF2ZssV++E41QLWNZpxbpN49kepZRv5QAW2G2LNy8LRVslxI7gzepySGJe9+ta j46sK9nDKqgGWxdfKY3GG4QEXvboN/ax0aAGYsvNkoScfcgCig9P8HU+mKBf9y46gudgz6 F6Fj1NEjUsOurCs8XDYB4bro9//PE3DeW+Ap1Ml76lao7mRrjZbLMsOPBu4lgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690193; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=KnsgWCrmXA8Rcv/KOO/9y4OP+M/ua1Izb2uMyIZ9qZ4=; b=xcBDrmH1m/Y1M0KVp0kvqVyIGxVAjYfKB2dl3DCd1Eq9lGBexa/r/euYBzWo1/YOyDEaFi IQuSNuMbZnV7LhmbGAxXJ/D3E4F0CoizhULf1xX9HLgYT/p7I9aqSxwZhAtui5NnGXWqdH oH38kZby9cij80qIxbf2m7KTn9cU2FkYwRSuf2JWzrspP/+QRYYQJu+Jg/EXM7N0go2Rye pby9EeUzKZDUQY7Vz15SKmjk5hHJWvHtIOWqWfqnJc5yDKBUR8z1+vbSf6rG3OfRHs/mYq CoHgYjwIjHrLYTQ9b4/t3z4pDq2LINThUyXQQU6opRMtwQQW2O8ArKb2w9+NGg== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-8mcww; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.120.38.135 (trex/6.7.1); Mon, 11 Apr 2022 15:16:34 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Wiry-Bubble: 583918570618a022_1649690193995_4056338885 X-MC-Loop-Signature: 1649690193995:1015188680 X-MC-Ingress-Time: 1649690193994 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWK2tWtz32; Mon, 11 Apr 2022 08:16:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690189; bh=KnsgWCrmXA8Rcv/KOO/9y4OP+M/ua1Izb2uMyIZ9qZ4=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=rbYqobj07NcPFsyO7asS4G/CP1GQ+vYYxTg35zI8quU7AhqKeVfuyDSH9LrhjeZdD Gd5l+U0UM8QUE5OREci8G22/AE5Q7uUOOUigUaxk1dknA1d1rDfHG1lSBQMRhZQjiV O1q0pyKw/nTsX8jF5Q12m5SBrD18deAQExbzogpW9oKga9VBB10JmSXY99bDUKNHaz Ik+amL+/MMURiNKrx/CcUBTMmbG3v6F3B9d3XS5su4++2BL5Cjy4QO2j4T8sEm/qkR txaSp1Q8bNXCN9JzycSlXI0QAel+YHkFc8eL0o7mIRxK6NT1aiBVCnfU83U7i5otgY tBHcPGe8LHhag== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 1/6] staging/most, dim2: convert dim2_tasklet to threaded irq Date: Mon, 11 Apr 2022 08:16:15 -0700 Message-Id: <20220411151620.129178-2-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tasklets have long been deprecated as being too heavy on the system by running in irq context - and this is not a performance critical path. If a higher priority process wants to run, it must wait for the tasklet to finish before doing so. A more suitable equivalent is to converted to threaded irq instead and service channels in regular task context. Signed-off-by: Davidlohr Bueso --- drivers/staging/most/dim2/dim2.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/drivers/staging/most/dim2/dim2.c b/drivers/staging/most/dim2/d= im2.c index 29f8ce2a47f5..97dff82b7a5f 100644 --- a/drivers/staging/most/dim2/dim2.c +++ b/drivers/staging/most/dim2/dim2.c @@ -45,9 +45,6 @@ MODULE_PARM_DESC(fcnt, "Num of frames per sub-buffer for = sync channels as a powe =20 static DEFINE_SPINLOCK(dim_lock); =20 -static void dim2_tasklet_fn(unsigned long data); -static DECLARE_TASKLET_OLD(dim2_tasklet, dim2_tasklet_fn); - /** * struct hdm_channel - private structure to keep channel specific data * @name: channel name @@ -361,15 +358,9 @@ static irqreturn_t dim2_mlb_isr(int irq, void *_dev) return IRQ_HANDLED; } =20 -/** - * dim2_tasklet_fn - tasklet function - * @data: private data - * - * Service each initialized channel, if needed - */ -static void dim2_tasklet_fn(unsigned long data) +static irqreturn_t dim2_task_irq(int irq, void *_dev) { - struct dim2_hdm *dev =3D (struct dim2_hdm *)data; + struct dim2_hdm *dev =3D _dev; unsigned long flags; int ch_idx; =20 @@ -385,6 +376,8 @@ static void dim2_tasklet_fn(unsigned long data) while (!try_start_dim_transfer(dev->hch + ch_idx)) continue; } + + return IRQ_HANDLED; } =20 /** @@ -392,8 +385,8 @@ static void dim2_tasklet_fn(unsigned long data) * @irq: irq number * @_dev: private data * - * Acknowledge the interrupt and schedule a tasklet to service channels. - * Return IRQ_HANDLED. + * Acknowledge the interrupt and service each initialized channel, + * if needed, in task context. */ static irqreturn_t dim2_ahb_isr(int irq, void *_dev) { @@ -405,9 +398,7 @@ static irqreturn_t dim2_ahb_isr(int irq, void *_dev) dim_service_ahb_int_irq(get_active_channels(dev, buffer)); spin_unlock_irqrestore(&dim_lock, flags); =20 - dim2_tasklet.data =3D (unsigned long)dev; - tasklet_schedule(&dim2_tasklet); - return IRQ_HANDLED; + return IRQ_WAKE_THREAD; } =20 /** @@ -654,14 +645,12 @@ static int poison_channel(struct most_interface *most= _iface, int ch_idx) if (!hdm_ch->is_initialized) return -EPERM; =20 - tasklet_disable(&dim2_tasklet); spin_lock_irqsave(&dim_lock, flags); hal_ret =3D dim_destroy_channel(&hdm_ch->ch); hdm_ch->is_initialized =3D false; if (ch_idx =3D=3D dev->atx_idx) dev->atx_idx =3D -1; spin_unlock_irqrestore(&dim_lock, flags); - tasklet_enable(&dim2_tasklet); if (hal_ret !=3D DIM_NO_ERROR) { pr_err("HAL Failed to close channel %s\n", hdm_ch->name); ret =3D -EFAULT; @@ -821,8 +810,8 @@ static int dim2_probe(struct platform_device *pdev) goto err_shutdown_dim; } =20 - ret =3D devm_request_irq(&pdev->dev, irq, dim2_ahb_isr, 0, - "dim2_ahb0_int", dev); + ret =3D devm_request_threaded_irq(&pdev->dev, irq, dim2_ahb_isr, + dim2_task_irq, 0, "dim2_ahb0_int", dev); if (ret) { dev_err(&pdev->dev, "failed to request ahb0_int irq %d\n", irq); goto err_shutdown_dim; --=20 2.26.2 From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4041C433EF for ; Mon, 11 Apr 2022 15:16:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347757AbiDKPTE (ORCPT ); Mon, 11 Apr 2022 11:19:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347726AbiDKPSt (ORCPT ); Mon, 11 Apr 2022 11:18:49 -0400 Received: from beige.elm.relay.mailchannels.net (beige.elm.relay.mailchannels.net [23.83.212.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11980B1DA for ; Mon, 11 Apr 2022 08:16:33 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 580DC6C2F38; Mon, 11 Apr 2022 15:16:31 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 7617B6C2210; Mon, 11 Apr 2022 15:16:30 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690190; a=rsa-sha256; cv=none; b=1w7t/NTBQ48D7hVdmupDPmDxHWaeTFxYb6pzN9ubC71YUxrLByEaZNFyeP0+MGA+pvT9yS /qzzdkb0bfJ8l2JEoienKYWR4ted8L6WKaxieFT5uOivsjVJmyNwcW5lgva+xieVD+SAOg ua//t4quX31z5mqhXhKY52n5AzGMSCIfxCB6WUW6nHtEDM8l3d55Ba5MInWQBRx0o+e3yi cZqmLHUajUq0kiW2tJ4FSQZQ+8YvPCmYutaTaGG3nvQGvA5xXMz7shxVc2OLaxpKsSbSd5 RknaKVWFdhX1umubWAQjtAg6c18Y9520L+y0SxP0KUJaTekuRAJQjC2FEyBebA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690190; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=gtD9/3R3fsIE1iOjF+WezkBbCL5lnD7f+xJAJilt+Nw=; b=8F+08J+WusnXOkwRDsHCfEWUNLn4MvwSqBoqaFR9l9tW1v3F+d/MdHQSd36Nt2sF3pzVIj KjaCWFF8UZLnIAPfZJoBf60KLEfF0m2huEfzOc1sp9KtMZ75uemeCNUuIQJHARetUAcb9D lRT2/x57L/VAKvDtPgOxaY30RxliMTPuSO1EegsRrW7FcZX2Bl87o5SeI2Hw++Vf0tCYkO 2f/yUcnttWdjxynNgjUM+/lsd7UHW1yadZoelNJsUB6sufl5ZXqwuOq/GHRBIfsAzRnDyj EsUDvohF4hKpIRz6yN0c5/mjferPQqxdegBVFV4QvZ9EK1lJtjwBFSDJjjzRXA== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-2ngq6; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.107.255.155 (trex/6.7.1); Mon, 11 Apr 2022 15:16:31 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Eyes-Hook: 360b6eb66c74954e_1649690190844_3488285450 X-MC-Loop-Signature: 1649690190844:1245218366 X-MC-Ingress-Time: 1649690190844 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWK6dnqz1dl; Mon, 11 Apr 2022 08:16:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690190; bh=gtD9/3R3fsIE1iOjF+WezkBbCL5lnD7f+xJAJilt+Nw=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=USChZilcn++JiMdYmi5woxFIzghtZKkNISt7OySSiCWOyrPZkbFGyAxtg2P2UgiPx L/H8/P8LmQL456TiTwN+HqkbiW/PHMELA1ud0hiRTc1o4fakgNhLaSWD0eIu2lJe9X twdDW2Hzm3uQghA+DLBHaHfNTXiew2DfmQDmgZmVNhl1UDlfXix1ZYYABCSx+t8de8 GulYvpuhC9KLF73AcQmfPU5ZqCtiLvAnxhAw95xAaye7/M/zJST73yTcFM5pTXxx+O t8+SfqFRdR4WJ/MmunC7b3q+9iloc9T3UCPiq84NkeBys9jc+saFu0jWDW42T9+gF7 sBkN4EyiWa3jg== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 2/6] staging/wlan-ng, prism2usb: replace reaper_bh tasklet with work Date: Mon, 11 Apr 2022 08:16:16 -0700 Message-Id: <20220411151620.129178-3-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tasklets have long been deprecated as being too heavy on the system by running in irq context - and this is not a performance critical path. If a higher priority process wants to run, it must wait for the tasklet to finish before doing so. The reaper_bh tasklet will now run in process context and have further concurrency (tasklets being serialized among themselves), but this is done holding the ctlxq.lock, so it should be fine. Signed-off-by: Davidlohr Bueso --- drivers/staging/wlan-ng/hfa384x.h | 2 +- drivers/staging/wlan-ng/hfa384x_usb.c | 14 +++++++------- drivers/staging/wlan-ng/prism2usb.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hf= a384x.h index 98c154a8d8c1..7480d808e946 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1227,7 +1227,7 @@ struct hfa384x { =20 struct timer_list throttle; =20 - struct tasklet_struct reaper_bh; + struct work_struct reaper_bh; struct tasklet_struct completion_bh; =20 struct work_struct usb_work; diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-n= g/hfa384x_usb.c index 938e11a1a0b6..4000c321cb3a 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -193,7 +193,7 @@ static void hfa384x_usb_throttlefn(struct timer_list *t= ); =20 static void hfa384x_usbctlx_completion_task(struct tasklet_struct *t); =20 -static void hfa384x_usbctlx_reaper_task(struct tasklet_struct *t); +static void hfa384x_usbctlx_reaper_task(struct work_struct *work); =20 static int hfa384x_usbctlx_submit(struct hfa384x *hw, struct hfa384x_usbctlx *ctlx); @@ -539,7 +539,7 @@ void hfa384x_create(struct hfa384x *hw, struct usb_devi= ce *usb) /* Initialize the authentication queue */ skb_queue_head_init(&hw->authq); =20 - tasklet_setup(&hw->reaper_bh, hfa384x_usbctlx_reaper_task); + INIT_WORK(&hw->reaper_bh, hfa384x_usbctlx_reaper_task); tasklet_setup(&hw->completion_bh, hfa384x_usbctlx_completion_task); INIT_WORK(&hw->link_bh, prism2sta_processing_defer); INIT_WORK(&hw->usb_work, hfa384x_usb_defer); @@ -2585,7 +2585,7 @@ void hfa384x_tx_timeout(struct wlandevice *wlandev) /*---------------------------------------------------------------- * hfa384x_usbctlx_reaper_task * - * Tasklet to delete dead CTLX objects + * Deferred work to delete dead CTLX objects * * Arguments: * data ptr to a struct hfa384x @@ -2593,12 +2593,12 @@ void hfa384x_tx_timeout(struct wlandevice *wlandev) * Returns: * * Call context: - * Interrupt + * Task *---------------------------------------------------------------- */ -static void hfa384x_usbctlx_reaper_task(struct tasklet_struct *t) +static void hfa384x_usbctlx_reaper_task(struct work_struct *work) { - struct hfa384x *hw =3D from_tasklet(hw, t, reaper_bh); + struct hfa384x *hw =3D container_of(work, struct hfa384x, reaper_bh); struct hfa384x_usbctlx *ctlx, *temp; unsigned long flags; =20 @@ -2686,7 +2686,7 @@ static void hfa384x_usbctlx_completion_task(struct ta= sklet_struct *t) spin_unlock_irqrestore(&hw->ctlxq.lock, flags); =20 if (reap) - tasklet_schedule(&hw->reaper_bh); + schedule_work(&hw->reaper_bh); } =20 /*---------------------------------------------------------------- diff --git a/drivers/staging/wlan-ng/prism2usb.c b/drivers/staging/wlan-ng/= prism2usb.c index dc0749b8eff7..36340f36b0cb 100644 --- a/drivers/staging/wlan-ng/prism2usb.c +++ b/drivers/staging/wlan-ng/prism2usb.c @@ -182,7 +182,7 @@ static void prism2sta_disconnect_usb(struct usb_interfa= ce *interface) usb_kill_urb(&hw->ctlx_urb); =20 tasklet_kill(&hw->completion_bh); - tasklet_kill(&hw->reaper_bh); + cancel_work_sync(&hw->reaper_bh); =20 cancel_work_sync(&hw->link_bh); cancel_work_sync(&hw->commsqual_bh); --=20 2.26.2 From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58D59C433F5 for ; Mon, 11 Apr 2022 15:16:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347738AbiDKPSw (ORCPT ); Mon, 11 Apr 2022 11:18:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347717AbiDKPSt (ORCPT ); Mon, 11 Apr 2022 11:18:49 -0400 Received: from beige.elm.relay.mailchannels.net (beige.elm.relay.mailchannels.net [23.83.212.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1176FB1D9 for ; Mon, 11 Apr 2022 08:16:33 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 0DF182A1AA4; Mon, 11 Apr 2022 15:16:32 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 440782A0660; Mon, 11 Apr 2022 15:16:31 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690191; a=rsa-sha256; cv=none; b=R3Qy7j2CxCeHE33za07uHVO9smPjxoQPWj9jAsGI+kG6ouxaqJa+qZxL/KfKM6vZi9HaRx k8qtollpAVrlK4TGC0ML64p8vUpClO87ao/eBOApECEYFoQJJUCvODMi53eUGZLCUUTt7T 6SK1gkzbj7hDWS2Qin6PQzs5p7rJIgr+HbZPgUd7T4Vcqfe2HTM5+E3XDwvjg7Ttu+PM1T IOofzls6FNX6iwu0y6sbMo8AdK+kiPZUyR5ajviy35hQQtC+OxkMOdmv6KJKCpSuaiBVQO rN7+luYcEOyPgpelT32UlZM44SyscoYHbGphXIxyCz6MgzmMS/398ILt8fDyXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690191; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=87rjyv1fYVQxYjTypozOdzalmHJuGl6PHh8Q3KobcEk=; b=M/y+FdQ4Tc4sUtXHezQ/D44aWWrLa+s8abZdRgW6QypZIa0IAdjOrHqXGYvXHwGavVVuBC PkiWc37e7fR5zeHZX38MLkRtfLUvZEQa+2QSMaApD8Oep5Vkb74YLbrI6iKMQDLfY9XGIk fZROUSTQhFh0kObt1MIc292UlkMsAUA8znNfhHWQmLXr5ZU4naOqeczJ9mXceUMHtzKKw9 7Cl+7reZF0TeaN8+6/Dw8hyC49DGSQcvTKuPktuq7cIfE0Plb+U48V0+KmsB88O6MXqZ7X ENsRBE56oJZ/ezXaMY6G9mvJvxCTG1XRFYx9r9sLpdE/95Ri0ad5qsien3oNKA== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-f7pqt; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.121.210.137 (trex/6.7.1); Mon, 11 Apr 2022 15:16:31 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Trail-Harbor: 66e32e3c11eaf707_1649690191792_2463292124 X-MC-Loop-Signature: 1649690191791:3362250161 X-MC-Ingress-Time: 1649690191791 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWL3S74z1f0; Mon, 11 Apr 2022 08:16:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690190; bh=87rjyv1fYVQxYjTypozOdzalmHJuGl6PHh8Q3KobcEk=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=fmOqCt+sUZYt4VcH9xHkIXdUKd6Ka4/vh+oG5MBfco2H3oin0Pn6BltKg4yNLjE57 wQEbd+lJovFAuCNYt+qGUjW3L8vg7/Si/f9NyVBRDCox8ZVD8L21Flo3Ox2KTdD1RM vvesHy0EYAqa35/lZxB35En0dHZHt3U6bua0AhmnqBFxSL/PcijH2To1D0NrYgChZh fMkle/S5IkSjXZItDBxEnbJwlR14lR98JCujQ4pZ0Kji+vv4iySfDBdgw6uvXG4MSO saszd8+zr0v/WVznu+30WgWdSTRoNG4LzLTTNUa2iaA+EfDGRlr5sHDu76r6m0MFAm etw8BWGrH9W4A== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 3/6] staging/wlan-ng, prism2usb: replace completion_bh tasklet with work Date: Mon, 11 Apr 2022 08:16:17 -0700 Message-Id: <20220411151620.129178-4-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tasklets have long been deprecated as being too heavy on the system by running in irq context - and this is not a performance critical path. If a higher priority process wants to run, it must wait for the tasklet to finish before doing so. The completion_bh tasklet will now run in process context and have further concurrency (tasklets being serialized among themselves), but this is done holding the ctlxq.lock, so it should be fine. Signed-off-by: Davidlohr Bueso --- drivers/staging/wlan-ng/hfa384x.h | 2 +- drivers/staging/wlan-ng/hfa384x_usb.c | 22 +++++++++++----------- drivers/staging/wlan-ng/prism2usb.c | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hf= a384x.h index 7480d808e946..0611e37df6ac 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1228,7 +1228,7 @@ struct hfa384x { struct timer_list throttle; =20 struct work_struct reaper_bh; - struct tasklet_struct completion_bh; + struct work_struct completion_bh; =20 struct work_struct usb_work; =20 diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-n= g/hfa384x_usb.c index 4000c321cb3a..33844526c797 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -191,7 +191,7 @@ static void hfa384x_usbctlx_resptimerfn(struct timer_li= st *t); =20 static void hfa384x_usb_throttlefn(struct timer_list *t); =20 -static void hfa384x_usbctlx_completion_task(struct tasklet_struct *t); +static void hfa384x_usbctlx_completion_task(struct work_struct *work); =20 static void hfa384x_usbctlx_reaper_task(struct work_struct *work); =20 @@ -540,7 +540,7 @@ void hfa384x_create(struct hfa384x *hw, struct usb_devi= ce *usb) skb_queue_head_init(&hw->authq); =20 INIT_WORK(&hw->reaper_bh, hfa384x_usbctlx_reaper_task); - tasklet_setup(&hw->completion_bh, hfa384x_usbctlx_completion_task); + INIT_WORK(&hw->completion_bh, hfa384x_usbctlx_completion_task); INIT_WORK(&hw->link_bh, prism2sta_processing_defer); INIT_WORK(&hw->usb_work, hfa384x_usb_defer); =20 @@ -2585,10 +2585,10 @@ void hfa384x_tx_timeout(struct wlandevice *wlandev) /*---------------------------------------------------------------- * hfa384x_usbctlx_reaper_task * - * Deferred work to delete dead CTLX objects + * Deferred work callback to delete dead CTLX objects * * Arguments: - * data ptr to a struct hfa384x + * work contains ptr to a struct hfa384x * * Returns: * @@ -2618,21 +2618,21 @@ static void hfa384x_usbctlx_reaper_task(struct work= _struct *work) /*---------------------------------------------------------------- * hfa384x_usbctlx_completion_task * - * Tasklet to call completion handlers for returned CTLXs + * Deferred work callback to call completion handlers for returned CTLXs * * Arguments: - * data ptr to struct hfa384x + * work contains ptr to a struct hfa384x * * Returns: * Nothing * * Call context: - * Interrupt + * Task *---------------------------------------------------------------- */ -static void hfa384x_usbctlx_completion_task(struct tasklet_struct *t) +static void hfa384x_usbctlx_completion_task(struct work_struct *work) { - struct hfa384x *hw =3D from_tasklet(hw, t, completion_bh); + struct hfa384x *hw =3D container_of(work, struct hfa384x, reaper_bh); struct hfa384x_usbctlx *ctlx, *temp; unsigned long flags; =20 @@ -2743,7 +2743,7 @@ static int unlocked_usbctlx_cancel_async(struct hfa38= 4x *hw, * aren't active and the timers should have been stopped. * * The CTLX is migrated to the "completing" queue, and the completing - * tasklet is scheduled. + * work is scheduled. * * Arguments: * hw ptr to a struct hfa384x structure @@ -2766,7 +2766,7 @@ static void unlocked_usbctlx_complete(struct hfa384x = *hw, * queue. */ list_move_tail(&ctlx->list, &hw->ctlxq.completing); - tasklet_schedule(&hw->completion_bh); + schedule_work(&hw->completion_bh); =20 switch (ctlx->state) { case CTLX_COMPLETE: diff --git a/drivers/staging/wlan-ng/prism2usb.c b/drivers/staging/wlan-ng/= prism2usb.c index 36340f36b0cb..e13da7fadfff 100644 --- a/drivers/staging/wlan-ng/prism2usb.c +++ b/drivers/staging/wlan-ng/prism2usb.c @@ -165,8 +165,8 @@ static void prism2sta_disconnect_usb(struct usb_interfa= ce *interface) spin_unlock_irqrestore(&hw->ctlxq.lock, flags); =20 /* There's no hardware to shutdown, but the driver - * might have some tasks or tasklets that must be - * stopped before we can tear everything down. + * might have some tasks that must be stopped before + * we can tear everything down. */ prism2sta_ifstate(wlandev, P80211ENUM_ifstate_disable); =20 @@ -181,7 +181,7 @@ static void prism2sta_disconnect_usb(struct usb_interfa= ce *interface) usb_kill_urb(&hw->tx_urb); usb_kill_urb(&hw->ctlx_urb); =20 - tasklet_kill(&hw->completion_bh); + cancel_work_sync(&hw->completion_bh); cancel_work_sync(&hw->reaper_bh); =20 cancel_work_sync(&hw->link_bh); --=20 2.26.2 From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76AF6C433F5 for ; Mon, 11 Apr 2022 15:16:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347740AbiDKPSz (ORCPT ); Mon, 11 Apr 2022 11:18:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58044 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347720AbiDKPSt (ORCPT ); Mon, 11 Apr 2022 11:18:49 -0400 Received: from bee.birch.relay.mailchannels.net (bee.birch.relay.mailchannels.net [23.83.209.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74F9613F62 for ; Mon, 11 Apr 2022 08:16:34 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 99E6B120FEA; Mon, 11 Apr 2022 15:16:32 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 267B51213A2; Mon, 11 Apr 2022 15:16:32 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690192; a=rsa-sha256; cv=none; b=X9dWjYgRJFSKJjEJ2CwTVUDJX/MbEl9pzlqwSgBiacP/zqkCA6N/HLcc6uxBRtty5yW2C2 j/JocxH84EZhazlK0GgJIv7TvGV0zi08CQuxgrpwmgIomZFPTgJCuaLdJFEv39aBu7fmXF 8fGZOm3DH+CfS6IMtpxKLRJGqwTRGkSbr9ifVG6Me4WTCS+/XluYkfFp9VWQqo4ejzLiQt VK0LZ7w3XSu0Ud7aEAXkderEdp+EeiHQ1NHLVVkqPM0WOlHsZJmQDNqR+3TCRMMHrk/t6W U+Q6SW4InXgLKFgubHleGsKdXIGESBP/Ku+zGXQFvWQW3AmavMpqBCKSJRQ7YA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690192; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=lIguktC5KCMG4rpmY997A98Ux+1JhMsjoSX+Pjzet1E=; b=Fr7+ULlg8KMNbSqtWWKJkbrDCuFFv1klE0+9h2qBuu/bJlkPFEy9LLvx/id5mJXCcUskAM 4Ib1McX6gqS7E7l4XLxCqJ/nvYeaZyDhjJOL/ijSsvZDe7Uub8wJtXLWxyYWSmen3oH0K+ 0yY8VOcqNgFvA7Kxxy7ieNQ9nlUYx4wT3anzHoMW/8o9mu/uT1JpgpPprubnccozytuWKj 7yGR6pM+EGZxyNtryBCVJu9U1uDp9BFMTLIL2IMVm7/k2BCaiYCDCOfW+fgRO9fLWg/fvZ HTrj05UJ2EGO/kN90CveS8xzSdgxT8li9Y5RGhAtpLWFLj213PFpK8rexdYzMw== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-2ngq6; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.124.238.113 (trex/6.7.1); Mon, 11 Apr 2022 15:16:32 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Towering-Versed: 0591524c1969835e_1649690192430_1198574487 X-MC-Loop-Signature: 1649690192429:4073867858 X-MC-Ingress-Time: 1649690192429 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWM0wsBz1dm; Mon, 11 Apr 2022 08:16:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690191; bh=lIguktC5KCMG4rpmY997A98Ux+1JhMsjoSX+Pjzet1E=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=IB+0+Z5hpyC3OimGXmN18sF5uF3nNuMrP2A6o+Lhf52ij2V7LpppOeqmLCqPMXSrq 25IOhswIhSbqVWfn09P42ELHRMVFjZwRP8kAi1S9A+2J9bIYHGa1iFUYJEVlG2u9Ff qR5Ymhg7fyPseNysEaGnALcLqaVeWjmdl9TfigmHPbKJjZV99NYkhvK9hEn5Y8L/OH LuJYZ2BfHF4BRoHyjcyNLMhi8jZ3BxmgEVPp+aDxEq60BFDPjlnH9AunZCpUvU8Gyl V49QOzKIbXT8HIxPZQomedBvaMbyZZL7IXo4BeIxMLKn/gAzmum2Zsq24dEADXS6IF 0i/waCOB9gCaw== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 4/6] staging/ks7010: replace SME taslet with work Date: Mon, 11 Apr 2022 08:16:18 -0700 Message-Id: <20220411151620.129178-5-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tasklets have long been deprecated as being too heavy on the system by running in irq context - and this is not a performance critical path. If a higher priority process wants to run, it must wait for the tasklet to finish before doing so. The execution of the SME event will now occur in task context. There are, however, changes in concurrency. Workqueues, unlike tasklets, are not serialized among themselves and can run concurrently updating sme_i.qhead. However, the current code is already exposed in same ways, regardless of the deferral mechanism, in that hostif_sme_enqueue() does unserialized enqueues updating sme_i.qtail. Also get rid of the bogus (power save) tasklet enabling, as it is never disabled to begin with. Signed-off-by: Davidlohr Bueso --- drivers/staging/ks7010/ks_hostif.c | 21 ++++++++++----------- drivers/staging/ks7010/ks_wlan.h | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/staging/ks7010/ks_hostif.c b/drivers/staging/ks7010/ks= _hostif.c index 1c63d595313d..f1aa3be4261d 100644 --- a/drivers/staging/ks7010/ks_hostif.c +++ b/drivers/staging/ks7010/ks_hostif.c @@ -84,10 +84,6 @@ static void ks_wlan_hw_wakeup_task(struct work_struct *w= ork) return; } } - - /* power save */ - if (atomic_read(&priv->sme_task.count) > 0) - tasklet_enable(&priv->sme_task); } =20 static void ks_wlan_do_power_save(struct ks_wlan_private *priv) @@ -2200,10 +2196,13 @@ static void hostif_sme_execute(struct ks_wlan_priva= te *priv, int event) } } =20 -static -void hostif_sme_task(struct tasklet_struct *t) +static void hostif_sme_work(struct work_struct *work) { - struct ks_wlan_private *priv =3D from_tasklet(priv, t, sme_task); + struct ks_wlan_private *priv; + + priv =3D container_of(work, struct ks_wlan_private, sme_work); + if (!priv) + return; =20 if (priv->dev_state < DEVICE_STATE_BOOT) return; @@ -2214,7 +2213,7 @@ void hostif_sme_task(struct tasklet_struct *t) hostif_sme_execute(priv, priv->sme_i.event_buff[priv->sme_i.qhead]); inc_smeqhead(priv); if (cnt_smeqbody(priv) > 0) - tasklet_schedule(&priv->sme_task); + schedule_work(&priv->sme_work); } =20 /* send to Station Management Entity module */ @@ -2229,7 +2228,7 @@ void hostif_sme_enqueue(struct ks_wlan_private *priv,= u16 event) netdev_err(priv->net_dev, "sme queue buffer overflow\n"); } =20 - tasklet_schedule(&priv->sme_task); + schedule_work(&priv->sme_work); } =20 static inline void hostif_aplist_init(struct ks_wlan_private *priv) @@ -2254,7 +2253,7 @@ static inline void hostif_sme_init(struct ks_wlan_pri= vate *priv) priv->sme_i.qtail =3D 0; spin_lock_init(&priv->sme_i.sme_spin); priv->sme_i.sme_flag =3D 0; - tasklet_setup(&priv->sme_task, hostif_sme_task); + INIT_WORK(&priv->sme_work, hostif_sme_work); } =20 static inline void hostif_wpa_init(struct ks_wlan_private *priv) @@ -2312,5 +2311,5 @@ int hostif_init(struct ks_wlan_private *priv) =20 void hostif_exit(struct ks_wlan_private *priv) { - tasklet_kill(&priv->sme_task); + cancel_work_sync(&priv->sme_work); } diff --git a/drivers/staging/ks7010/ks_wlan.h b/drivers/staging/ks7010/ks_w= lan.h index 7aaf8d780939..3e9a91b5131c 100644 --- a/drivers/staging/ks7010/ks_wlan.h +++ b/drivers/staging/ks7010/ks_wlan.h @@ -449,7 +449,7 @@ struct ks_wlan_private { struct sme_info sme_i; u8 *rxp; unsigned int rx_size; - struct tasklet_struct sme_task; + struct work_struct sme_work; struct work_struct wakeup_work; int scan_ind_count; =20 --=20 2.26.2 From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA49CC433EF for ; Mon, 11 Apr 2022 15:16:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347751AbiDKPTA (ORCPT ); Mon, 11 Apr 2022 11:19:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347725AbiDKPSt (ORCPT ); Mon, 11 Apr 2022 11:18:49 -0400 Received: from beige.elm.relay.mailchannels.net (beige.elm.relay.mailchannels.net [23.83.212.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A5C131DFB for ; Mon, 11 Apr 2022 08:16:34 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 1D69B22855; Mon, 11 Apr 2022 15:16:33 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 9801D22BD5; Mon, 11 Apr 2022 15:16:32 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690192; a=rsa-sha256; cv=none; b=gP2gmTLVxwUmcZEO3ApG6Hxx/i7oKSOIfLD+xJFcp+Y5DfieadtsysmUd2i+OfPPSB+BUx mhpulJrY/eh9qNRp+tzRyaJfVJA18/LHiMLZKnsWXolhD1MJ4aCn85RGxSHBuxefyXJfgK 0R5Yob0HYSQf/GMKGEvNR7P4pAG7yhRxaq09HX+qVk1EYCka+8N4h7f9DnIEr+OG7U5TO2 5ndoYvSg1VK9ytOeYZHMriQdKfb/b7td3dZXdTievSy7t777XJt90+966Z0bo/FLRfzaJb j4r99I5PAux65JiHT2S5wBPLR5jeaDSUKmAs1ZWukepKdbnovW6T1C/A3uREcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690192; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=lR/YiGVQcmetX+2lRuVb/KT4hVGeawzTusjLHsX35/g=; b=XvowLJgUVFwCNo0eOPgV+zTKXBd0O1QbXkbo0OEc4Qv9ZUaNrhZi2wxO2ti8sRX7c7NaSA Cjr+TlJLiOZHtPVhSNs4aSwvnnMHJmnfegGStrkD2UGTEl2hsnqKNgC0giijntCmNj/kgS xnucXgj0fDZHiKVj7J/KsEK4ij4kyq+jxv/eXN6Q38auBJRsWT7Y0gh8iZhdQ2J6aFH7eZ g5Fxqlq489zZhmdSDHDyqZsrkdZA2pnUmi6zhWo4BAiwZfLjohk0A61hpeXXSNynB2WZDa eKRrQJSfE9ysHjn82e4g38udzgaLcYqudRYPmXiqLGc8l6IUyv987xD3Mq5WtA== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-4gr6r; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.112.55.239 (trex/6.7.1); Mon, 11 Apr 2022 15:16:33 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Juvenile-Snatch: 6c997adc33f46124_1649690192901_2500046846 X-MC-Loop-Signature: 1649690192900:3222495231 X-MC-Ingress-Time: 1649690192900 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWM5dB4z1fB; Mon, 11 Apr 2022 08:16:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690192; bh=lR/YiGVQcmetX+2lRuVb/KT4hVGeawzTusjLHsX35/g=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=Daf2KCzyZf8qtZfLVmsu7yPMCs968bFHs8RvhuHlK+gN6w+mrWJBIwGFUfCQmTlJU fviTfD+SFjFU4X9NbN2Qa0yl1z79kN2PzPposOacpIJfHCRQznPMDkpwzinuuxuJtJ 1y6KsMUdssaz0v4I0FLGUBSSMh7VOtfHLQBq5tw7PwUaGBT+MJY2ZpGZ7IwmEt06Rw fTFkpqDm/VWUHZU0hU+kHran149H9kJjFOYO0+3Tn8uhzbd75aEwNRmgZcgLyL763E 7q/vlFd53AO9VX/T7gP+hCUN3ZKT/yLODPvwjB66HJEyxHrS8hZMBqDuynL/8swtEc 6VrzyntmoNNsg== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 5/6] staging/rtl8712: remove event_tasklet Date: Mon, 11 Apr 2022 08:16:19 -0700 Message-Id: <20220411151620.129178-6-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This is unused. Signed-off-by: Davidlohr Bueso --- drivers/staging/rtl8712/rtl871x_cmd.h | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/staging/rtl8712/rtl871x_cmd.h b/drivers/staging/rtl871= 2/rtl871x_cmd.h index 95e9ea5b2d98..a7d98e9fd762 100644 --- a/drivers/staging/rtl8712/rtl871x_cmd.h +++ b/drivers/staging/rtl8712/rtl871x_cmd.h @@ -66,7 +66,6 @@ struct evt_priv { u8 *evt_buf; /*shall be non-paged, and 4 bytes aligned*/ u8 *evt_allocated_buf; u32 evt_done_cnt; - struct tasklet_struct event_tasklet; }; =20 #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ --=20 2.26.2 From nobody Thu May 14 10:27:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6746C433F5 for ; Mon, 11 Apr 2022 15:17:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347764AbiDKPTS (ORCPT ); Mon, 11 Apr 2022 11:19:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347734AbiDKPSx (ORCPT ); Mon, 11 Apr 2022 11:18:53 -0400 Received: from bee.birch.relay.mailchannels.net (bee.birch.relay.mailchannels.net [23.83.209.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C88CB1DA for ; Mon, 11 Apr 2022 08:16:39 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id CB78F1201C0; Mon, 11 Apr 2022 15:16:35 +0000 (UTC) Received: from pdx1-sub0-mail-a264.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id B7E4E122217; Mon, 11 Apr 2022 15:16:33 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1649690193; a=rsa-sha256; cv=none; b=X4rWZFVBMBfxg8Pn/oaJdQdhYLNjJtHEFSrhh/q73L4EXnnizdhAGmoRcEvImAf74qC5Bl wghtv0TNusA5hgwy1tIZq8dNslUd804sFGkajj55fGozcGT6Mb+baVdWgFVX57kQ6pxZUd mPgWbE/8AJXsQc0gpqEC/Fw4AkgOp+QXUt18h+nTLrAUZQ3/jau06oF6q+03MbHMFqSblt fX9FsGAi0rl6/REijWk+HNpdKUfNqwc8tbbIIHIf/IDzo4wtqZrsOT4KMcAd3EhOITJOHq cbXjcPkOVNY8BWKLiyByq7NNOm4NhBpYYjh9w89ryZJcnjt4wQjankbN4hqJMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1649690193; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=glvS6H62LOxTf50dKKy8gsnW9R6qwIoCaN+LjX09TeE=; b=3M+RMLcD/3KPIj4MQ06hrgutOTGoFlP/1jlWUrVtwr955FGkNGZgF7/XYOlTfuoUwGhau6 cQ5htMPxEZJfcv+VflxbP6ve/mbLFo7270xmuWxw5lJFQeoYQzww6GzURlk7cwSGSTKBaY ZOlvwhVkPrMETIy9etLHlAl2v5A+6VJBQ51T+FCJcpqs2jkDcjlSkuieNkRdZ4mmE0R7Vy QQZ71OXC7c68p5Dli3xncsSYgZbNUXIweUMvukmjx8+86ozN0rIj3oZFOFi+Oz3eW7nnex Beis4MCAuJCRpo9Vb5om4ICUjfVK9kZI64TwLxnmGPQxrOJkeXTEdmthVHloxA== ARC-Authentication-Results: i=1; rspamd-68f9d8f9d5-89cjg; auth=pass smtp.auth=dreamhost smtp.mailfrom=dave@stgolabs.net X-Sender-Id: dreamhost|x-authsender|dave@stgolabs.net Received: from pdx1-sub0-mail-a264.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.96.96.54 (trex/6.7.1); Mon, 11 Apr 2022 15:16:35 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|dave@stgolabs.net X-MailChannels-Auth-Id: dreamhost X-Whistle-Attack: 599df652677b6d7b_1649690194051_3611693520 X-MC-Loop-Signature: 1649690194051:518113923 X-MC-Ingress-Time: 1649690194051 Received: from localhost.localdomain (unknown [104.36.29.104]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dave@stgolabs.net) by pdx1-sub0-mail-a264.dreamhost.com (Postfix) with ESMTPSA id 4KcXWN4HHRz1f0; Mon, 11 Apr 2022 08:16:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stgolabs.net; s=dreamhost; t=1649690193; bh=glvS6H62LOxTf50dKKy8gsnW9R6qwIoCaN+LjX09TeE=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=ieC7sQWunu4PHGVDWwKxxQ25telHBI6DA41iy98wOrVy1OaYcAWfw9gSMC+0Z6iOe ASxiojBJeh4WCydNEXZWRSYDgGkbjsMtI4CKozcj1V47jg0wsTr3DauCfE3pqXRBGU aozM4WzrGjC8o0GeGMyed5XBSSX6hXdSdPWM7KeH7catyWlZOgLGwCaVrdBosxZMk7 t9LfYLJYp8X0+CbIZgTfLYl06NsZKUCDgJnqmqB1G5Gf1vQoj7aqNgpW7kdliNrdao 5IkL0ajcI2kDR/n6X0sqbnRgZKn4GOUApvsYEVaO4jgOeFzZ272E6FJHgL5nLR6tIj SCZDo3kW/NZ0A== From: Davidlohr Bueso To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, dave@stgolabs.net Subject: [PATCH 6/6] staging/rtl8192e,ieee80211: replace ps tasklet with work Date: Mon, 11 Apr 2022 08:16:20 -0700 Message-Id: <20220411151620.129178-7-dave@stgolabs.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220411151620.129178-1-dave@stgolabs.net> References: <20220411151620.129178-1-dave@stgolabs.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Tasklets have long been deprecated as being too heavy on the system by running in irq context - and this is not a performance critical path. If a higher priority process wants to run, it must wait for the tasklet to finish before doing so. rtllib_sta_ps() and ieee80211_sta_ps() will now run in process context and have further concurrency (tasklets being serialized among themselves), but this is done holding the ieee->lock, so it should be fine. Signed-off-by: Davidlohr Bueso --- drivers/staging/rtl8192e/rtllib.h | 2 +- drivers/staging/rtl8192e/rtllib_rx.c | 2 +- drivers/staging/rtl8192e/rtllib_softmac.c | 12 ++++++++---- drivers/staging/rtl8192u/ieee80211/ieee80211.h | 2 +- .../rtl8192u/ieee80211/ieee80211_softmac.c | 15 +++++++++------ 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/drivers/staging/rtl8192e/rtllib.h b/drivers/staging/rtl8192e/r= tllib.h index c985e4ebc545..0ecd81a81866 100644 --- a/drivers/staging/rtl8192e/rtllib.h +++ b/drivers/staging/rtl8192e/rtllib.h @@ -1585,7 +1585,7 @@ struct rtllib_device { short sta_sleep; int ps_timeout; int ps_period; - struct tasklet_struct ps_task; + struct work_struct ps_task; u64 ps_time; bool polling; =20 diff --git a/drivers/staging/rtl8192e/rtllib_rx.c b/drivers/staging/rtl8192= e/rtllib_rx.c index eb904b42f9c6..f5a44bc6d4e4 100644 --- a/drivers/staging/rtl8192e/rtllib_rx.c +++ b/drivers/staging/rtl8192e/rtllib_rx.c @@ -2721,7 +2721,7 @@ static void rtllib_rx_mgt(struct rtllib_device *ieee, if (ieee->sta_sleep || (ieee->ps !=3D RTLLIB_PS_DISABLED && ieee->iw_mode =3D=3D IW_MODE_INFRA && ieee->state =3D=3D RTLLIB_LINKED)) - tasklet_schedule(&ieee->ps_task); + schedule_work(&ieee->ps_task); =20 break; =20 diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rt= l8192e/rtllib_softmac.c index 4b6c2295a3cf..82bf05eb1cbf 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac.c +++ b/drivers/staging/rtl8192e/rtllib_softmac.c @@ -2042,13 +2042,17 @@ static short rtllib_sta_ps_sleep(struct rtllib_devi= ce *ieee, u64 *time) =20 } =20 -static inline void rtllib_sta_ps(struct tasklet_struct *t) +static inline void rtllib_sta_ps(struct work_struct *work) { - struct rtllib_device *ieee =3D from_tasklet(ieee, t, ps_task); + struct rtllib_device *ieee; u64 time; short sleep; unsigned long flags, flags2; =20 + ieee =3D container_of(work, struct rtllib_device, ps_task); + if (!ieee) + return; + spin_lock_irqsave(&ieee->lock, flags); =20 if ((ieee->ps =3D=3D RTLLIB_PS_DISABLED || @@ -3028,7 +3032,7 @@ int rtllib_softmac_init(struct rtllib_device *ieee) spin_lock_init(&ieee->mgmt_tx_lock); spin_lock_init(&ieee->beacon_lock); =20 - tasklet_setup(&ieee->ps_task, rtllib_sta_ps); + INIT_WORK(&ieee->ps_task, rtllib_sta_ps); =20 return 0; } @@ -3050,8 +3054,8 @@ void rtllib_softmac_free(struct rtllib_device *ieee) cancel_work_sync(&ieee->associate_complete_wq); cancel_work_sync(&ieee->ips_leave_wq); cancel_work_sync(&ieee->wx_sync_scan_wq); + cancel_work_sync(&ieee->ps_task); mutex_unlock(&ieee->wx_mutex); - tasklet_kill(&ieee->ps_task); } =20 static inline struct sk_buff * diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/stagi= ng/rtl8192u/ieee80211/ieee80211.h index 68c0bf9a191a..b577f9c81f85 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h @@ -1790,7 +1790,7 @@ struct ieee80211_device { short sta_sleep; int ps_timeout; int ps_period; - struct tasklet_struct ps_task; + struct work_struct ps_task; u32 ps_th; u32 ps_tl; =20 diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drive= rs/staging/rtl8192u/ieee80211/ieee80211_softmac.c index 1a43979939a8..4e8fbd2410a1 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -1687,14 +1687,17 @@ static short ieee80211_sta_ps_sleep(struct ieee8021= 1_device *ieee, u32 *time_h, return 1; } =20 -static inline void ieee80211_sta_ps(struct tasklet_struct *t) +static inline void ieee80211_sta_ps(struct work_struct *work) { - struct ieee80211_device *ieee =3D from_tasklet(ieee, t, ps_task); + struct ieee80211_device *ieee; u32 th, tl; short sleep; - unsigned long flags, flags2; =20 + ieee =3D container_of(work, struct ieee80211_device, ps_task); + if (!ieee) + return; + spin_lock_irqsave(&ieee->lock, flags); =20 if ((ieee->ps =3D=3D IEEE80211_PS_DISABLED || @@ -1897,7 +1900,7 @@ ieee80211_rx_frame_softmac(struct ieee80211_device *i= eee, struct sk_buff *skb, if (ieee->sta_sleep || (ieee->ps !=3D IEEE80211_PS_DISABLED && ieee->iw_mode =3D=3D IW_MODE_INFRA && ieee->state =3D=3D IEEE80211_LINKED)) - tasklet_schedule(&ieee->ps_task); + schedule_work(&ieee->ps_task); =20 if (WLAN_FC_GET_STYPE(header->frame_ctl) !=3D IEEE80211_STYPE_PROBE_RESP = && WLAN_FC_GET_STYPE(header->frame_ctl) !=3D IEEE80211_STYPE_BEACON) @@ -2602,7 +2605,7 @@ void ieee80211_softmac_init(struct ieee80211_device *= ieee) spin_lock_init(&ieee->mgmt_tx_lock); spin_lock_init(&ieee->beacon_lock); =20 - tasklet_setup(&ieee->ps_task, ieee80211_sta_ps); + INIT_WORK(&ieee->ps_task, ieee80211_sta_ps); } =20 void ieee80211_softmac_free(struct ieee80211_device *ieee) @@ -2613,7 +2616,7 @@ void ieee80211_softmac_free(struct ieee80211_device *= ieee) del_timer_sync(&ieee->associate_timer); =20 cancel_delayed_work(&ieee->associate_retry_wq); - + cancel_work_sync(&ieee->ps_task); mutex_unlock(&ieee->wx_mutex); } =20 --=20 2.26.2