Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp4304930pxu; Wed, 9 Dec 2020 13:38:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJys54DyFUzJGxrw+WKXR7I6F931VS2voAi++Fa63WNGYUxaozeHr8FcK7bVNIobNnkEhZa1 X-Received: by 2002:a50:e00b:: with SMTP id e11mr3900662edl.303.1607549913019; Wed, 09 Dec 2020 13:38:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607549913; cv=none; d=google.com; s=arc-20160816; b=kvo+AvH47KEtzSsKQT7YPdbFVyLPBOACh7RYoLV50Yi1Ho4UKL23EfUgknu61sxaln j+5jeJVWydwBCFijkLtHvuQy69M/k9yn/92VK0eCv7uoeePHkUBOXDJh25xv8wxQeEqo k4cjlCVY3DqJ/W+fVb6ZWf3l6zL4qsuOqH2MLy5W7En0JEarLmXgpi3iOrqS1R4RSox4 gT6BQ8uOMTTlrkWuqSdFL1zs1IUudlQQfZK10ukZefwXbe1cR4vTY7ary0ohIOpEiRrl edHswCiajsidk72uK7FyFqhhW1ZX84v3q4SVpAc/yvgYYOPeYWPUCCpTb4AgYHnKfQia MxPA== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=uDAWdOWWyKeGk4mWjM6HOfEfDXxHr/N17SbEvzpH/ZY=; b=rv7kwePqBpckFg17FFUCB/RCk3OH4TrsHK6RMzSCfmYHKp3C5R7PGD5NRwxYfFqPtE z09fx6qAkhCnXkB8Gz869ahN9isLiTbHYYAS5gHvZtmwITp+IHoncUiqqZZOSuYxzJFU RIrgOUVCm4YHxAfILKwpKhLtpmvlziVGtDN53tDNonMebU7U0Db3iJ5lkdTQxONNa0bk qbA6At12EVuIVKXKnSe5Vm3iTdDZ5sKHOQUDVKmjAhFWTdx+RRdLTXCPeilHtTVNeRly W9JCbUVJxEywlh9CCLpLtyTdgflTAkBvUMH2R5Ysb7H5OrRGRJl9WkarMfWjFc2YzQFi aTlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Bfu3Q0nm; 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=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x5si1522705edv.585.2020.12.09.13.37.57; Wed, 09 Dec 2020 13:38:33 -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=@chromium.org header.s=google header.b=Bfu3Q0nm; 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=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726877AbgLIVgD (ORCPT + 99 others); Wed, 9 Dec 2020 16:36:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45996 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729913AbgLIVgD (ORCPT ); Wed, 9 Dec 2020 16:36:03 -0500 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 47FFDC0613CF for ; Wed, 9 Dec 2020 13:35:23 -0800 (PST) Received: by mail-pg1-x544.google.com with SMTP id w4so2114400pgg.13 for ; Wed, 09 Dec 2020 13:35:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=uDAWdOWWyKeGk4mWjM6HOfEfDXxHr/N17SbEvzpH/ZY=; b=Bfu3Q0nmcaPvORlVmD+gWHnnmpH5jHmeHwOgsnFXOf1xzmtm1jVwEo1kRsL9+1sjHU /xcIkdMODPADj1/oPGLRhAFdnmzi/bQnFUgcHQTWw6RaPe1akRSSChZSYBqFNSbOAb7X Kyqv8BQkH6kdZXol3X7QyXVJ4aWszggSFfgBQ= 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:date:message-id:mime-version :content-transfer-encoding; bh=uDAWdOWWyKeGk4mWjM6HOfEfDXxHr/N17SbEvzpH/ZY=; b=ajArtLtNNMpN7fdHM8+0leXwaF37axinBUdR83FDeNfvXjnytgeT+LjiOnJIJAfLnq UfJjgFeG2NKOi5EMBIhmRYUYrfbaa6GWPkcV6e8gfIan7knLQzcZdFgvYXOH/obO4yto dsN68Om0O5Z8g+ElCUJor+/gmz9XbTlLBmPupZswz1HoWcBcSRFOo/4y8Ad4RhWhebfI NlRhdPXRtT/b6QPasZ1iOq975zu+zY5zQCu4xz2LUqdpy2hfbr9ZuUa38U0pGq/ztYE9 PESWuQ4p9I1s+mZo+5ilhrUzWS27C+va6uHaZ568J2lgTXKZdmKPaluGF/41KQKdCi0z 21YQ== X-Gm-Message-State: AOAM5311IdjR6ZhkRj0befD1Kic/vouYvh1epNDiRHxj8FUjHQwghNFX 0u8j3/2x0SP0ue+1rAF/A2nWYiIuODTgDQ== X-Received: by 2002:a17:90b:1882:: with SMTP id mn2mr3998311pjb.236.1607549722542; Wed, 09 Dec 2020 13:35:22 -0800 (PST) Received: from sonnysasaka-chrome.mtv.corp.google.com ([2620:15c:202:201:4a0f:cfff:fe66:e60c]) by smtp.gmail.com with ESMTPSA id y21sm3869639pfr.90.2020.12.09.13.35.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Dec 2020 13:35:21 -0800 (PST) From: Sonny Sasaka To: linux-bluetooth@vger.kernel.org Cc: Sonny Sasaka , Abhishek Pandit-Subedi , Alain Michaud Subject: [PATCH v2] Bluetooth: Cancel Inquiry before Create Connection Date: Wed, 9 Dec 2020 13:35:14 -0800 Message-Id: <20201209213514.99326-1-sonnysasaka@chromium.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Many controllers do not allow HCI Create Connection while it is doing Inquiry. This patch adds Inquiry Cancel before Create Connection in this case to allow the controller to do Create Connection. User space will be aware of this Inquiry cancellation and they may issue another discovery request afterwards. Sample Command Disallowed response of HCI Create Connection: < HCI Command: Inquiry (0x01|0x0001) plen 5 Access code: 0x9e8b33 (General Inquiry) Length: 10.24s (0x08) Num responses: 0 > HCI Event: Command Status (0x0f) plen 4 Inquiry (0x01|0x0001) ncmd 2 Status: Success (0x00) < HCI Command: Create Connection (0x01|0x0005) plen 13 Address: XX:XX:XX:XX:XX:XX Packet type: 0xcc18 Page scan repetition mode: R2 (0x02) Page scan mode: Mandatory (0x00) Clock offset: 0x0000 Role switch: Allow slave (0x01) > HCI Event: Command Status (0x0f) plen 4 Create Connection (0x01|0x0005) ncmd 1 Status: Success (0x00) > HCI Event: Connect Complete (0x03) plen 11 Status: Command Disallowed (0x0c) Handle: 65535 Address: XX:XX:XX:XX:XX:XX Link type: ACL (0x01) Encryption: Disabled (0x00) Reviewed-by: Abhishek Pandit-Subedi Reviewed-by: Alain Michaud Signed-off-by: Sonny Sasaka --- net/bluetooth/hci_conn.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 4f1cd8063e720..23c0d77ea7370 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -203,6 +203,23 @@ static void hci_acl_create_connection(struct hci_conn *conn) BT_DBG("hcon %p", conn); + /* Many controllers disallow HCI Create Connection while it is doing + * HCI Inquiry. So we cancel the Inquiry first before issuing HCI Create + * Connection. This may cause the MGMT discovering state to become false + * without user space's request but it is okay since the MGMT Discovery + * APIs do not promise that discovery should be done forever. Instead, + * the user space monitors the status of MGMT discovering and it may + * request for discovery again when this flag becomes false. + */ + if (test_bit(HCI_INQUIRY, &hdev->flags)) { + /* Put this connection to "pending" state so that it will be + * executed after the inquiry cancel command complete event. + */ + conn->state = BT_CONNECT2; + hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL); + return; + } + conn->state = BT_CONNECT; conn->out = true; conn->role = HCI_ROLE_MASTER; -- 2.26.2