* Re: [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support
@ 2022-03-26 5:47 kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-03-26 5:47 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16133 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
In-Reply-To: <20220320183225.2.I61857ea92be43418b8ce16839f79a4704cc89fa6@changeid>
References: <20220320183225.2.I61857ea92be43418b8ce16839f79a4704cc89fa6@changeid>
TO: Manish Mandlik <mmandlik@google.com>
TO: marcel(a)holtmann.org
TO: luiz.dentz(a)gmail.com
CC: chromeos-bluetooth-upstreaming(a)chromium.org
CC: linux-bluetooth(a)vger.kernel.org
CC: "Abhishek Pandit-Subedi" <abhishekpandit@chromium.org>
CC: Manish Mandlik <mmandlik@google.com>
CC: Chethan Tumkur Narayan <chethan.tumkur.narayan@intel.com>
CC: Johan Hedberg <johan.hedberg@gmail.com>
CC: linux-kernel(a)vger.kernel.org
Hi Manish,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master v5.17 next-20220325]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Manish-Mandlik/Bluetooth-Add-support-for-devcoredump/20220321-093553
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
:::::: branch date: 5 days ago
:::::: commit date: 5 days ago
config: i386-randconfig-c001 (https://download.01.org/0day-ci/archive/20220326/202203261345.wp9YyAkO-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 85e9b2687a13d1908aa86d1b89c5ce398a06cd39)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/677f482cb7027ab030842015cfd6c188568df39f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Manish-Mandlik/Bluetooth-Add-support-for-devcoredump/20220321-093553
git checkout 677f482cb7027ab030842015cfd6c188568df39f
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
^~~~
drivers/bluetooth/btintel.c:636:2: note: '?' condition is false
if (skb->data[0]) {
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
drivers/bluetooth/btintel.c:636:2: note: '?' condition is false
if (skb->data[0]) {
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
(cond) ? \
^
drivers/bluetooth/btintel.c:636:2: note: Taking false branch
if (skb->data[0]) {
^
include/linux/compiler.h:56:23: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
drivers/bluetooth/btintel.c:643:2: note: Calling 'btintel_parse_version_tlv'
btintel_parse_version_tlv(hdev, version, skb);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/bluetooth/btintel.c:530:2: note: Loop condition is false. Execution continues on line 617
while (skb->len) {
^
drivers/bluetooth/btintel.c:617:2: note: Returning without writing to 'version->cnvi_bt'
return 0;
^
drivers/bluetooth/btintel.c:643:2: note: Returning from 'btintel_parse_version_tlv'
btintel_parse_version_tlv(hdev, version, skb);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/bluetooth/btintel.c:646:2: note: Returning without writing to 'version->cnvi_bt'
return 0;
^
drivers/bluetooth/btintel.c:2360:8: note: Returning from 'btintel_read_version_tlv'
err = btintel_read_version_tlv(hdev, &new_ver);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/bluetooth/btintel.c:2361:2: note: '?' condition is false
if (err)
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
drivers/bluetooth/btintel.c:2361:6: note: 'err' is 0
if (err)
^
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
(cond) ? \
^~~~
drivers/bluetooth/btintel.c:2361:2: note: '?' condition is false
if (err)
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
(cond) ? \
^
drivers/bluetooth/btintel.c:2361:2: note: Taking false branch
if (err)
^
include/linux/compiler.h:56:23: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
drivers/bluetooth/btintel.c:2364:2: note: Calling 'btintel_version_info_tlv'
btintel_version_info_tlv(hdev, &new_ver);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/bluetooth/btintel.c:444:6: note: The left operand of '&' is a garbage value
if (INTEL_HW_PLATFORM(version->cnvi_bt) != 0x37) {
^
drivers/bluetooth/btintel.h:146:53: note: expanded from macro 'INTEL_HW_PLATFORM'
#define INTEL_HW_PLATFORM(cnvx_bt) ((u8)(((cnvx_bt) & 0x0000ff00) >> 8))
~~~~~~~ ^
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
>> drivers/bluetooth/btintel.c:1425:2: warning: Value stored to 'ptr' is never read [clang-analyzer-deadcode.DeadStores]
ptr += read;
^ ~~~~
drivers/bluetooth/btintel.c:1425:2: note: Value stored to 'ptr' is never read
ptr += read;
^ ~~~~
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
sound/synth/util_mem.c:50:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
list_del(p);
^ ~
sound/synth/util_mem.c:46:6: note: Assuming 'hdr' is non-null
if (!hdr)
^
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
sound/synth/util_mem.c:46:2: note: '?' condition is false
if (!hdr)
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
sound/synth/util_mem.c:46:7: note: 'hdr' is non-null
if (!hdr)
^
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
(cond) ? \
^~~~
sound/synth/util_mem.c:46:7: note: 'hdr' is non-null
if (!hdr)
^
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
(cond) ? \
^~~~
sound/synth/util_mem.c:46:2: note: '?' condition is false
if (!hdr)
^
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^
include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
(cond) ? \
^
sound/synth/util_mem.c:46:2: note: Taking false branch
if (!hdr)
^
include/linux/compiler.h:56:23: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
sound/synth/util_mem.c:49:2: note: Loop condition is true. Entering loop body
while ((p = hdr->block.next) != &hdr->block) {
^
sound/synth/util_mem.c:51:3: note: Memory is released
kfree(get_memblk(p));
^~~~~~~~~~~~~~~~~~~~
sound/synth/util_mem.c:49:2: note: Loop condition is true. Entering loop body
while ((p = hdr->block.next) != &hdr->block) {
^
sound/synth/util_mem.c:50:3: note: Use of memory after it is freed
list_del(p);
^ ~
1 warning generated.
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
11 warnings generated.
net/ipv6/route.c:567:6: warning: Access to field 'nh' results in a dereference of a null pointer (loaded from variable 'f6i') [clang-analyzer-core.NullDereference]
if (unlikely(f6i->nh)) {
^
include/linux/compiler.h:48:24: note: expanded from macro 'unlikely'
# define unlikely(x) (__branch_check__(x, 0, __builtin_constant_p(x)))
^ ~
include/linux/compiler.h:33:33: note: expanded from macro '__branch_check__'
______r = __builtin_expect(!!(x), expect); \
^~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~
include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
vim +/ptr +1425 drivers/bluetooth/btintel.c
927ac8da35db763 Joseph Hwang 2021-08-15 1404
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1405 static int btintel_dmp_hdr(struct hci_dev *hdev, char *buf, size_t size)
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1406 {
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1407 char *ptr = buf;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1408 size_t rem = size;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1409 size_t read = 0;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1410
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1411 read = snprintf(ptr, rem, "Controller Name: 0x%X\n", hw_variant);
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1412 rem -= read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1413 ptr += read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1414
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1415 read = snprintf(ptr, rem, "Firmware Version: 0x%X\n", fw_build_num);
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1416 rem -= read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1417 ptr += read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1418
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1419 read = snprintf(ptr, rem, "Driver: %s\n", driver_name);
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1420 rem -= read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1421 ptr += read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1422
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1423 read = snprintf(ptr, rem, "Vendor: Intel\n");
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1424 rem -= read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 @1425 ptr += read;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1426
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1427 return size - rem;
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1428 }
677f482cb7027ab Abhishek Pandit-Subedi 2022-03-20 1429
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support
2022-03-21 1:34 ` [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support Manish Mandlik
@ 2022-03-21 7:38 ` kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-03-21 7:38 UTC (permalink / raw)
To: Manish Mandlik, marcel, luiz.dentz
Cc: kbuild-all, chromeos-bluetooth-upstreaming, linux-bluetooth,
Abhishek Pandit-Subedi, Manish Mandlik, Chethan Tumkur Narayan,
Johan Hedberg, linux-kernel
Hi Manish,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master v5.17 next-20220318]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Manish-Mandlik/Bluetooth-Add-support-for-devcoredump/20220321-093553
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
config: parisc-randconfig-r023-20220320 (https://download.01.org/0day-ci/archive/20220321/202203211500.z1bvoo6A-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/677f482cb7027ab030842015cfd6c188568df39f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Manish-Mandlik/Bluetooth-Add-support-for-devcoredump/20220321-093553
git checkout 677f482cb7027ab030842015cfd6c188568df39f
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=parisc SHELL=/bin/bash drivers/bluetooth/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/bluetooth/btintel.c: In function 'btintel_register_devcoredump_support':
>> drivers/bluetooth/btintel.c:1447:9: warning: 'strncpy' specified bound 16 equals destination size [-Wstringop-truncation]
1447 | strncpy(driver_name, driver, DRIVER_NAME_LEN);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/strncpy +1447 drivers/bluetooth/btintel.c
1429
1430 int btintel_register_devcoredump_support(struct hci_dev *hdev,
1431 const char *driver)
1432 {
1433 struct intel_debug_features features;
1434 int err;
1435
1436 err = btintel_read_debug_features(hdev, &features);
1437 if (err) {
1438 bt_dev_info(hdev, "Error reading debug features");
1439 return err;
1440 }
1441
1442 if (!(features.page1[0] & 0x3f)) {
1443 bt_dev_info(hdev, "Telemetry exception format not supported");
1444 return -EOPNOTSUPP;
1445 }
1446
> 1447 strncpy(driver_name, driver, DRIVER_NAME_LEN);
1448 hci_devcoredump_register(hdev, btintel_dmp_hdr, NULL);
1449
1450 return err;
1451 }
1452 EXPORT_SYMBOL_GPL(btintel_register_devcoredump_support);
1453
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support
2022-03-21 1:34 [PATCH 1/2] Bluetooth: Add support for devcoredump Manish Mandlik
@ 2022-03-21 1:34 ` Manish Mandlik
2022-03-21 7:38 ` kernel test robot
0 siblings, 1 reply; 3+ messages in thread
From: Manish Mandlik @ 2022-03-21 1:34 UTC (permalink / raw)
To: marcel, luiz.dentz
Cc: chromeos-bluetooth-upstreaming, linux-bluetooth,
Abhishek Pandit-Subedi, Manish Mandlik, Chethan Tumkur Narayan,
Johan Hedberg, linux-kernel
From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Intercept debug exception events from the controller and put them into
a devcoredump using hci devcoredump APIs. The debug exception contains
data in a TLV format and it will be parsed in userspace.
Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: Manish Mandlik <mmandlik@google.com>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Chethan Tumkur Narayan <chethan.tumkur.narayan@intel.com>
---
drivers/bluetooth/btintel.c | 60 +++++++++++++++++++++++++++++++++++++
drivers/bluetooth/btintel.h | 14 +++++++++
drivers/bluetooth/btusb.c | 47 +++++++++++++++++++++++++----
3 files changed, 115 insertions(+), 6 deletions(-)
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index 06514ed66022..9ac7a4441b38 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -32,6 +32,11 @@ struct cmd_write_boot_params {
u8 fw_build_yy;
} __packed;
+#define DRIVER_NAME_LEN 16
+static char driver_name[DRIVER_NAME_LEN];
+static u8 hw_variant;
+static u32 fw_build_num;
+
int btintel_check_bdaddr(struct hci_dev *hdev)
{
struct hci_rp_read_bd_addr *bda;
@@ -304,6 +309,9 @@ int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver)
return -EINVAL;
}
+ hw_variant = ver->hw_variant;
+ fw_build_num = ver->fw_build_num;
+
bt_dev_info(hdev, "%s revision %u.%u build %u week %u %u",
variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f,
ver->fw_build_num, ver->fw_build_ww,
@@ -497,6 +505,9 @@ static int btintel_version_info_tlv(struct hci_dev *hdev,
return -EINVAL;
}
+ hw_variant = INTEL_HW_VARIANT(version->cnvi_bt);
+ fw_build_num = version->build_num;
+
bt_dev_info(hdev, "%s timestamp %u.%u buildtype %u build %u", variant,
2000 + (version->timestamp >> 8), version->timestamp & 0xff,
version->build_type, version->build_num);
@@ -1391,6 +1402,55 @@ int btintel_set_quality_report(struct hci_dev *hdev, bool enable)
}
EXPORT_SYMBOL_GPL(btintel_set_quality_report);
+static int btintel_dmp_hdr(struct hci_dev *hdev, char *buf, size_t size)
+{
+ char *ptr = buf;
+ size_t rem = size;
+ size_t read = 0;
+
+ read = snprintf(ptr, rem, "Controller Name: 0x%X\n", hw_variant);
+ rem -= read;
+ ptr += read;
+
+ read = snprintf(ptr, rem, "Firmware Version: 0x%X\n", fw_build_num);
+ rem -= read;
+ ptr += read;
+
+ read = snprintf(ptr, rem, "Driver: %s\n", driver_name);
+ rem -= read;
+ ptr += read;
+
+ read = snprintf(ptr, rem, "Vendor: Intel\n");
+ rem -= read;
+ ptr += read;
+
+ return size - rem;
+}
+
+int btintel_register_devcoredump_support(struct hci_dev *hdev,
+ const char *driver)
+{
+ struct intel_debug_features features;
+ int err;
+
+ err = btintel_read_debug_features(hdev, &features);
+ if (err) {
+ bt_dev_info(hdev, "Error reading debug features");
+ return err;
+ }
+
+ if (!(features.page1[0] & 0x3f)) {
+ bt_dev_info(hdev, "Telemetry exception format not supported");
+ return -EOPNOTSUPP;
+ }
+
+ strncpy(driver_name, driver, DRIVER_NAME_LEN);
+ hci_devcoredump_register(hdev, btintel_dmp_hdr, NULL);
+
+ return err;
+}
+EXPORT_SYMBOL_GPL(btintel_register_devcoredump_support);
+
static const struct firmware *btintel_legacy_rom_get_fw(struct hci_dev *hdev,
struct intel_version *ver)
{
diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h
index e0060e58573c..785c63cc6c1d 100644
--- a/drivers/bluetooth/btintel.h
+++ b/drivers/bluetooth/btintel.h
@@ -137,6 +137,12 @@ struct intel_offload_use_cases {
__u8 preset[8];
} __packed;
+#define INTEL_TLV_TYPE_ID 0x1
+
+#define INTEL_TLV_SYSTEM_EXCEPTION 0x0
+#define INTEL_TLV_FATAL_EXCEPTION 0x1
+#define INTEL_TLV_DEBUG_EXCEPTION 0x2
+
#define INTEL_HW_PLATFORM(cnvx_bt) ((u8)(((cnvx_bt) & 0x0000ff00) >> 8))
#define INTEL_HW_VARIANT(cnvx_bt) ((u8)(((cnvx_bt) & 0x003f0000) >> 16))
#define INTEL_CNVX_TOP_TYPE(cnvx_top) ((cnvx_top) & 0x00000fff)
@@ -206,6 +212,8 @@ int btintel_read_boot_params(struct hci_dev *hdev,
struct intel_boot_params *params);
int btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver,
const struct firmware *fw, u32 *boot_param);
+int btintel_register_devcoredump_support(struct hci_dev *hdev,
+ const char *driver);
int btintel_configure_setup(struct hci_dev *hdev);
void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len);
void btintel_secure_send_result(struct hci_dev *hdev,
@@ -302,6 +310,12 @@ static inline void btintel_secure_send_result(struct hci_dev *hdev,
{
}
+static int btintel_register_devcoredump_support(struct hci_dev *hdev,
+ const char *driver)
+{
+ return -EOPNOTSUPP;
+}
+
static inline int btintel_set_quality_report(struct hci_dev *hdev, bool enable)
{
return -ENODEV;
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 50df417207af..42a3d90180a4 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2155,16 +2155,42 @@ static int btusb_recv_bulk_intel(struct btusb_data *data, void *buffer,
return btusb_recv_bulk(data, buffer, count);
}
+static int btusb_intel_diagnostics(struct hci_dev *hdev, struct sk_buff *skb)
+{
+ struct intel_tlv *tlv = (void *)&skb->data[5];
+
+ /* The first event is always an event type TLV */
+ if (tlv->type != INTEL_TLV_TYPE_ID)
+ goto recv_frame;
+
+ switch (tlv->val[0]) {
+ case INTEL_TLV_SYSTEM_EXCEPTION:
+ case INTEL_TLV_FATAL_EXCEPTION:
+ case INTEL_TLV_DEBUG_EXCEPTION:
+ /* Generate devcoredump from exception */
+ if (!hci_devcoredump_init(hdev, skb->len)) {
+ hci_devcoredump_append(hdev, skb);
+ hci_devcoredump_complete(hdev);
+ return 0;
+ }
+ break;
+ }
+
+recv_frame:
+ return hci_recv_frame(hdev, skb);
+}
+
static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb)
{
- if (btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
- struct hci_event_hdr *hdr = (void *)skb->data;
+ struct hci_event_hdr *hdr = (void *)skb->data;
+ const char diagnostics_hdr[] = { 0x87, 0x80, 0x03 };
- if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff &&
- hdr->plen > 0) {
- const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1;
- unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1;
+ if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff &&
+ hdr->plen > 0) {
+ const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1;
+ unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1;
+ if (btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
switch (skb->data[2]) {
case 0x02:
/* When switching to the operational firmware
@@ -2183,6 +2209,15 @@ static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb)
break;
}
}
+
+ /* Handle all diagnostics events separately. May still call
+ * hci_recv_frame.
+ */
+ if (len >= sizeof(diagnostics_hdr) &&
+ memcmp(&skb->data[2], diagnostics_hdr,
+ sizeof(diagnostics_hdr)) == 0) {
+ return btusb_intel_diagnostics(hdev, skb);
+ }
}
return hci_recv_frame(hdev, skb);
--
2.35.1.894.gb6a874cedc-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-03-26 5:47 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-26 5:47 [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2022-03-21 1:34 [PATCH 1/2] Bluetooth: Add support for devcoredump Manish Mandlik
2022-03-21 1:34 ` [PATCH 2/2] Bluetooth: btusb: Add Intel devcoredump support Manish Mandlik
2022-03-21 7:38 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.