Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp4256408pxt; Wed, 11 Aug 2021 01:26:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJynJK/QWrY2GfZGwJUlVFVWCNm9d0B+N17sgevd3qOatWfmbQ10uyP1jmIb/cmhHh9nkr5l X-Received: by 2002:a05:6602:25da:: with SMTP id d26mr60006iop.106.1628670407461; Wed, 11 Aug 2021 01:26:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628670407; cv=none; d=google.com; s=arc-20160816; b=EMERE5E2OVXzxj2Cle5JBsnRwsfAOiHlT9jh6mvwV/iHAmp1NUEAWBHAZz7ZVKW3GB MUA3/mIp1gZqrBf3Qq5YKQAptMCo6oGp/N/goDO/ubLI2kOVdev3lxsQu61DtVfv2dy1 69O8ecgqj3Gi61HH9irDM6dAC71qZa15vaBdgtoZQQqAziektIEUGTbMPKYN3OR3Sf/r tNuBSrjd6RSomOvteoHPaR4Woq/M21wYU1E9T+oxqgl2Qg5LPdy6Xr3qNGDq2OI8b14N hDCIHVHig5DYEcEaZ2dikmcn5BZcNolU+4GgyI+c46Mx9bgwqEU7YDm3neqoVhkjSWFq OGSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=JopxvpFcF/xGESdrh4YQ6rS5KF8DueMkBM15FR5p2zI=; b=HsiHfzFV7GNEUMwhwQsLOU/l6vXlrsXEnzrzO2Vjxu7dSL1AwBbQoBKPw3PJa7jtQl 4PlKd2bixyShcDmnHZg7OJpCMXU8SYXsK7xkSNrOpgVAFZMx4FEa8tpZ9niChoR+dqfa aG8ZF5y1v4Kjdqo3T91VkS6J7L4z6HVGO/pvRQtqSq3G93JWDGEpNp/I3HvwI1b3fF89 CpOjZ8L0WUGyJNpcC/in14HFEhtYhivwkmSpdPwDSnGh1iC99Ah62yFSwQqRAukw51Ql YKf5PlTkzAUuPZ4ePco/MpPRNNF9nDuhKTqKIpE47KSNRKDAKlTa98oJXFhIcCO7XmxU ZX1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=n3GjMA9n; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g13si27919237ilf.35.2021.08.11.01.26.35; Wed, 11 Aug 2021 01:26:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=n3GjMA9n; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236096AbhHKIZr (ORCPT + 99 others); Wed, 11 Aug 2021 04:25:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236088AbhHKIZn (ORCPT ); Wed, 11 Aug 2021 04:25:43 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF76EC0613D3 for ; Wed, 11 Aug 2021 01:25:19 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id f5so1816627wrm.13 for ; Wed, 11 Aug 2021 01:25:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=JopxvpFcF/xGESdrh4YQ6rS5KF8DueMkBM15FR5p2zI=; b=n3GjMA9nWMZfHn1qsTgkJAuyGzL7OvGstvZa+uwtSC2+i980Z9CA2iu8oOVRxObgnI Aezd0jo4cnZVKdtebsXlMzqO10Q6xB2O8BzwtbmHl24c9jv5M6oyfUUaAH7bxs6uIenr PbJclzvvkgFR4FwGJ5ueJGIurDvI092GZu3MAvZr5zYCIO2ndBJd/aCoHNOSOV9kEBUB eqE78uIrrVM4Xd9n3xrmpsEfjY6oPgBlmdOGzcG9w5XyTZ9PTG19MMPUmjpRJPEqTrNQ gRe7+3ARCXmXuoIe8vsh5v4FslmItbLzrM3ZumlK2nit9Fm5W2D2ovf5PV++CBuAfL+1 pmYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=JopxvpFcF/xGESdrh4YQ6rS5KF8DueMkBM15FR5p2zI=; b=hez5wx04tqlsCQKHoXlTQWyY/wzQfeBCmbfytrm7pHT3OemYhgIaffpqkUDT7L/Z0n 6THcrdPIlZSAMz2c8eZF2XAkZCZy1R0DsDInhE8gYkimwej3xdtHwwCKuvfcNL+UwgRC XI0evcO/rEeegrirOXzg9UgIQkGQtqcaCWzKHO22ynMU+xD+ZhLWJ8MMSqyMcBmdT9oD C1b5ihJF299iFi4QjjZoOA1rym5roPNok2XkcWLF7xFrBV0Axrmiu9Xf6rqeGzVTi4fx a6yY4h12lKg6ZLBM45vKvnXR/GinfNFaUMTowbuVtqB0FENXbadnfA2T9auXIJtg2t05 SObQ== X-Gm-Message-State: AOAM530lSdp8HTEuAeUGa1HA2OUzl9idTHZ82d9HDVXZM6p8qL5S/QyL uNFC64sw1b/2KcWqdlPa8pObRQ== X-Received: by 2002:a05:6000:120d:: with SMTP id e13mr11205849wrx.6.1628670318484; Wed, 11 Aug 2021 01:25:18 -0700 (PDT) Received: from localhost ([2a01:cb19:826e:8e00:7c84:47f9:c111:a679]) by smtp.gmail.com with ESMTPSA id n8sm25498969wrx.46.2021.08.11.01.25.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Aug 2021 01:25:18 -0700 (PDT) From: Mattijs Korpershoek To: Kai-Heng Feng , marcel@holtmann.org, johan.hedberg@gmail.com, luiz.dentz@gmail.com Cc: Kai-Heng Feng , Hsin-Yi Wang , Guenter Roeck , "David S. Miller" , Jakub Kicinski , "open list:BLUETOOTH SUBSYSTEM" , "open list:NETWORKING [GENERAL]" , open list Subject: Re: [PATCH v2] Bluetooth: Move shutdown callback before flushing tx and rx queue In-Reply-To: <20210810045315.184383-1-kai.heng.feng@canonical.com> References: <20210810045315.184383-1-kai.heng.feng@canonical.com> Date: Wed, 11 Aug 2021 10:25:09 +0200 Message-ID: <87pmuk75i2.fsf@baylibre.com> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Kai-Heng, Thank you for your patch. Kai-Heng Feng writes: > Commit 0ea9fd001a14 ("Bluetooth: Shutdown controller after workqueues > are flushed or cancelled") introduced a regression that makes mtkbtsdio > driver stops working: > [ 36.593956] Bluetooth: hci0: Firmware already downloaded > [ 46.814613] Bluetooth: hci0: Execution of wmt command timed out > [ 46.814619] Bluetooth: hci0: Failed to send wmt func ctrl (-110) > > The shutdown callback depends on the result of hdev->rx_work, so we > should call it before flushing rx_work: > -> btmtksdio_shutdown() > -> mtk_hci_wmt_sync() > -> __hci_cmd_send() > -> wait for BTMTKSDIO_TX_WAIT_VND_EVT gets cleared > > -> btmtksdio_recv_event() > -> hci_recv_frame() > -> queue_work(hdev->workqueue, &hdev->rx_work) > -> clears BTMTKSDIO_TX_WAIT_VND_EVT > > So move the shutdown callback before flushing TX/RX queue to resolve the > issue. > > Reported-and-tested-by: Mattijs Korpershoek > Tested-by: Hsin-Yi Wang > Cc: Guenter Roeck > Fixes: 0ea9fd001a14 ("Bluetooth: Shutdown controller after workqueues are flushed or cancelled") > Signed-off-by: Kai-Heng Feng > --- > v2: > Move the shutdown callback before clearing HCI_UP, otherwise 1) > shutdown callback won't be called and 2) other routines that depend on > HCI_UP won't work. > > net/bluetooth/hci_core.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index cb2e9e513907..8622da2d9395 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -1727,6 +1727,14 @@ int hci_dev_do_close(struct hci_dev *hdev) > hci_request_cancel_all(hdev); > hci_req_sync_lock(hdev); > > + if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && > + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && > + test_bit(HCI_UP, &hdev->flags)) { > + /* Execute vendor specific shutdown routine */ > + if (hdev->shutdown) > + hdev->shutdown(hdev); > + } > + > if (!test_and_clear_bit(HCI_UP, &hdev->flags)) { > cancel_delayed_work_sync(&hdev->cmd_timer); > hci_req_sync_unlock(hdev); > @@ -1798,14 +1806,6 @@ int hci_dev_do_close(struct hci_dev *hdev) > clear_bit(HCI_INIT, &hdev->flags); > } > > - if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && > - !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && > - test_bit(HCI_UP, &hdev->flags)) { > - /* Execute vendor specific shutdown routine */ > - if (hdev->shutdown) > - hdev->shutdown(hdev); > - } > - > /* flush cmd work */ > flush_work(&hdev->cmd_work); I confirm this works fine on mt8183-pumpkin using the btmtksdio driver. Tested-by: Mattijs Korpershoek > > -- > 2.31.1