Message ID | 20210814005024.v8.3.Ibd93c7f71f8819d2efdfa3ee2f096319e3c44ea4@changeid (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v8,1/5] Bluetooth: btusb: disable Intel link statistics telemetry events | expand |
Hi Joseph, Thank you for the patch! Yet something to improve: [auto build test ERROR on bluetooth-next/master] [also build test ERROR on next-20210813] [cannot apply to bluetooth/master v5.14-rc5] [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/Joseph-Hwang/Bluetooth-btusb-disable-Intel-link-statistics-telemetry-events/20210814-005423 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: m68k-allmodconfig (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/7a3d3d918d33f8f8796cb27e1f137c56c2afaeac git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Joseph-Hwang/Bluetooth-btusb-disable-Intel-link-statistics-telemetry-events/20210814-005423 git checkout 7a3d3d918d33f8f8796cb27e1f137c56c2afaeac # save the attached .config to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=m68k SHELL=/bin/bash net/bluetooth/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): net/bluetooth/mgmt.c: In function 'set_exp_feature': >> net/bluetooth/mgmt.c:4084:12: error: invalid storage class for function 'get_device_flags' 4084 | static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4084:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] 4084 | static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~ >> net/bluetooth/mgmt.c:4134:13: error: invalid storage class for function 'device_flags_changed' 4134 | static void device_flags_changed(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4148:12: error: invalid storage class for function 'set_device_flags' 4148 | static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4206:13: error: invalid storage class for function 'mgmt_adv_monitor_added' 4206 | static void mgmt_adv_monitor_added(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4236:12: error: invalid storage class for function 'read_adv_mon_features' 4236 | static int read_adv_mon_features(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4324:12: error: invalid storage class for function '__add_adv_patterns_monitor' 4324 | static int __add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4388:13: error: invalid storage class for function 'parse_adv_monitor_rssi' 4388 | static void parse_adv_monitor_rssi(struct adv_monitor *m, | ^~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4413:11: error: invalid storage class for function 'parse_adv_monitor_pattern' 4413 | static u8 parse_adv_monitor_pattern(struct adv_monitor *m, u8 pattern_count, | ^~~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4444:12: error: invalid storage class for function 'add_adv_patterns_monitor' 4444 | static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4481:12: error: invalid storage class for function 'add_adv_patterns_monitor_rssi' 4481 | static int add_adv_patterns_monitor_rssi(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4549:12: error: invalid storage class for function 'remove_adv_monitor' 4549 | static int remove_adv_monitor(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4614:13: error: invalid storage class for function 'read_local_oob_data_complete' 4614 | static void read_local_oob_data_complete(struct hci_dev *hdev, u8 status, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4673:12: error: invalid storage class for function 'read_local_oob_data' 4673 | static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4724:12: error: invalid storage class for function 'add_remote_oob_data' 4724 | static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4832:12: error: invalid storage class for function 'remove_remote_oob_data' 4832 | static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4899:13: error: invalid storage class for function 'discovery_type_is_valid' 4899 | static bool discovery_type_is_valid(struct hci_dev *hdev, uint8_t type, | ^~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4926:12: error: invalid storage class for function 'start_discovery_internal' 4926 | static int start_discovery_internal(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:4994:12: error: invalid storage class for function 'start_discovery' 4994 | static int start_discovery(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~ >> net/bluetooth/mgmt.c:5001:12: error: invalid storage class for function 'start_limited_discovery' 5001 | static int start_limited_discovery(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5009:12: error: invalid storage class for function 'service_discovery_cmd_complete' 5009 | static int service_discovery_cmd_complete(struct mgmt_pending_cmd *cmd, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5016:12: error: invalid storage class for function 'start_service_discovery' 5016 | static int start_service_discovery(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5148:12: error: invalid storage class for function 'stop_discovery' 5148 | static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5190:12: error: invalid storage class for function 'confirm_name' 5190 | static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~ net/bluetooth/mgmt.c:5232:12: error: invalid storage class for function 'block_device' 5232 | static int block_device(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~ net/bluetooth/mgmt.c:5268:12: error: invalid storage class for function 'unblock_device' 5268 | static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5304:12: error: invalid storage class for function 'set_device_id' 5304 | static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~ net/bluetooth/mgmt.c:5339:13: error: invalid storage class for function 'enable_advertising_instance' 5339 | static void enable_advertising_instance(struct hci_dev *hdev, u8 status, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5345:13: error: invalid storage class for function 'set_advertising_complete' 5345 | static void set_advertising_complete(struct hci_dev *hdev, u8 status, | ^~~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5419:12: error: invalid storage class for function 'set_advertising' 5419 | static int set_advertising(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5538:12: error: invalid storage class for function 'set_static_address' 5538 | static int set_static_address(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5582:12: error: invalid storage class for function 'set_scan_params' 5582 | static int set_scan_params(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5639:13: error: invalid storage class for function 'fast_connectable_complete' 5639 | static void fast_connectable_complete(struct hci_dev *hdev, u8 status, | ^~~~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5673:12: error: invalid storage class for function 'set_fast_connectable' 5673 | static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5738:13: error: invalid storage class for function 'set_bredr_complete' 5738 | static void set_bredr_complete(struct hci_dev *hdev, u8 status, u16 opcode) | ^~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5770:12: error: invalid storage class for function 'set_bredr' 5770 | static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) | ^~~~~~~~~ net/bluetooth/mgmt.c:5882:13: error: invalid storage class for function 'sc_enable_complete' 5882 | static void sc_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode) | ^~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:5927:12: error: invalid storage class for function 'set_secure_conn' 5927 | static int set_secure_conn(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6015:12: error: invalid storage class for function 'set_debug_keys' 6015 | static int set_debug_keys(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6062:12: error: invalid storage class for function 'set_privacy' 6062 | static int set_privacy(struct sock *sk, struct hci_dev *hdev, void *cp_data, | ^~~~~~~~~~~ net/bluetooth/mgmt.c:6119:13: error: invalid storage class for function 'irk_is_valid' 6119 | static bool irk_is_valid(struct mgmt_irk_info *irk) | ^~~~~~~~~~~~ net/bluetooth/mgmt.c:6135:12: error: invalid storage class for function 'load_irks' 6135 | static int load_irks(struct sock *sk, struct hci_dev *hdev, void *cp_data, | ^~~~~~~~~ net/bluetooth/mgmt.c:6206:13: error: invalid storage class for function 'ltk_is_valid' 6206 | static bool ltk_is_valid(struct mgmt_ltk_info *key) | ^~~~~~~~~~~~ net/bluetooth/mgmt.c:6225:12: error: invalid storage class for function 'load_long_term_keys' 6225 | static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev, | ^~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6321:12: error: invalid storage class for function 'conn_info_cmd_complete' 6321 | static int conn_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) | ^~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6348:13: error: invalid storage class for function 'conn_info_refresh_complete' 6348 | static void conn_info_refresh_complete(struct hci_dev *hdev, u8 hci_status, | ^~~~~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6402:12: error: invalid storage class for function 'get_conn_info' 6402 | static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~ net/bluetooth/mgmt.c:6523:12: error: invalid storage class for function 'clock_info_cmd_complete' 6523 | static int clock_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) | ^~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6559:13: error: invalid storage class for function 'get_clock_info_complete' 6559 | static void get_clock_info_complete(struct hci_dev *hdev, u8 status, u16 opcode) | ^~~~~~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6591:12: error: invalid storage class for function 'get_clock_info' 6591 | static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data, | ^~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6667:13: error: invalid storage class for function 'is_connected' 6667 | static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type) | ^~~~~~~~~~~~ net/bluetooth/mgmt.c:6685:12: error: invalid storage class for function 'hci_conn_params_set' 6685 | static int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, | ^~~~~~~~~~~~~~~~~~~ net/bluetooth/mgmt.c:6729:13: error: invalid storage class for function 'device_added' 6729 | static void device_added(struct sock *sk, struct hci_dev *hdev, vim +/get_device_flags +4084 net/bluetooth/mgmt.c 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4083 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 @4084 static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4085 u16 data_len) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4086 { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4087 struct mgmt_cp_get_device_flags *cp = data; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4088 struct mgmt_rp_get_device_flags rp; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4089 struct bdaddr_list_with_flags *br_params; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4090 struct hci_conn_params *params; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4091 u32 supported_flags = SUPPORTED_DEVICE_FLAGS(); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4092 u32 current_flags = 0; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4093 u8 status = MGMT_STATUS_INVALID_PARAMS; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4094 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4095 bt_dev_dbg(hdev, "Get device flags %pMR (type 0x%x)\n", 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4096 &cp->addr.bdaddr, cp->addr.type); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4097 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4098 hci_dev_lock(hdev); 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4099 02ce2c2c24024a Tedd Ho-Jeong An 2021-05-26 4100 memset(&rp, 0, sizeof(rp)); 02ce2c2c24024a Tedd Ho-Jeong An 2021-05-26 4101 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4102 if (cp->addr.type == BDADDR_BREDR) { 3d4f9c00492b4e Archie Pusaka 2021-06-04 4103 br_params = hci_bdaddr_list_lookup_with_flags(&hdev->accept_list, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4104 &cp->addr.bdaddr, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4105 cp->addr.type); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4106 if (!br_params) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4107 goto done; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4108 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4109 current_flags = br_params->current_flags; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4110 } else { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4111 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4112 le_addr_type(cp->addr.type)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4113 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4114 if (!params) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4115 goto done; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4116 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4117 current_flags = params->current_flags; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4118 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4119 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4120 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4121 rp.addr.type = cp->addr.type; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4122 rp.supported_flags = cpu_to_le32(supported_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4123 rp.current_flags = cpu_to_le32(current_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4124 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4125 status = MGMT_STATUS_SUCCESS; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4126 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4127 done: 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4128 hci_dev_unlock(hdev); 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4129 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4130 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_DEVICE_FLAGS, status, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4131 &rp, sizeof(rp)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4132 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4133 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 @4134 static void device_flags_changed(struct sock *sk, struct hci_dev *hdev, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4135 bdaddr_t *bdaddr, u8 bdaddr_type, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4136 u32 supported_flags, u32 current_flags) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4137 { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4138 struct mgmt_ev_device_flags_changed ev; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4139 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4140 bacpy(&ev.addr.bdaddr, bdaddr); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4141 ev.addr.type = bdaddr_type; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4142 ev.supported_flags = cpu_to_le32(supported_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4143 ev.current_flags = cpu_to_le32(current_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4144 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4145 mgmt_event(MGMT_EV_DEVICE_FLAGS_CHANGED, hdev, &ev, sizeof(ev), sk); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4146 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4147 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 @4148 static int set_device_flags(struct sock *sk, struct hci_dev *hdev, void *data, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4149 u16 len) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4150 { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4151 struct mgmt_cp_set_device_flags *cp = data; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4152 struct bdaddr_list_with_flags *br_params; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4153 struct hci_conn_params *params; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4154 u8 status = MGMT_STATUS_INVALID_PARAMS; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4155 u32 supported_flags = SUPPORTED_DEVICE_FLAGS(); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4156 u32 current_flags = __le32_to_cpu(cp->current_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4157 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4158 bt_dev_dbg(hdev, "Set device flags %pMR (type 0x%x) = 0x%x", 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4159 &cp->addr.bdaddr, cp->addr.type, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4160 __le32_to_cpu(current_flags)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4161 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4162 if ((supported_flags | current_flags) != supported_flags) { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4163 bt_dev_warn(hdev, "Bad flag given (0x%x) vs supported (0x%0x)", 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4164 current_flags, supported_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4165 goto done; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4166 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4167 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4168 hci_dev_lock(hdev); 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4169 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4170 if (cp->addr.type == BDADDR_BREDR) { 3d4f9c00492b4e Archie Pusaka 2021-06-04 4171 br_params = hci_bdaddr_list_lookup_with_flags(&hdev->accept_list, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4172 &cp->addr.bdaddr, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4173 cp->addr.type); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4174 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4175 if (br_params) { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4176 br_params->current_flags = current_flags; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4177 status = MGMT_STATUS_SUCCESS; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4178 } else { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4179 bt_dev_warn(hdev, "No such BR/EDR device %pMR (0x%x)", 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4180 &cp->addr.bdaddr, cp->addr.type); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4181 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4182 } else { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4183 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4184 le_addr_type(cp->addr.type)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4185 if (params) { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4186 params->current_flags = current_flags; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4187 status = MGMT_STATUS_SUCCESS; 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4188 } else { 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4189 bt_dev_warn(hdev, "No such LE device %pMR (0x%x)", 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4190 &cp->addr.bdaddr, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4191 le_addr_type(cp->addr.type)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4192 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4193 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4194 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4195 done: 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4196 hci_dev_unlock(hdev); 3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4197 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4198 if (status == MGMT_STATUS_SUCCESS) 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4199 device_flags_changed(sk, hdev, &cp->addr.bdaddr, cp->addr.type, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4200 supported_flags, current_flags); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4201 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4202 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_FLAGS, status, 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4203 &cp->addr, sizeof(cp->addr)); 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4204 } 4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4205 b52729f27b1e39 Miao-chen Chou 2020-06-17 @4206 static void mgmt_adv_monitor_added(struct sock *sk, struct hci_dev *hdev, b52729f27b1e39 Miao-chen Chou 2020-06-17 4207 u16 handle) b52729f27b1e39 Miao-chen Chou 2020-06-17 4208 { b52729f27b1e39 Miao-chen Chou 2020-06-17 4209 struct mgmt_ev_adv_monitor_added ev; b52729f27b1e39 Miao-chen Chou 2020-06-17 4210 b52729f27b1e39 Miao-chen Chou 2020-06-17 4211 ev.monitor_handle = cpu_to_le16(handle); b52729f27b1e39 Miao-chen Chou 2020-06-17 4212 b52729f27b1e39 Miao-chen Chou 2020-06-17 4213 mgmt_event(MGMT_EV_ADV_MONITOR_ADDED, hdev, &ev, sizeof(ev), sk); b52729f27b1e39 Miao-chen Chou 2020-06-17 4214 } b52729f27b1e39 Miao-chen Chou 2020-06-17 4215 66bd095ab5d408 Archie Pusaka 2021-01-22 4216 void mgmt_adv_monitor_removed(struct hci_dev *hdev, u16 handle) cdde92e230719f Miao-chen Chou 2020-06-17 4217 { 66bd095ab5d408 Archie Pusaka 2021-01-22 4218 struct mgmt_ev_adv_monitor_removed ev; 66bd095ab5d408 Archie Pusaka 2021-01-22 4219 struct mgmt_pending_cmd *cmd; 66bd095ab5d408 Archie Pusaka 2021-01-22 4220 struct sock *sk_skip = NULL; 66bd095ab5d408 Archie Pusaka 2021-01-22 4221 struct mgmt_cp_remove_adv_monitor *cp; 66bd095ab5d408 Archie Pusaka 2021-01-22 4222 66bd095ab5d408 Archie Pusaka 2021-01-22 4223 cmd = pending_find(MGMT_OP_REMOVE_ADV_MONITOR, hdev); 66bd095ab5d408 Archie Pusaka 2021-01-22 4224 if (cmd) { 66bd095ab5d408 Archie Pusaka 2021-01-22 4225 cp = cmd->param; 66bd095ab5d408 Archie Pusaka 2021-01-22 4226 66bd095ab5d408 Archie Pusaka 2021-01-22 4227 if (cp->monitor_handle) 66bd095ab5d408 Archie Pusaka 2021-01-22 4228 sk_skip = cmd->sk; 66bd095ab5d408 Archie Pusaka 2021-01-22 4229 } cdde92e230719f Miao-chen Chou 2020-06-17 4230 cdde92e230719f Miao-chen Chou 2020-06-17 4231 ev.monitor_handle = cpu_to_le16(handle); cdde92e230719f Miao-chen Chou 2020-06-17 4232 66bd095ab5d408 Archie Pusaka 2021-01-22 4233 mgmt_event(MGMT_EV_ADV_MONITOR_REMOVED, hdev, &ev, sizeof(ev), sk_skip); cdde92e230719f Miao-chen Chou 2020-06-17 4234 } cdde92e230719f Miao-chen Chou 2020-06-17 4235 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 @4236 static int read_adv_mon_features(struct sock *sk, struct hci_dev *hdev, e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4237 void *data, u16 len) e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4238 { e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4239 struct adv_monitor *monitor = NULL; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4240 struct mgmt_rp_read_adv_monitor_features *rp = NULL; cafd472a10ff3b Peilin Ye 2020-09-09 4241 int handle, err; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4242 size_t rp_size = 0; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4243 __u32 supported = 0; a2a4dedf88ab2f Archie Pusaka 2021-01-22 4244 __u32 enabled = 0; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4245 __u16 num_handles = 0; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4246 __u16 handles[HCI_MAX_ADV_MONITOR_NUM_HANDLES]; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4247 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4248 BT_DBG("request for %s", hdev->name); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4249 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4250 hci_dev_lock(hdev); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4251 a2a4dedf88ab2f Archie Pusaka 2021-01-22 4252 if (msft_monitor_supported(hdev)) e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4253 supported |= MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4254 a2a4dedf88ab2f Archie Pusaka 2021-01-22 4255 idr_for_each_entry(&hdev->adv_monitors_idr, monitor, handle) e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4256 handles[num_handles++] = monitor->handle; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4257 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4258 hci_dev_unlock(hdev); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4259 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4260 rp_size = sizeof(*rp) + (num_handles * sizeof(u16)); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4261 rp = kmalloc(rp_size, GFP_KERNEL); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4262 if (!rp) e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4263 return -ENOMEM; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4264 a2a4dedf88ab2f Archie Pusaka 2021-01-22 4265 /* All supported features are currently enabled */ a2a4dedf88ab2f Archie Pusaka 2021-01-22 4266 enabled = supported; a2a4dedf88ab2f Archie Pusaka 2021-01-22 4267 e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4268 rp->supported_features = cpu_to_le32(supported); a2a4dedf88ab2f Archie Pusaka 2021-01-22 4269 rp->enabled_features = cpu_to_le32(enabled); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4270 rp->max_num_handles = cpu_to_le16(HCI_MAX_ADV_MONITOR_NUM_HANDLES); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4271 rp->max_num_patterns = HCI_MAX_ADV_MONITOR_NUM_PATTERNS; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4272 rp->num_handles = cpu_to_le16(num_handles); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4273 if (num_handles) e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4274 memcpy(&rp->handles, &handles, (num_handles * sizeof(u16))); e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4275 cafd472a10ff3b Peilin Ye 2020-09-09 4276 err = mgmt_cmd_complete(sk, hdev->id, e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4277 MGMT_OP_READ_ADV_MONITOR_FEATURES, e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4278 MGMT_STATUS_SUCCESS, rp, rp_size); cafd472a10ff3b Peilin Ye 2020-09-09 4279 cafd472a10ff3b Peilin Ye 2020-09-09 4280 kfree(rp); cafd472a10ff3b Peilin Ye 2020-09-09 4281 cafd472a10ff3b Peilin Ye 2020-09-09 4282 return err; e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4283 } e5e1e7fd470ccf Miao-chen Chou 2020-06-17 4284 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Joseph,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on bluetooth-next/master]
[also build test ERROR on next-20210813]
[cannot apply to bluetooth/master v5.14-rc5]
[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/Joseph-Hwang/Bluetooth-btusb-disable-Intel-link-statistics-telemetry-events/20210814-005423
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master
config: hexagon-randconfig-r041-20210814 (attached as .config)
compiler: clang version 12.0.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/7a3d3d918d33f8f8796cb27e1f137c56c2afaeac
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Joseph-Hwang/Bluetooth-btusb-disable-Intel-link-statistics-telemetry-events/20210814-005423
git checkout 7a3d3d918d33f8f8796cb27e1f137c56c2afaeac
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=hexagon SHELL=/bin/bash net/bluetooth/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> net/bluetooth/mgmt.c:4086:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4137:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4150:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4208:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4217:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4238:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4286:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4327:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4390:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4415:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4446:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4483:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4519:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4551:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4616:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4675:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4726:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4834:1: error: function definition is not allowed here
{
^
net/bluetooth/mgmt.c:4870:1: error: function definition is not allowed here
{
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
vim +4086 net/bluetooth/mgmt.c
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4083
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4084 static int get_device_flags(struct sock *sk, struct hci_dev *hdev, void *data,
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4085 u16 data_len)
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 @4086 {
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4087 struct mgmt_cp_get_device_flags *cp = data;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4088 struct mgmt_rp_get_device_flags rp;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4089 struct bdaddr_list_with_flags *br_params;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4090 struct hci_conn_params *params;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4091 u32 supported_flags = SUPPORTED_DEVICE_FLAGS();
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4092 u32 current_flags = 0;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4093 u8 status = MGMT_STATUS_INVALID_PARAMS;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4094
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4095 bt_dev_dbg(hdev, "Get device flags %pMR (type 0x%x)\n",
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4096 &cp->addr.bdaddr, cp->addr.type);
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4097
3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4098 hci_dev_lock(hdev);
3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4099
02ce2c2c24024a Tedd Ho-Jeong An 2021-05-26 4100 memset(&rp, 0, sizeof(rp));
02ce2c2c24024a Tedd Ho-Jeong An 2021-05-26 4101
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4102 if (cp->addr.type == BDADDR_BREDR) {
3d4f9c00492b4e Archie Pusaka 2021-06-04 4103 br_params = hci_bdaddr_list_lookup_with_flags(&hdev->accept_list,
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4104 &cp->addr.bdaddr,
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4105 cp->addr.type);
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4106 if (!br_params)
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4107 goto done;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4108
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4109 current_flags = br_params->current_flags;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4110 } else {
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4111 params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4112 le_addr_type(cp->addr.type));
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4113
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4114 if (!params)
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4115 goto done;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4116
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4117 current_flags = params->current_flags;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4118 }
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4119
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4120 bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4121 rp.addr.type = cp->addr.type;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4122 rp.supported_flags = cpu_to_le32(supported_flags);
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4123 rp.current_flags = cpu_to_le32(current_flags);
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4124
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4125 status = MGMT_STATUS_SUCCESS;
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4126
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4127 done:
3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4128 hci_dev_unlock(hdev);
3ca33e3fb4f919 Abhishek Pandit-Subedi 2020-06-19 4129
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4130 return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_DEVICE_FLAGS, status,
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4131 &rp, sizeof(rp));
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4132 }
4c54bf2b093bb2 Abhishek Pandit-Subedi 2020-06-17 4133
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 1e21e014efd2..ffd526b2beab 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -3806,7 +3806,7 @@ static const u8 rpa_resolution_uuid[16] = { static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev, void *data, u16 data_len) { - char buf[62]; /* Enough space for 3 features */ + char buf[62]; /* Enough space for 3 features */ struct mgmt_rp_read_exp_features_info *rp = (void *)buf; u16 idx = 0; u32 flags; @@ -3892,150 +3892,186 @@ static int exp_debug_feature_changed(bool enabled, struct sock *skip) } #endif -static int set_exp_feature(struct sock *sk, struct hci_dev *hdev, - void *data, u16 data_len) +#define EXP_FEAT(_uuid, _set_func) \ +{ \ + .uuid = _uuid, \ + .set_func = _set_func, \ +} + +/* The zero key uuid is special. Multiple exp features are set through it. */ +static int set_zero_key_func(struct sock *sk, struct hci_dev *hdev, + struct mgmt_cp_set_exp_feature *cp, u16 data_len) { - struct mgmt_cp_set_exp_feature *cp = data; struct mgmt_rp_set_exp_feature rp; - bt_dev_dbg(hdev, "sock %p", sk); - - if (!memcmp(cp->uuid, ZERO_KEY, 16)) { - memset(rp.uuid, 0, 16); - rp.flags = cpu_to_le32(0); + memset(rp.uuid, 0, 16); + rp.flags = cpu_to_le32(0); #ifdef CONFIG_BT_FEATURE_DEBUG - if (!hdev) { - bool changed = bt_dbg_get(); + if (!hdev) { + bool changed = bt_dbg_get(); - bt_dbg_set(false); + bt_dbg_set(false); - if (changed) - exp_debug_feature_changed(false, sk); - } + if (changed) + exp_debug_feature_changed(false, sk); + } #endif - if (hdev && use_ll_privacy(hdev) && !hdev_is_powered(hdev)) { - bool changed = hci_dev_test_flag(hdev, - HCI_ENABLE_LL_PRIVACY); + if (hdev && use_ll_privacy(hdev) && !hdev_is_powered(hdev)) { + bool changed = hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY); - hci_dev_clear_flag(hdev, HCI_ENABLE_LL_PRIVACY); + hci_dev_clear_flag(hdev, HCI_ENABLE_LL_PRIVACY); - if (changed) - exp_ll_privacy_feature_changed(false, hdev, sk); - } + if (changed) + exp_ll_privacy_feature_changed(false, hdev, sk); + } - hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); + hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); - return mgmt_cmd_complete(sk, hdev ? hdev->id : MGMT_INDEX_NONE, - MGMT_OP_SET_EXP_FEATURE, 0, - &rp, sizeof(rp)); - } + return mgmt_cmd_complete(sk, hdev ? hdev->id : MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, 0, + &rp, sizeof(rp)); +} #ifdef CONFIG_BT_FEATURE_DEBUG - if (!memcmp(cp->uuid, debug_uuid, 16)) { - bool val, changed; - int err; +static int set_debug_func(struct sock *sk, struct hci_dev *hdev, + struct mgmt_cp_set_exp_feature *cp, u16 data_len) +{ + struct mgmt_rp_set_exp_feature rp; - /* Command requires to use the non-controller index */ - if (hdev) - return mgmt_cmd_status(sk, hdev->id, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_INDEX); + bool val, changed; + int err; - /* Parameters are limited to a single octet */ - if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) - return mgmt_cmd_status(sk, MGMT_INDEX_NONE, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_PARAMS); + /* Command requires to use the non-controller index */ + if (hdev) + return mgmt_cmd_status(sk, hdev->id, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_INDEX); - /* Only boolean on/off is supported */ - if (cp->param[0] != 0x00 && cp->param[0] != 0x01) - return mgmt_cmd_status(sk, MGMT_INDEX_NONE, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_PARAMS); + /* Parameters are limited to a single octet */ + if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) + return mgmt_cmd_status(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); - val = !!cp->param[0]; - changed = val ? !bt_dbg_get() : bt_dbg_get(); - bt_dbg_set(val); + /* Only boolean on/off is supported */ + if (cp->param[0] != 0x00 && cp->param[0] != 0x01) + return mgmt_cmd_status(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); - memcpy(rp.uuid, debug_uuid, 16); - rp.flags = cpu_to_le32(val ? BIT(0) : 0); + val = !!cp->param[0]; + changed = val ? !bt_dbg_get() : bt_dbg_get(); + bt_dbg_set(val); - hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); + memcpy(rp.uuid, debug_uuid, 16); + rp.flags = cpu_to_le32(val ? BIT(0) : 0); - err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, - MGMT_OP_SET_EXP_FEATURE, 0, - &rp, sizeof(rp)); + hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); - if (changed) - exp_debug_feature_changed(val, sk); + err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, 0, + &rp, sizeof(rp)); - return err; - } + if (changed) + exp_debug_feature_changed(val, sk); + + return err; +} #endif - if (!memcmp(cp->uuid, rpa_resolution_uuid, 16)) { - bool val, changed; - int err; - u32 flags; +static int set_rpa_resolution_func(struct sock *sk, struct hci_dev *hdev, + struct mgmt_cp_set_exp_feature *cp, + u16 data_len) +{ + struct mgmt_rp_set_exp_feature rp; + bool val, changed; + int err; + u32 flags; + + /* Command requires to use the controller index */ + if (!hdev) + return mgmt_cmd_status(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_INDEX); - /* Command requires to use the controller index */ - if (!hdev) - return mgmt_cmd_status(sk, MGMT_INDEX_NONE, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_INDEX); + /* Changes can only be made when controller is powered down */ + if (hdev_is_powered(hdev)) + return mgmt_cmd_status(sk, hdev->id, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_REJECTED); - /* Changes can only be made when controller is powered down */ - if (hdev_is_powered(hdev)) - return mgmt_cmd_status(sk, hdev->id, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_REJECTED); + /* Parameters are limited to a single octet */ + if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) + return mgmt_cmd_status(sk, hdev->id, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); - /* Parameters are limited to a single octet */ - if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) - return mgmt_cmd_status(sk, hdev->id, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_PARAMS); + /* Only boolean on/off is supported */ + if (cp->param[0] != 0x00 && cp->param[0] != 0x01) + return mgmt_cmd_status(sk, hdev->id, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); - /* Only boolean on/off is supported */ - if (cp->param[0] != 0x00 && cp->param[0] != 0x01) - return mgmt_cmd_status(sk, hdev->id, - MGMT_OP_SET_EXP_FEATURE, - MGMT_STATUS_INVALID_PARAMS); + val = !!cp->param[0]; - val = !!cp->param[0]; + if (val) { + changed = !hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY); + hci_dev_set_flag(hdev, HCI_ENABLE_LL_PRIVACY); + hci_dev_clear_flag(hdev, HCI_ADVERTISING); - if (val) { - changed = !hci_dev_test_flag(hdev, - HCI_ENABLE_LL_PRIVACY); - hci_dev_set_flag(hdev, HCI_ENABLE_LL_PRIVACY); - hci_dev_clear_flag(hdev, HCI_ADVERTISING); + /* Enable LL privacy + supported settings changed */ + flags = BIT(0) | BIT(1); + } else { + changed = hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY); + hci_dev_clear_flag(hdev, HCI_ENABLE_LL_PRIVACY); - /* Enable LL privacy + supported settings changed */ - flags = BIT(0) | BIT(1); - } else { - changed = hci_dev_test_flag(hdev, - HCI_ENABLE_LL_PRIVACY); - hci_dev_clear_flag(hdev, HCI_ENABLE_LL_PRIVACY); + /* Disable LL privacy + supported settings changed */ + flags = BIT(1); + } - /* Disable LL privacy + supported settings changed */ - flags = BIT(1); - } + memcpy(rp.uuid, rpa_resolution_uuid, 16); + rp.flags = cpu_to_le32(flags); - memcpy(rp.uuid, rpa_resolution_uuid, 16); - rp.flags = cpu_to_le32(flags); + hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); - hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); + err = mgmt_cmd_complete(sk, hdev->id, + MGMT_OP_SET_EXP_FEATURE, 0, + &rp, sizeof(rp)); - err = mgmt_cmd_complete(sk, hdev->id, - MGMT_OP_SET_EXP_FEATURE, 0, - &rp, sizeof(rp)); + if (changed) + exp_ll_privacy_feature_changed(val, hdev, sk); - if (changed) - exp_ll_privacy_feature_changed(val, hdev, sk); + return err; +} - return err; +static const struct mgmt_exp_feature { + const u8 *uuid; + int (*set_func)(struct sock *sk, struct hci_dev *hdev, + struct mgmt_cp_set_exp_feature *cp, u16 data_len); +} exp_features[] = { + EXP_FEAT(ZERO_KEY, set_zero_key_func), +#ifdef CONFIG_BT_FEATURE_DEBUG + EXP_FEAT(debug_uuid, set_debug_func), +#endif + EXP_FEAT(rpa_resolution_uuid, set_rpa_resolution_func), + + /* end with a null feature */ + EXP_FEAT(NULL, NULL) +}; + +static int set_exp_feature(struct sock *sk, struct hci_dev *hdev, + void *data, u16 data_len) +{ + struct mgmt_cp_set_exp_feature *cp = data; + size_t i = 0; + + bt_dev_dbg(hdev, "sock %p", sk); + + for (i = 0; exp_features[i].uuid; i++) { + if (!memcmp(cp->uuid, exp_features[i].uuid, 16)) { + return exp_features[i].set_func(sk, hdev, cp, data_len); } return mgmt_cmd_status(sk, hdev ? hdev->id : MGMT_INDEX_NONE,
This patch refactors the set_exp_feature with a feature table consisting of UUIDs and the corresponding callback functions. In this way, a new experimental feature setting function can be simply added with its UUID and callback function. Signed-off-by: Joseph Hwang <josephsih@chromium.org> --- Changes in v8: - Refactor the set_exp_feature function with a feature table. - This is a new patch added in v8. net/bluetooth/mgmt.c | 248 +++++++++++++++++++++++++------------------ 1 file changed, 142 insertions(+), 106 deletions(-)