* [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event @ 2021-11-20 16:40 Manish Mandlik 2021-11-20 16:40 ` [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events Manish Mandlik 2021-11-20 19:47 ` [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event kernel test robot 0 siblings, 2 replies; 4+ messages in thread From: Manish Mandlik @ 2021-11-20 16:40 UTC (permalink / raw) To: marcel, luiz.dentz Cc: chromeos-bluetooth-upstreaming, linux-bluetooth, Manish Mandlik, Miao-chen Chou, David S. Miller, Jakub Kicinski, Johan Hedberg, linux-kernel, netdev Whenever the controller starts/stops monitoring a bt device, it sends MSFT Monitor Device event. Add handler to read this vendor event. Test performed: - Verified by logs that the MSFT Monitor Device event is received from the controller whenever it starts/stops monitoring a device. Signed-off-by: Manish Mandlik <mmandlik@google.com> Reviewed-by: Miao-chen Chou <mcchou@google.com> --- Hello Bt-Maintainers, As mentioned in the bluez patch series [1], we need to capture the 'MSFT Monitor Device' event from the controller and pass on the necessary information to the bluetoothd. This is required to further optimize the power consumption by avoiding handling of RSSI thresholds and timeouts in the user space and let the controller do the RSSI tracking. This patch series adds support to read the MSFT vendor event HCI_VS_MSFT_LE_Monitor_Device_Event and introduces new MGMT events MGMT_EV_ADV_MONITOR_DEVICE_FOUND and MGMT_EV_ADV_MONITOR_DEVICE_LOST to indicate that the controller has started/stopped tracking a particular device. Please let me know what you think about this or if you have any further questions. [1] https://patchwork.kernel.org/project/bluetooth/list/?series=583423 Thanks, Manish. Changes in v5: - Split v4 into two patches. - Buffer controller Device Found event and maintain the device tracking state in the kernel. Changes in v4: - Add Advertisement Monitor Device Found event and update addr type. Changes in v3: - Discard changes to the Device Found event and notify bluetoothd only when the controller stops monitoring the device via new Device Lost event. Changes in v2: - Instead of creating a new 'Device Tracking' event, add a flag 'Device Tracked' in the existing 'Device Found' event and add a new 'Device Lost' event to indicate that the controller has stopped tracking that device. include/net/bluetooth/hci_core.h | 11 +++ net/bluetooth/hci_core.c | 1 + net/bluetooth/msft.c | 127 ++++++++++++++++++++++++++++++- 3 files changed, 138 insertions(+), 1 deletion(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 2560cfe80db8..6734b394c6e7 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -257,6 +257,15 @@ struct adv_info { #define HCI_ADV_TX_POWER_NO_PREFERENCE 0x7F +struct monitored_device { + struct list_head list; + + bdaddr_t bdaddr; + __u8 addr_type; + __u16 handle; + bool notified; +}; + struct adv_pattern { struct list_head list; __u8 ad_type; @@ -588,6 +597,8 @@ struct hci_dev { struct delayed_work interleave_scan; + struct list_head monitored_devices; + #if IS_ENABLED(CONFIG_BT_LEDS) struct led_trigger *power_led; #endif diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index fdc0dcf8ee36..d4bcd511530a 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -2503,6 +2503,7 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv) INIT_LIST_HEAD(&hdev->conn_hash.list); INIT_LIST_HEAD(&hdev->adv_instances); INIT_LIST_HEAD(&hdev->blocked_keys); + INIT_LIST_HEAD(&hdev->monitored_devices); INIT_LIST_HEAD(&hdev->local_codecs); INIT_WORK(&hdev->rx_work, hci_rx_work); diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c index 1122097e1e49..06b3b006deb8 100644 --- a/net/bluetooth/msft.c +++ b/net/bluetooth/msft.c @@ -80,6 +80,14 @@ struct msft_rp_le_set_advertisement_filter_enable { __u8 sub_opcode; } __packed; +#define MSFT_EV_LE_MONITOR_DEVICE 0x02 +struct msft_ev_le_monitor_device { + __u8 addr_type; + bdaddr_t bdaddr; + __u8 monitor_handle; + __u8 monitor_state; +} __packed; + struct msft_monitor_advertisement_handle_data { __u8 msft_handle; __u16 mgmt_handle; @@ -266,6 +274,7 @@ static void msft_le_cancel_monitor_advertisement_cb(struct hci_dev *hdev, struct msft_data *msft = hdev->msft_data; int err; bool pending; + struct monitored_device *dev, *tmp; if (status) goto done; @@ -296,6 +305,15 @@ static void msft_le_cancel_monitor_advertisement_cb(struct hci_dev *hdev, list_del(&handle_data->list); kfree(handle_data); + + /* Clear any monitored devices by this Adv Monitor */ + list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, + list) { + if (dev->handle == handle_data->mgmt_handle) { + list_del(&dev->list); + kfree(dev); + } + } } /* If remove all monitors is required, we need to continue the process @@ -538,6 +556,7 @@ void msft_do_close(struct hci_dev *hdev) struct msft_data *msft = hdev->msft_data; struct msft_monitor_advertisement_handle_data *handle_data, *tmp; struct adv_monitor *monitor; + struct monitored_device *dev, *tmp_dev; if (!msft) return; @@ -557,6 +576,16 @@ void msft_do_close(struct hci_dev *hdev) list_del(&handle_data->list); kfree(handle_data); } + + hci_dev_lock(hdev); + + /* Clear any devices that are being monitored */ + list_for_each_entry_safe(dev, tmp_dev, &hdev->monitored_devices, list) { + list_del(&dev->list); + kfree(dev); + } + + hci_dev_unlock(hdev); } void msft_register(struct hci_dev *hdev) @@ -590,6 +619,90 @@ void msft_unregister(struct hci_dev *hdev) kfree(msft); } +/* This function requires the caller holds hdev->lock */ +static void msft_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, + __u8 addr_type, __u16 mgmt_handle) +{ + struct monitored_device *dev; + + dev = kmalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) { + bt_dev_err(hdev, "MSFT vendor event %u: no memory", + MSFT_EV_LE_MONITOR_DEVICE); + return; + } + + bacpy(&dev->bdaddr, bdaddr); + dev->addr_type = addr_type; + dev->handle = mgmt_handle; + dev->notified = false; + + INIT_LIST_HEAD(&dev->list); + list_add(&dev->list, &hdev->monitored_devices); +} + +/* This function requires the caller holds hdev->lock */ +static void msft_device_lost(struct hci_dev *hdev, bdaddr_t *bdaddr, + __u8 addr_type, __u16 mgmt_handle) +{ + struct monitored_device *dev, *tmp; + + list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, list) { + if (dev->handle == mgmt_handle) { + list_del(&dev->list); + kfree(dev); + + break; + } + } +} + +/* This function requires the caller holds hdev->lock */ +static void msft_monitor_device_evt(struct hci_dev *hdev, struct sk_buff *skb) +{ + struct msft_ev_le_monitor_device *ev = (void *)skb->data; + struct msft_monitor_advertisement_handle_data *handle_data; + u8 addr_type; + + if (skb->len < sizeof(*ev)) { + bt_dev_err(hdev, + "MSFT vendor event %u: insufficient data (len: %u)", + MSFT_EV_LE_MONITOR_DEVICE, skb->len); + return; + } + skb_pull(skb, sizeof(*ev)); + + bt_dev_dbg(hdev, + "MSFT vendor event %u: handle 0x%04x state %d addr %pMR", + MSFT_EV_LE_MONITOR_DEVICE, ev->monitor_handle, + ev->monitor_state, &ev->bdaddr); + + handle_data = msft_find_handle_data(hdev, ev->monitor_handle, false); + + switch (ev->addr_type) { + case ADDR_LE_DEV_PUBLIC: + addr_type = BDADDR_LE_PUBLIC; + break; + + case ADDR_LE_DEV_RANDOM: + addr_type = BDADDR_LE_RANDOM; + break; + + default: + bt_dev_err(hdev, + "MSFT vendor event %u: unknown addr type 0x%02x", + ev->addr_type); + return; + } + + if (ev->monitor_state) + msft_device_found(hdev, &ev->bdaddr, addr_type, + handle_data->mgmt_handle); + else + msft_device_lost(hdev, &ev->bdaddr, addr_type, + handle_data->mgmt_handle); +} + void msft_vendor_evt(struct hci_dev *hdev, struct sk_buff *skb) { struct msft_data *msft = hdev->msft_data; @@ -617,10 +730,22 @@ void msft_vendor_evt(struct hci_dev *hdev, struct sk_buff *skb) if (skb->len < 1) return; + hci_dev_lock(hdev); + event = *skb->data; skb_pull(skb, 1); - bt_dev_dbg(hdev, "MSFT vendor event %u", event); + switch (event) { + case MSFT_EV_LE_MONITOR_DEVICE: + msft_monitor_device_evt(hdev, skb); + break; + + default: + bt_dev_dbg(hdev, "MSFT vendor event %u", event); + break; + } + + hci_dev_unlock(hdev); } __u64 msft_get_features(struct hci_dev *hdev) -- 2.34.0.rc2.393.gf8c9666880-goog ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events 2021-11-20 16:40 [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event Manish Mandlik @ 2021-11-20 16:40 ` Manish Mandlik 2021-11-20 20:12 ` kernel test robot 2021-11-20 19:47 ` [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event kernel test robot 1 sibling, 1 reply; 4+ messages in thread From: Manish Mandlik @ 2021-11-20 16:40 UTC (permalink / raw) To: marcel, luiz.dentz Cc: chromeos-bluetooth-upstreaming, linux-bluetooth, Manish Mandlik, Miao-chen Chou, David S. Miller, Jakub Kicinski, Johan Hedberg, linux-kernel, netdev This patch introduces two new MGMT events for notifying the bluetoothd whenever the controller starts/stops monitoring a device. Test performed: - Verified by logs that the MSFT Monitor Device is received from the controller and the bluetoothd is notified whenever the controller starts/stops monitoring a device. Signed-off-by: Manish Mandlik <mmandlik@google.com> Reviewed-by: Miao-chen Chou <mcchou@google.com> --- Changes in v5: - New patch in the series. Split previous patch into two. - Update the Device Found logic to send existing Device Found event or Adv Monitor Device Found event depending on the active scanning state. include/net/bluetooth/hci_core.h | 3 + include/net/bluetooth/mgmt.h | 16 +++++ net/bluetooth/mgmt.c | 100 ++++++++++++++++++++++++++++++- net/bluetooth/msft.c | 15 ++++- 4 files changed, 132 insertions(+), 2 deletions(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 6734b394c6e7..2aabd6f62f51 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -598,6 +598,7 @@ struct hci_dev { struct delayed_work interleave_scan; struct list_head monitored_devices; + bool advmon_pend_notify; #if IS_ENABLED(CONFIG_BT_LEDS) struct led_trigger *power_led; @@ -1844,6 +1845,8 @@ void mgmt_adv_monitor_removed(struct hci_dev *hdev, u16 handle); int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip); int mgmt_add_adv_patterns_monitor_complete(struct hci_dev *hdev, u8 status); int mgmt_remove_adv_monitor_complete(struct hci_dev *hdev, u8 status); +void mgmt_adv_monitor_device_lost(struct hci_dev *hdev, u16 handle, + bdaddr_t *bdaddr, u8 addr_type); u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency, u16 to_multiplier); diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 23a0524061b7..4b85f93b8a77 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h @@ -1103,3 +1103,19 @@ struct mgmt_ev_controller_resume { #define MGMT_WAKE_REASON_NON_BT_WAKE 0x0 #define MGMT_WAKE_REASON_UNEXPECTED 0x1 #define MGMT_WAKE_REASON_REMOTE_WAKE 0x2 + +#define MGMT_EV_ADV_MONITOR_DEVICE_FOUND 0x002f +struct mgmt_ev_adv_monitor_device_found { + __le16 monitor_handle; + struct mgmt_addr_info addr; + __s8 rssi; + __le32 flags; + __le16 eir_len; + __u8 eir[0]; +} __packed; + +#define MGMT_EV_ADV_MONITOR_DEVICE_LOST 0x0030 +struct mgmt_ev_adv_monitor_device_lost { + __le16 monitor_handle; + struct mgmt_addr_info addr; +} __packed; diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index f8f74d344297..89b9b62752b5 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -174,6 +174,8 @@ static const u16 mgmt_events[] = { MGMT_EV_ADV_MONITOR_REMOVED, MGMT_EV_CONTROLLER_SUSPEND, MGMT_EV_CONTROLLER_RESUME, + MGMT_EV_ADV_MONITOR_DEVICE_FOUND, + MGMT_EV_ADV_MONITOR_DEVICE_LOST, }; static const u16 mgmt_untrusted_commands[] = { @@ -9524,6 +9526,78 @@ static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir, return true; } +void mgmt_adv_monitor_device_lost(struct hci_dev *hdev, u16 handle, + bdaddr_t *bdaddr, u8 addr_type) +{ + struct mgmt_ev_adv_monitor_device_lost ev; + + ev.monitor_handle = cpu_to_le16(handle); + bacpy(&ev.addr.bdaddr, bdaddr); + ev.addr.type = addr_type; + + mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_LOST, hdev, &ev, sizeof(ev), + NULL); +} + +void mgmt_adv_monitor_device_found(struct hci_dev *hdev, + struct mgmt_ev_device_found *ev, + size_t ev_size, bool discovering) +{ + char buf[518]; + struct mgmt_ev_adv_monitor_device_found *advmon_ev = (void *)buf; + size_t advmon_ev_size; + struct monitored_device *dev, *tmp; + bool matched = false; + bool notified = false; + + /* Make sure that the buffer is big enough */ + advmon_ev_size = ev_size + (sizeof(*advmon_ev) - sizeof(*ev)); + if (advmon_ev_size > sizeof(buf)) + return; + + /* ADV_MONITOR_DEVICE_FOUND is similar to DEVICE_FOUND event except + * that it also has 'monitor_handle'. Make a copy of DEVICE_FOUND and + * store monitor_handle of the matched monitor. + */ + memcpy(&advmon_ev->addr, ev, ev_size); + + hdev->advmon_pend_notify = false; + + list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, list) { + if (!bacmp(&dev->bdaddr, &advmon_ev->addr.bdaddr)) { + matched = true; + + if (!dev->notified) { + advmon_ev->monitor_handle = + cpu_to_le16(dev->handle); + + mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_FOUND, + hdev, advmon_ev, advmon_ev_size, + NULL); + + notified = true; + dev->notified = true; + } + } + + if (!dev->notified) + hdev->advmon_pend_notify = true; + } + + if (!discovering && + ((matched && !notified) || !msft_monitor_supported(hdev))) { + /* Handle 0 indicates that we are not active scanning and this + * is a subsequent advertisement report for an already matched + * Advertisement Monitor or the controller offloading support + * is not available. + */ + advmon_ev->monitor_handle = 0; + + mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_FOUND, hdev, advmon_ev, + advmon_ev_size, NULL); + } +} + void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, u8 addr_type, u8 *dev_class, s8 rssi, u32 flags, u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len) @@ -9606,7 +9680,31 @@ void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len); ev_size = sizeof(*ev) + eir_len + scan_rsp_len; - mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL); + /* We have received the Advertisement Report because: + * 1. the kernel has initiated active discovery + * 2. if not, we have pend_le_reports > 0 in which case we are doing + * passive scanning + * 3. if none of the above is true, we have one or more active + * Advertisement Monitor + * + * For case 1 and 2, report all advertisements via MGMT_EV_DEVICE_FOUND + * and report ONLY one advertisement per device for the matched Monitor + * via MGMT_EV_ADV_MONITOR_DEVICE_FOUND event. + * + * For case 3, since we are not active scanning and all advertisements + * received are due to a matched Advertisement Monitor, report all + * advertisements ONLY via MGMT_EV_ADV_MONITOR_DEVICE_FOUND event. + */ + + if (hci_discovery_active(hdev) || + (link_type == LE_LINK && !list_empty(&hdev->pend_le_reports))) { + mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL); + + if (hdev->advmon_pend_notify) + mgmt_adv_monitor_device_found(hdev, ev, ev_size, true); + } else { + mgmt_adv_monitor_device_found(hdev, ev, ev_size, false); + } } void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c index 06b3b006deb8..b4f56dddd79c 100644 --- a/net/bluetooth/msft.c +++ b/net/bluetooth/msft.c @@ -579,8 +579,16 @@ void msft_do_close(struct hci_dev *hdev) hci_dev_lock(hdev); - /* Clear any devices that are being monitored */ + /* Clear any devices that are being monitored and notify device lost */ + + hdev->advmon_pend_notify = false; + list_for_each_entry_safe(dev, tmp_dev, &hdev->monitored_devices, list) { + if (dev->notified) + mgmt_adv_monitor_device_lost(hdev, dev->handle, + &dev->bdaddr, + dev->addr_type); + list_del(&dev->list); kfree(dev); } @@ -639,6 +647,7 @@ static void msft_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, INIT_LIST_HEAD(&dev->list); list_add(&dev->list, &hdev->monitored_devices); + hdev->advmon_pend_notify = true; } /* This function requires the caller holds hdev->lock */ @@ -649,6 +658,10 @@ static void msft_device_lost(struct hci_dev *hdev, bdaddr_t *bdaddr, list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, list) { if (dev->handle == mgmt_handle) { + if (dev->notified) + mgmt_adv_monitor_device_lost(hdev, mgmt_handle, + bdaddr, addr_type); + list_del(&dev->list); kfree(dev); -- 2.34.0.rc2.393.gf8c9666880-goog ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events 2021-11-20 16:40 ` [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events Manish Mandlik @ 2021-11-20 20:12 ` kernel test robot 0 siblings, 0 replies; 4+ messages in thread From: kernel test robot @ 2021-11-20 20:12 UTC (permalink / raw) To: Manish Mandlik, marcel, luiz.dentz Cc: kbuild-all, chromeos-bluetooth-upstreaming, linux-bluetooth, Manish Mandlik, Miao-chen Chou, Jakub Kicinski, Johan Hedberg, linux-kernel, netdev [-- Attachment #1: Type: text/plain, Size: 4008 bytes --] Hi Manish, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bluetooth-next/master] [also build test WARNING on next-20211118] [cannot apply to bluetooth/master v5.16-rc1] [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-Handle-MSFT-Monitor-Device-Event/20211121-004127 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: m68k-randconfig-r016-20211121 (attached as .config) compiler: m68k-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/9d49f17ae7d7c8f17e51a8d1e0fece8f76cc2dd6 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Manish-Mandlik/bluetooth-Handle-MSFT-Monitor-Device-Event/20211121-004127 git checkout 9d49f17ae7d7c8f17e51a8d1e0fece8f76cc2dd6 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 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 >>): >> net/bluetooth/mgmt.c:9542:6: warning: no previous prototype for 'mgmt_adv_monitor_device_found' [-Wmissing-prototypes] 9542 | void mgmt_adv_monitor_device_found(struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/mgmt_adv_monitor_device_found +9542 net/bluetooth/mgmt.c 9541 > 9542 void mgmt_adv_monitor_device_found(struct hci_dev *hdev, 9543 struct mgmt_ev_device_found *ev, 9544 size_t ev_size, bool discovering) 9545 { 9546 char buf[518]; 9547 struct mgmt_ev_adv_monitor_device_found *advmon_ev = (void *)buf; 9548 size_t advmon_ev_size; 9549 struct monitored_device *dev, *tmp; 9550 bool matched = false; 9551 bool notified = false; 9552 9553 /* Make sure that the buffer is big enough */ 9554 advmon_ev_size = ev_size + (sizeof(*advmon_ev) - sizeof(*ev)); 9555 if (advmon_ev_size > sizeof(buf)) 9556 return; 9557 9558 /* ADV_MONITOR_DEVICE_FOUND is similar to DEVICE_FOUND event except 9559 * that it also has 'monitor_handle'. Make a copy of DEVICE_FOUND and 9560 * store monitor_handle of the matched monitor. 9561 */ 9562 memcpy(&advmon_ev->addr, ev, ev_size); 9563 9564 hdev->advmon_pend_notify = false; 9565 9566 list_for_each_entry_safe(dev, tmp, &hdev->monitored_devices, list) { 9567 if (!bacmp(&dev->bdaddr, &advmon_ev->addr.bdaddr)) { 9568 matched = true; 9569 9570 if (!dev->notified) { 9571 advmon_ev->monitor_handle = 9572 cpu_to_le16(dev->handle); 9573 9574 mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_FOUND, 9575 hdev, advmon_ev, advmon_ev_size, 9576 NULL); 9577 9578 notified = true; 9579 dev->notified = true; 9580 } 9581 } 9582 9583 if (!dev->notified) 9584 hdev->advmon_pend_notify = true; 9585 } 9586 9587 if (!discovering && 9588 ((matched && !notified) || !msft_monitor_supported(hdev))) { 9589 /* Handle 0 indicates that we are not active scanning and this 9590 * is a subsequent advertisement report for an already matched 9591 * Advertisement Monitor or the controller offloading support 9592 * is not available. 9593 */ 9594 advmon_ev->monitor_handle = 0; 9595 9596 mgmt_event(MGMT_EV_ADV_MONITOR_DEVICE_FOUND, hdev, advmon_ev, 9597 advmon_ev_size, NULL); 9598 } 9599 } 9600 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 30748 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event 2021-11-20 16:40 [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event Manish Mandlik 2021-11-20 16:40 ` [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events Manish Mandlik @ 2021-11-20 19:47 ` kernel test robot 1 sibling, 0 replies; 4+ messages in thread From: kernel test robot @ 2021-11-20 19:47 UTC (permalink / raw) To: Manish Mandlik, marcel, luiz.dentz Cc: kbuild-all, chromeos-bluetooth-upstreaming, linux-bluetooth, Manish Mandlik, Miao-chen Chou, Jakub Kicinski, Johan Hedberg, linux-kernel, netdev [-- Attachment #1: Type: text/plain, Size: 3201 bytes --] Hi Manish, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bluetooth-next/master] [also build test WARNING on next-20211118] [cannot apply to bluetooth/master v5.16-rc1] [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-Handle-MSFT-Monitor-Device-Event/20211121-004127 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: m68k-randconfig-r016-20211121 (attached as .config) compiler: m68k-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/7965690cffd0ffe53b33e1cebc2d0388322cc42e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Manish-Mandlik/bluetooth-Handle-MSFT-Monitor-Device-Event/20211121-004127 git checkout 7965690cffd0ffe53b33e1cebc2d0388322cc42e # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 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 >>): In file included from net/bluetooth/msft.c:6: net/bluetooth/msft.c: In function 'msft_monitor_device_evt': >> include/net/bluetooth/bluetooth.h:212:16: warning: format '%x' expects a matching 'unsigned int' argument [-Wformat=] 212 | BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__) | ^~~~~~ include/net/bluetooth/bluetooth.h:199:40: note: in definition of macro 'BT_ERR' 199 | #define BT_ERR(fmt, ...) bt_err(fmt "\n", ##__VA_ARGS__) | ^~~ net/bluetooth/msft.c:692:17: note: in expansion of macro 'bt_dev_err' 692 | bt_dev_err(hdev, | ^~~~~~~~~~ vim +212 include/net/bluetooth/bluetooth.h ^1da177e4c3f41 Linus Torvalds 2005-04-16 206 6f558b70fb39fc Loic Poulain 2015-08-30 207 #define bt_dev_info(hdev, fmt, ...) \ 6f558b70fb39fc Loic Poulain 2015-08-30 208 BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__) 594b31ea7dc610 Frederic Danis 2015-09-23 209 #define bt_dev_warn(hdev, fmt, ...) \ 594b31ea7dc610 Frederic Danis 2015-09-23 210 BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__) 6f558b70fb39fc Loic Poulain 2015-08-30 211 #define bt_dev_err(hdev, fmt, ...) \ 6f558b70fb39fc Loic Poulain 2015-08-30 @212 BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__) 6f558b70fb39fc Loic Poulain 2015-08-30 213 #define bt_dev_dbg(hdev, fmt, ...) \ 6f558b70fb39fc Loic Poulain 2015-08-30 214 BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__) 6f558b70fb39fc Loic Poulain 2015-08-30 215 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 30748 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-11-20 20:12 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-11-20 16:40 [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event Manish Mandlik 2021-11-20 16:40 ` [PATCH v5 2/2] bluetooth: Add MGMT Adv Monitor Device Found/Lost events Manish Mandlik 2021-11-20 20:12 ` kernel test robot 2021-11-20 19:47 ` [PATCH v5 1/2] bluetooth: Handle MSFT Monitor Device Event kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).