From nobody Thu Sep 11 21:23:28 2025 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 C9760C04A6A for ; Mon, 7 Aug 2023 15:06:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230317AbjHGPGi (ORCPT ); Mon, 7 Aug 2023 11:06:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230037AbjHGPGP (ORCPT ); Mon, 7 Aug 2023 11:06:15 -0400 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2041.outbound.protection.outlook.com [40.107.223.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B37A510FC; Mon, 7 Aug 2023 08:06:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eKBNjga4HVA4tynnwwL9JnOpAZEvz/dzHZ+DeN0GcUZhuyr5fklGVJAyL1oG0Jw1MNW6sGlEd0L6b4pMRxKUjKLzM7A1PRRU3VIEq2QEmJcdavfRdpW64dLyv40gCD2Z3C0OIGMBoXaOWogseug+MXJgW9SoN0KkImaJtXDViDuu6Ot/jyFWl7OFsIr3/5+cQmqHk077W71m0fn7NOoHPNYjMyFsbd2MLokcukwuDrxXlYAz0plDQYlmhKUajhf9w6cpMGcNoltBK3YhlAdCkDyqbsPo+2QF2imvaFBwg4n6SypKs3oZM+5RSRX1tSaBoB+9F/Fa7c1yn4BBX+XkWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MDrcTDCa+jCrYxb+wZAdupVXskszFZLV1jIGUVLLGJ0=; b=jSWM5HDrhUTVulRmFkuWFj+zQ1rC5RzuFXTZbV51CbmvTnahd/Gk9HIZ837U+iG1Gq7YLufDksqdPPA5GBmCK+R+bjJfSwX/glD6TMYgMolRukab3OwzBLrxmDTVvBKxEfDs5ZDQjDYzkBUU0N8IcuY6yKFav0dmUOisadPBYrUIdn1OyktbuvCLODmlJgQ9gjHKp2LUA4ehMQS+9oG5lSUYtVqGbMfXZGUl564R7NjQDMd8/WskCbhu0ArB/cHSHrUL7wSzY9abIDFnCSVrJGGjo8DUKcEwy8IRFZ/W0S6Yo0p0KMqpZGeUwmpDlTW/pqjcgk+aLGWTEpk0CpuRdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MDrcTDCa+jCrYxb+wZAdupVXskszFZLV1jIGUVLLGJ0=; b=Ph0maI/en1X6MB1k4nX0Ba0PqhdmEIeTNPoA5VmjB7qzo6MGVvUxhfn8KIFtVLJgFD4NcwedcaX5T8r9pBkb0zEx+mFMTlXy66ggB8hVlIkpqUgKiLqTz+8FcCzVYp84lyRMwS+T0nwbjlnkqsQs2RhgC5Qf2yRWJENy28ge/Lg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=silabs.com; Received: from IA1PR11MB7773.namprd11.prod.outlook.com (2603:10b6:208:3f0::21) by SN7PR11MB7590.namprd11.prod.outlook.com (2603:10b6:806:348::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Mon, 7 Aug 2023 15:06:10 +0000 Received: from IA1PR11MB7773.namprd11.prod.outlook.com ([fe80::14b1:be6e:19a3:2eca]) by IA1PR11MB7773.namprd11.prod.outlook.com ([fe80::14b1:be6e:19a3:2eca%6]) with mapi id 15.20.6652.026; Mon, 7 Aug 2023 15:06:10 +0000 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= To: Kalle Valo Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH 8/9] wifi: wfx: scan_lock is global to the device Date: Mon, 7 Aug 2023 17:05:41 +0200 Message-Id: <20230807150542.247801-9-jerome.pouiller@silabs.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230807150542.247801-1-jerome.pouiller@silabs.com> References: <20230807150542.247801-1-jerome.pouiller@silabs.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR0P264CA0252.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100::24) To IA1PR11MB7773.namprd11.prod.outlook.com (2603:10b6:208:3f0::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA1PR11MB7773:EE_|SN7PR11MB7590:EE_ X-MS-Office365-Filtering-Correlation-Id: 02b9e598-f85f-4b36-9cf4-08db9757d5af X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PpLRvLpvUTQyX9kyV1yT0jtOAeIgXZXTkOvLVNbx4/xw++OpS4GbyAvEOCJ3nOKjF8eKD5RoRdx+jJvMCBYd+UUSF5iVfvxCyqcp0bSp/tepQ27sjZ+P3jQDqdw7/BtxQKHMrfJFc0oDdISlcevcHWTbQPivXp60/IIgVsaPg/GQ0MSmAYP5Il+x5mPPL7RtJ5vJVF9R3qPKGEzfAKe+OdS1fH7peW9QUTEfdztRaapJk0TB7eWbbl9360KVs+LhjMJIzNTK8nE2e7Ch2LERteE3q1Um1IePNWs1uDB9A5sn7asYV+DWGmX4zw30iidePPzowud6goHAlPI5Y1Letk4Il4Rla1CxRu4GAdbY4nbdJYnsthBR0o0RYrMZeitH/CforgrAaawyNH2jCacOrjgiNklAyaIgMMawrs1x5oWD71mlUd026h8lO8DwQljpjPJ68KkyIkwIjF1CKx5CZVuQkl1zOHUKPUua4O2zMZmZFqqtpBsjDBJW7D/f+v/MHNb/8y8cDdWB+ZqNWEb6BV4dsvdW0UmBeCdCTIkjbgFC7+pky2P6QkZntWeFq881vprvJRdgadVO0EA484FuNo1nCfl3sg99j4V+El/gEeTtHyUrmjZqmJipIb9U4nIf X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR11MB7773.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(39850400004)(376002)(346002)(396003)(366004)(451199021)(1800799003)(186006)(2906002)(4326008)(6916009)(66556008)(66476007)(66946007)(6486002)(52116002)(6666004)(66574015)(83380400001)(5660300002)(41300700001)(8936002)(316002)(8676002)(38350700002)(38100700002)(2616005)(478600001)(36756003)(107886003)(26005)(6506007)(1076003)(86362001)(6512007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R1d3Z2RMaTFLa25Hdys0TFljSXQvZThjQlZFQWpWVUdYTEZqbzdvOVpkeUUz?= =?utf-8?B?ZDNOTkU1eWhEVVNkT0V5UFFMMFA5bVRnVVpzVjljVnh0cWttUjNSbVljdENw?= =?utf-8?B?UExtRWluWEs1WjNZR1h1SmpEYlJibGVoZjJIUWFMbU5iWXdHRzYrVEZwN0Q5?= =?utf-8?B?QTcrV2M0SHRzTTUwYTNheEl1eUVFK29FczRWWG85WURxT2RuVUQzZ0gxMmNx?= =?utf-8?B?Nml5YVJjRlZOM284c3dQUzVDNGp3NHc2N2Vjb1JDeURJT3VTTUowdzdqSity?= =?utf-8?B?Mld4SFBDdzVZS0JqMTYxV05iMFROYnpIRkdVT2dmMmx3K0dmNHNSNUxoM3Fh?= =?utf-8?B?U1FoQ2orLy9lWE5nTmZ1YWpaRGFqRXhWOWtqOStjbmRsSjBubWxLWHNGMFhV?= =?utf-8?B?SzIwakY5NE1EMDVTakxibEM1bVlWK09FaXgrWjlaUUxVVU13SkJYUVdHSWw3?= =?utf-8?B?QnJvQmtUVEwxK3kwT1dlN1RmdHpuTmF5RWxLYmY3QyswTU5palJlbHA1eFhQ?= =?utf-8?B?Y3BCWDhtUEhNT1lvRTUyc2ZnQWZwb0hNUTBuQXNXZzcyNm50MndPaWlxVmpL?= =?utf-8?B?bjhST0NNRlkvOHN1QU5mOGs5OHhPQzN1eitacHliTXV2cDFvZitPVklyOWp0?= =?utf-8?B?V1dpZGgyZTZmaFZUeUliOFB1S0RxaDFOUnQvUW14d3Mvc2FIZmhmQ1ZWMjYy?= =?utf-8?B?STlvUWxlazVHZVhpT3hVT0x5a1FncU1qeXhOTkF5enZzemdNOGpLRWtyK3Nw?= =?utf-8?B?bHdiT1kyTUY2MVl4VnEvSlhPa1RtWVB0ZVE3cllxQWxNQm1pL3d6KzdVNTMy?= =?utf-8?B?TjVLTVd3YmxIMjVkNmtYeTJEcW5EZnA1NGFNMUt1RGgvcTYrSzIxMDQxcitK?= =?utf-8?B?SVFacko1K1pjbUovc0ZObkhsUmFjS0VVYy9CTmUyMXhyYmFES2Jnd1VNcG9i?= =?utf-8?B?R0RmY0lGc3BMa2dIRHluZlZYT1VrMXd6eEtRY0RlNlVFZ3Zmd2xMVjVqNitD?= =?utf-8?B?clo3K2hOMGpxY2JLU1MzdmZVUjdpb2FZaDJ0MFVybzNnSXBNUU9KVUJKdDEy?= =?utf-8?B?dklXbXg3KzVHQWpQRStoVzJFblVJeXNsM2pQWVBYc3B0elNXK3dWNkxzcFhs?= =?utf-8?B?S2Vha0V4YkR2S0VkN3grRmpTQ3lWSGRlRnJxS08vRGR3MHc0aGFtUXA0M3Uv?= =?utf-8?B?eVRVaTZJM2x0SCtpeG9aaHJMRmFFUVA4TDVNWVhpVG1jWkozWXB6VTA3c1lR?= =?utf-8?B?dElqdVpUb1VFSVp0My9IS2N3TkQ4TWRBUG1mcXRmQ2dqalZvT1JiTDh0QTMz?= =?utf-8?B?WTVhZzh3bit2SFROL2FoN2xDWGpCNG5ya1FqZ1JTMTc4U3Y3Uk5tQ09wMUVW?= =?utf-8?B?TTh2TGNucjkreTBmMGJHeFM4bHJjYmxwUGFYcEt4OVdrazFxWll2dHZNTG40?= =?utf-8?B?SDIxd3RXQ1l6YWdKSTBONWxXMHd5NzlDRmVZbDJCekJTVWxlOEV6bDZzVHVt?= =?utf-8?B?UWwxeTByV1VFUWROVDJUZHpjVFJSMzlxbUpta0d4SytZc2NKWCsxeEZQeWpp?= =?utf-8?B?ZW1ySy9nRkY5YUNiSFpMNEpPZjdxQWpPK2FSeUYzMWllaXJmZk1JWWFLSVJM?= =?utf-8?B?UGt5RklMVUdmcmh0eldLMDZpcVRoSVZkWkF2bk1OMDMzMDF4VDA5MENZR3hy?= =?utf-8?B?N0dJVnZpc0UycE50b1dZRnlESm9rME14cWZNaEduS1pnTmh0MkpCTHBwbmZZ?= =?utf-8?B?SlRRNUhzcjRVRjJWQXVYZkVmNHQybGM1NmN3MGVVaVJNYjB1aG9FUFIrN3pu?= =?utf-8?B?NDdjbEtseVpaaW9FUldoQi9rRndEa2ZZbWZlbXIxMXVvUkhDK0JqSHRzb1Bm?= =?utf-8?B?QnBaRXMrUlZ4TU5jbUtCd0RYUUVZV1k4bFJ1KzBlczBVSkJCNnM5ZVZiTXBC?= =?utf-8?B?SThKa05jdGdEY3NsK2t1K1lVYXUyZ0lCaWJCaVZkWVE1dWNWMmZEZHNpdUQ1?= =?utf-8?B?T2hEVWQ1YVh1NlYvck0zUjd3THp4UDlGSUlBWmM2R3JkZWl6cnQ4UGdkeUpB?= =?utf-8?B?aXVhL3BTSHdUVWlvc1k2TEd5TDAyNWpUbGNyeTRTbHVTQVJiSlZzRWJmTXdF?= =?utf-8?Q?BKMyA69/sGelpM+tbVEIUYpNc?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02b9e598-f85f-4b36-9cf4-08db9757d5af X-MS-Exchange-CrossTenant-AuthSource: IA1PR11MB7773.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2023 15:06:10.7015 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8TwZ7M5F94by+UT3w0bAJ799s0+I+trPM8AZLkYJDaVLGk3NgPDH8npv7+W4Rg5BzNqACKxN3QFu3A5IQZZKcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR11MB7590 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently, one scan_lock is associated to each vif. However, concurrent scan on vifs is explicitly prohibited by the device. Currently, scan_lock is associated with conf_mutex that ensure that concurrent scan on vifs cannot happen. In the only case where conf_mutex is not associated to scan_lock, the scan_lock is tested on all interfaces. Short, this patch relocates scan_lock to the device and simplify the code. Signed-off-by: J=C3=A9r=C3=B4me Pouiller --- drivers/net/wireless/silabs/wfx/main.c | 2 ++ drivers/net/wireless/silabs/wfx/queue.c | 6 ++---- drivers/net/wireless/silabs/wfx/scan.c | 8 ++++---- drivers/net/wireless/silabs/wfx/sta.c | 15 ++++----------- drivers/net/wireless/silabs/wfx/wfx.h | 3 +-- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/silabs/wfx/main.c b/drivers/net/wireless/= silabs/wfx/main.c index a0906d7d026e0..32564f5c98e5c 100644 --- a/drivers/net/wireless/silabs/wfx/main.c +++ b/drivers/net/wireless/silabs/wfx/main.c @@ -248,6 +248,7 @@ static void wfx_free_common(void *data) =20 mutex_destroy(&wdev->tx_power_loop_info_lock); mutex_destroy(&wdev->rx_stats_lock); + mutex_destroy(&wdev->scan_lock); mutex_destroy(&wdev->conf_mutex); ieee80211_free_hw(wdev->hw); } @@ -318,6 +319,7 @@ struct wfx_dev *wfx_init_common(struct device *dev, con= st struct wfx_platform_da gpiod_set_consumer_name(wdev->pdata.gpio_wakeup, "wfx wakeup"); =20 mutex_init(&wdev->conf_mutex); + mutex_init(&wdev->scan_lock); mutex_init(&wdev->rx_stats_lock); mutex_init(&wdev->tx_power_loop_info_lock); init_completion(&wdev->firmware_ready); diff --git a/drivers/net/wireless/silabs/wfx/queue.c b/drivers/net/wireless= /silabs/wfx/queue.c index b5975d18f09b4..e61b86f211e53 100644 --- a/drivers/net/wireless/silabs/wfx/queue.c +++ b/drivers/net/wireless/silabs/wfx/queue.c @@ -267,10 +267,8 @@ static struct sk_buff *wfx_tx_queues_get_skb(struct wf= x_dev *wdev) } } =20 - wvif =3D NULL; - while ((wvif =3D wvif_iterate(wdev, wvif)) !=3D NULL) - if (mutex_is_locked(&wvif->scan_lock)) - return NULL; + if (mutex_is_locked(&wdev->scan_lock)) + return NULL; =20 wvif =3D NULL; while ((wvif =3D wvif_iterate(wdev, wvif)) !=3D NULL) { diff --git a/drivers/net/wireless/silabs/wfx/scan.c b/drivers/net/wireless/= silabs/wfx/scan.c index 817eeb3aa8bff..c3c103ff88cce 100644 --- a/drivers/net/wireless/silabs/wfx/scan.c +++ b/drivers/net/wireless/silabs/wfx/scan.c @@ -95,7 +95,7 @@ void wfx_hw_scan_work(struct work_struct *work) int chan_cur, ret, err; =20 mutex_lock(&wvif->wdev->conf_mutex); - mutex_lock(&wvif->scan_lock); + mutex_lock(&wvif->wdev->scan_lock); if (wvif->join_in_progress) { dev_info(wvif->wdev->dev, "abort in-progress REQ_JOIN"); wfx_reset(wvif); @@ -116,7 +116,7 @@ void wfx_hw_scan_work(struct work_struct *work) ret =3D -ETIMEDOUT; } } while (ret >=3D 0 && chan_cur < hw_req->req.n_channels); - mutex_unlock(&wvif->scan_lock); + mutex_unlock(&wvif->wdev->scan_lock); mutex_unlock(&wvif->wdev->conf_mutex); wfx_ieee80211_scan_completed_compat(wvif->wdev->hw, ret < 0); } @@ -155,7 +155,7 @@ void wfx_remain_on_channel_work(struct work_struct *wor= k) =20 /* Hijack scan request to implement Remain-On-Channel */ mutex_lock(&wvif->wdev->conf_mutex); - mutex_lock(&wvif->scan_lock); + mutex_lock(&wvif->wdev->scan_lock); if (wvif->join_in_progress) { dev_info(wvif->wdev->dev, "abort in-progress REQ_JOIN"); wfx_reset(wvif); @@ -178,7 +178,7 @@ void wfx_remain_on_channel_work(struct work_struct *wor= k) dev_err(wvif->wdev->dev, "roc didn't stop\n"); ieee80211_remain_on_channel_expired(wvif->wdev->hw); end: - mutex_unlock(&wvif->scan_lock); + mutex_unlock(&wvif->wdev->scan_lock); mutex_unlock(&wvif->wdev->conf_mutex); wfx_bh_request_tx(wvif->wdev); } diff --git a/drivers/net/wireless/silabs/wfx/sta.c b/drivers/net/wireless/s= ilabs/wfx/sta.c index f42341c2baffb..496b93de3ee58 100644 --- a/drivers/net/wireless/silabs/wfx/sta.c +++ b/drivers/net/wireless/silabs/wfx/sta.c @@ -97,9 +97,8 @@ void wfx_configure_filter(struct ieee80211_hw *hw, unsign= ed int changed_flags, FIF_PROBE_REQ | FIF_PSPOLL; =20 mutex_lock(&wdev->conf_mutex); + mutex_lock(&wdev->scan_lock); while ((wvif =3D wvif_iterate(wdev, wvif)) !=3D NULL) { - mutex_lock(&wvif->scan_lock); - /* Note: FIF_BCN_PRBRESP_PROMISC covers probe response and * beacons from other BSS */ @@ -126,9 +125,8 @@ void wfx_configure_filter(struct ieee80211_hw *hw, unsi= gned int changed_flags, else filter_prbreq =3D true; wfx_hif_set_rx_filter(wvif, filter_bssid, filter_prbreq); - - mutex_unlock(&wvif->scan_lock); } + mutex_unlock(&wdev->scan_lock); mutex_unlock(&wdev->conf_mutex); } =20 @@ -621,18 +619,14 @@ int wfx_set_tim(struct ieee80211_hw *hw, struct ieee8= 0211_sta *sta, bool set) =20 void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd notif= y_cmd) { - struct wfx_vif *wvif_it; - if (notify_cmd !=3D STA_NOTIFY_AWAKE) return; =20 /* Device won't be able to honor CAB if a scan is in progress on any inte= rface. Prefer to * skip this DTIM and wait for the next one. */ - wvif_it =3D NULL; - while ((wvif_it =3D wvif_iterate(wvif->wdev, wvif_it)) !=3D NULL) - if (mutex_is_locked(&wvif_it->scan_lock)) - return; + if (mutex_is_locked(&wvif->wdev->scan_lock)) + return; =20 if (!wfx_tx_queues_has_cab(wvif) || wvif->after_dtim_tx_allowed) dev_warn(wvif->wdev->dev, "incorrect sequence (%d CAB in queue)", @@ -730,7 +724,6 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct i= eee80211_vif *vif) complete(&wvif->set_pm_mode_complete); INIT_WORK(&wvif->tx_policy_upload_work, wfx_tx_policy_upload_work); =20 - mutex_init(&wvif->scan_lock); init_completion(&wvif->scan_complete); INIT_WORK(&wvif->scan_work, wfx_hw_scan_work); INIT_WORK(&wvif->remain_on_channel_work, wfx_remain_on_channel_work); diff --git a/drivers/net/wireless/silabs/wfx/wfx.h b/drivers/net/wireless/s= ilabs/wfx/wfx.h index 5fd80c423d6f6..bd0df2e1ea990 100644 --- a/drivers/net/wireless/silabs/wfx/wfx.h +++ b/drivers/net/wireless/silabs/wfx/wfx.h @@ -43,6 +43,7 @@ struct wfx_dev { struct delayed_work cooling_timeout_work; bool poll_irq; bool chip_frozen; + struct mutex scan_lock; struct mutex conf_mutex; =20 struct wfx_hif_cmd hif_cmd; @@ -81,8 +82,6 @@ struct wfx_vif { =20 unsigned long uapsd_mask; =20 - /* avoid some operations in parallel with scan */ - struct mutex scan_lock; struct work_struct scan_work; struct completion scan_complete; int scan_nb_chan_done; --=20 2.39.2