Hi, I love your patch! Perhaps something to improve: [auto build test WARNING on usb/usb-testing] [also build test WARNING on balbi-usb/next peter.chen-usb/ci-for-usb-next linus/master linux/master v5.6-rc7 next-20200327] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/vladimir-stankovic-displaylink-com/Add-MA-USB-Host-driver/20200328-042436 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: c6x-allyesconfig (attached as .config) compiler: c6x-elf-gcc (GCC) 9.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=9.2.0 make.cross ARCH=c6x If you fix the issue, kindly add following tag Reported-by: kbuild test robot All warnings (new ones prefixed by >>): drivers/usb/mausb_host/hpal.c: In function 'mausb_release_event_resources': >> drivers/usb/mausb_host/hpal.c:221:45: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 221 | struct ma_usb_hdr_common *receive_buffer = (struct ma_usb_hdr_common *) | ^ drivers/usb/mausb_host/hpal.c: In function 'mausb_complete_urb': drivers/usb/mausb_host/hpal.c:229:20: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 229 | struct urb *urb = (struct urb *)event->data.urb; | ^ drivers/usb/mausb_host/hpal.c: In function 'mausb_data_req_enqueue_event': >> drivers/usb/mausb_host/hpal.c:357:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 357 | mausb_event.data.urb = (u64)request; | ^ drivers/usb/mausb_host/hpal.c: In function 'mausb_execute_urb_dequeue': drivers/usb/mausb_host/hpal.c:492:32: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 492 | mausb_event.data.urb = (u64)urb; | ^ drivers/usb/mausb_host/hpal.c: In function 'mausb_send_data_msg': drivers/usb/mausb_host/hpal.c:725:35: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 725 | urb_ctx = mausb_find_urb_in_tree((struct urb *)event->data.urb); | ^ drivers/usb/mausb_host/hpal.c: In function 'mausb_receive_data_msg': drivers/usb/mausb_host/hpal.c:752:35: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 752 | urb_ctx = mausb_find_urb_in_tree((struct urb *)event->data.urb); | ^ /tmp/ccABqgDp.s: Assembler messages: /tmp/ccABqgDp.s:3838: Warning: ignoring changed section attributes for .far vim +221 drivers/usb/mausb_host/hpal.c 218 219 void mausb_release_event_resources(struct mausb_event *event) 220 { > 221 struct ma_usb_hdr_common *receive_buffer = (struct ma_usb_hdr_common *) 222 event->data.recv_buf; 223 224 kfree(receive_buffer); 225 } 226 227 void mausb_complete_urb(struct mausb_event *event) 228 { 229 struct urb *urb = (struct urb *)event->data.urb; 230 231 mausb_pr_debug("transfer_size=%d, rem_transfer_size=%d, status=%d", 232 event->data.transfer_size, 233 event->data.rem_transfer_size, event->status); 234 mausb_complete_request(urb, 235 event->data.transfer_size - 236 event->data.rem_transfer_size, 237 event->status); 238 } 239 240 static int mausb_get_first_free_port_number(u16 *port_number) 241 { 242 (*port_number) = 0; 243 while ((mhcd->connected_ports & (1 << *port_number)) != 0 && 244 *port_number < NUMBER_OF_PORTS) 245 ++(*port_number); 246 247 if (*port_number == NUMBER_OF_PORTS) 248 return -EINVAL; 249 250 mhcd->connected_ports |= (1 << *port_number); 251 252 return 0; 253 } 254 255 static inline void mausb_port_has_changed_event(struct mausb_device *dev, 256 struct mausb_event *event) 257 { 258 int status; 259 u16 port_number; 260 unsigned long flags = 0; 261 262 spin_lock_irqsave(&mhcd->lock, flags); 263 264 status = mausb_get_first_free_port_number(&port_number); 265 if (status < 0) { 266 spin_unlock_irqrestore(&mhcd->lock, flags); 267 mausb_pr_err("There is no free port, schedule delete ma_dev"); 268 queue_work(dev->workq, &dev->socket_disconnect_work); 269 return; 270 } 271 272 spin_unlock_irqrestore(&mhcd->lock, flags); 273 274 dev->dev_type = event->port_changed.dev_type; 275 dev->dev_speed = event->port_changed.dev_speed; 276 dev->lse = event->port_changed.lse; 277 dev->dev_connected = 1; 278 dev->port_number = port_number; 279 280 mausb_port_has_changed(event->port_changed.dev_type, 281 event->port_changed.dev_speed, dev); 282 283 if ((enum mausb_device_type)event->port_changed.dev_type == USB30HUB) 284 mausb_port_has_changed(USB20HUB, HIGH_SPEED, dev); 285 } 286 287 static void mausb_heartbeat_timer_func(struct timer_list *timer) 288 { 289 unsigned long flags = 0; 290 struct mausb_device *dev = NULL; 291 292 if (mausb_start_heartbeat_timer() < 0) { 293 mausb_pr_err("Devices disconnecting - app is unresponsive"); 294 spin_lock_irqsave(&mss.lock, flags); 295 296 /* Reset connected clients */ 297 mss.client_connected = false; 298 mss.missed_heartbeats = 0; 299 300 list_for_each_entry(dev, &mss.madev_list, list_entry) { 301 mausb_pr_debug("Enqueue heartbeat_work madev_addr=%x", 302 dev->madev_addr); 303 queue_work(dev->workq, &dev->heartbeat_work); 304 } 305 306 complete(&mss.client_stopped); 307 spin_unlock_irqrestore(&mss.lock, flags); 308 } 309 } 310 311 void mausb_release_ma_dev_async(struct kref *kref) 312 { 313 struct mausb_device *dev = container_of(kref, struct mausb_device, 314 refcount); 315 316 mausb_pr_info("Scheduling work for MAUSB device to be deleted"); 317 318 schedule_work(&dev->madev_delete_work); 319 } 320 321 int mausb_enqueue_event_from_user(u8 madev_addr, u16 num_of_events, 322 u16 num_of_completed) 323 { 324 unsigned long flags; 325 struct mausb_device *dev; 326 327 spin_lock_irqsave(&mss.lock, flags); 328 dev = mausb_get_dev_from_addr_unsafe(madev_addr); 329 330 if (!dev) { 331 spin_unlock_irqrestore(&mss.lock, flags); 332 return -EINVAL; 333 } 334 335 spin_lock(&dev->num_of_user_events_lock); 336 dev->num_of_user_events += num_of_events; 337 dev->num_of_completed_events += num_of_completed; 338 spin_unlock(&dev->num_of_user_events_lock); 339 queue_work(dev->workq, &dev->work); 340 spin_unlock_irqrestore(&mss.lock, flags); 341 342 return 0; 343 } 344 345 int mausb_data_req_enqueue_event(struct mausb_device *dev, u16 ep_handle, 346 struct urb *request) 347 { 348 struct mausb_event mausb_event; 349 350 mausb_event.type = MAUSB_EVENT_TYPE_SEND_DATA_MSG; 351 mausb_event.status = 0; 352 353 mausb_event.data.transfer_type = 354 mausb_transfer_type_from_usb(&request->ep->desc); 355 mausb_event.data.device_id = dev->id; 356 mausb_event.data.ep_handle = ep_handle; > 357 mausb_event.data.urb = (u64)request; 358 mausb_event.data.setup_packet = 359 (usb_endpoint_xfer_control(&request->ep->desc) && 360 request->setup_packet); 361 mausb_event.data.transfer_size = request->transfer_buffer_length; 362 mausb_event.data.direction = (usb_urb_dir_in(request) ? 363 MAUSB_DATA_MSG_DIRECTION_IN : 364 MAUSB_DATA_MSG_DIRECTION_OUT); 365 mausb_event.data.transfer_size += 366 ((mausb_event.data.direction == MAUSB_DATA_MSG_DIRECTION_OUT && 367 mausb_event.data.setup_packet) ? 368 MAUSB_CONTROL_SETUP_SIZE : 0); 369 mausb_event.data.rem_transfer_size = mausb_event.data.transfer_size; 370 mausb_event.data.transfer_flags = request->transfer_flags; 371 mausb_event.data.transfer_eot = false; 372 mausb_event.data.isoch_seg_num = (u32)request->number_of_packets; 373 mausb_event.data.recv_buf = 0; 374 mausb_event.data.payload_size = 375 (usb_endpoint_xfer_isoc(&request->ep->desc) && 376 usb_endpoint_dir_out(&request->ep->desc)) ? 377 (request->iso_frame_desc[request->number_of_packets - 1] 378 .offset + 379 request->iso_frame_desc[request->number_of_packets - 1] 380 .length) : 0; 381 382 if (mausb_event.data.setup_packet) { 383 memcpy(mausb_event.data.hdr_ack, request->setup_packet, 384 MAUSB_CONTROL_SETUP_SIZE); 385 memcpy(shift_ptr(mausb_event.data.hdr_ack, 386 MAUSB_CONTROL_SETUP_SIZE), 387 &request->dev->route, sizeof(request->dev->route)); 388 } 389 390 return 0; 391 } 392 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org