Received: by 2002:a05:6a10:8395:0:0:0:0 with SMTP id n21csp610378pxh; Tue, 9 Nov 2021 16:08:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJzgQ5dFW7KWxAzxZ7gxTl9K93RQqPeLSG4GyXWeTkKsIRNjlKRThx/oWh6pD+rjZg/uDhmi X-Received: by 2002:a92:c56b:: with SMTP id b11mr8243883ilj.243.1636502928482; Tue, 09 Nov 2021 16:08:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636502928; cv=none; d=google.com; s=arc-20160816; b=Wx2lERGbz3e/0WfFqIfxLC2IVVzaf/nPXJKxebVhFXjqaKApeXdneQVralteSysEAg J6OKUkrx+gm1sMyNK5j4LHsqtOrsmbiJaNA6HdbbeW9p1cq3fZDHuvRdJ5kWah67X/bV i0hYytrO8bFYDgs9axmR9jCxuP6oYSXlY/oEEOov61eD8QEs9WsPhzlViDQY9WvfVHjh n4u/FoXewzqu8jjv7VZ4dkMe8tWXsHZO81joczE7nq6ZI0OHlUhDepO4vnU96rjS8VM6 ElBxe5yr0MBzkUbq7kI8oP+DnTbdzTaKj4zVliDPn9sbpD67j/saQ7bG7QU1mzc1FitX CVMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LwunBjJvTdtZ2UAAi5IgCtwbKk9GqSuN6FAjZ1zyjS4=; b=oBm02HTN5RSduaR5Arh/V4kayhsi3QNjvD5UbdEx22YKlcl1D83J2z4gLIUc51am51 T5x/0Sib83DCRVRh8OUNa8nke635+SYdQqsPhsNhZhOxOjVBEAbum+aGvHy4X6hJQ9P8 4wbYlPg4mqh8/jJTeEo7Q+aEKuRNSR/Au8mqT27VZuprV7xyVp7EmfEC46jP/7kdFDi3 ppMpOuCxnvUBhV3EnxVcAeCplJVT+lJAkrJhlzXeVAqai0x0XBpHqyZawKDIKSg+NExk NQR/3+ZOPQLBfq6eC5xZ/mc7dmHbHVSrYWvhlmvy+dC7yaCY4jXV/HqZOu+gJIOOygEP jf3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sipsolutions.net header.s=mail header.b=aUO4cDYX; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=sipsolutions.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i15si29102244ion.80.2021.11.09.16.08.36; Tue, 09 Nov 2021 16:08:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-bluetooth-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=@sipsolutions.net header.s=mail header.b=aUO4cDYX; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=sipsolutions.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239765AbhKIQo0 (ORCPT + 99 others); Tue, 9 Nov 2021 11:44:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238282AbhKIQoX (ORCPT ); Tue, 9 Nov 2021 11:44:23 -0500 Received: from sipsolutions.net (unknown [IPv6:2a01:4f8:191:4433::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFA91C0613F5 for ; Tue, 9 Nov 2021 08:41:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sipsolutions.net; s=mail; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Content-Type:Sender :Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-To: Resent-Cc:Resent-Message-ID; bh=LwunBjJvTdtZ2UAAi5IgCtwbKk9GqSuN6FAjZ1zyjS4=; t=1636476097; x=1637685697; b=aUO4cDYXCfprtIsuGrPD6g3TTtfM5OIS92nt4gmFtPkLCd2 1lTV5XHttQxWM6hnI4Gpn8BfvAlJAzYjKv02GiOEeCqmYpjB4rfhSn0LTT3Q/b88feXk+spxJFac8 7uRbX9D33ArCBBoOWEfoKoaO9QsfceGhTyGeqDuccyvNaX7qbHRVuaPjHOCmlL7Ao/SGeHNmqrddp w6vGopO7pSkcLPKEqLiXyR/eNOAKtHHJGYxLgK3fXmTsNzbttKXrER0aVCNjOdAo2mtu81hBCyrvj lsFarZIU52CZXziLyFTAJNGit/dU7S7BYb73jxTQrSdYmyQQD13YN1+u1qKiXDBg==; Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.95) (envelope-from ) id 1mkUBi-00D1dY-Bf; Tue, 09 Nov 2021 17:41:34 +0100 From: Benjamin Berg To: linux-bluetooth@vger.kernel.org Cc: Benjamin Berg Subject: [PATCH 4/4] Bluetooth: btusb: Signal URB errors as TX failure Date: Tue, 9 Nov 2021 17:41:13 +0100 Message-Id: <20211109164113.65981-5-benjamin@sipsolutions.net> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211109164113.65981-1-benjamin@sipsolutions.net> References: <20211109164113.65981-1-benjamin@sipsolutions.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Benjamin Berg Call the TX failure handler when transmission of URBs fail. This is done both for failures to send an URB and also when the interrupt URB used to retrieve a response fails. This approach is sufficient to quickly deal with certain errors such as a device being disconnected while synchronous commands are done during initialization. Signed-off-by: Benjamin Berg --- drivers/bluetooth/btusb.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 75c83768c257..0c4fe89c6573 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -924,6 +924,8 @@ static void btusb_intr_complete(struct urb *urb) if (err != -EPERM && err != -ENODEV) bt_dev_err(hdev, "urb %p failed to resubmit (%d)", urb, -err); + if (err != -EPERM) + hci_tx_error(hdev, -err); usb_unanchor_urb(urb); } } @@ -967,6 +969,8 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags) if (err != -EPERM && err != -ENODEV) bt_dev_err(hdev, "urb %p submission failed (%d)", urb, -err); + if (err != -EPERM) + hci_tx_error(hdev, -err); usb_unanchor_urb(urb); } @@ -1322,10 +1326,12 @@ static void btusb_tx_complete(struct urb *urb) if (!test_bit(HCI_RUNNING, &hdev->flags)) goto done; - if (!urb->status) + if (!urb->status) { hdev->stat.byte_tx += urb->transfer_buffer_length; - else + } else { + hci_tx_error(hdev, -urb->status); hdev->stat.err_tx++; + } done: spin_lock_irqsave(&data->txlock, flags); @@ -1348,10 +1354,12 @@ static void btusb_isoc_tx_complete(struct urb *urb) if (!test_bit(HCI_RUNNING, &hdev->flags)) goto done; - if (!urb->status) + if (!urb->status) { hdev->stat.byte_tx += urb->transfer_buffer_length; - else + } else { + hci_tx_error(hdev, -urb->status); hdev->stat.err_tx++; + } done: kfree(urb->setup_packet); -- 2.31.1