lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sat, 28 Mar 2020 11:56:30 +0800
From:   kbuild test robot <lkp@...el.com>
To:     vladimir.stankovic@...playlink.com
Cc:     kbuild-all@...ts.01.org, gregkh@...uxfoundation.org,
        linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org,
        mausb-host-devel@...playlink.com
Subject: Re: [PATCH v4 5/8] usb: mausb_host: Introduce PAL processing

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 <lkp@...el.com>

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

Download attachment ".config.gz" of type "application/gzip" (51707 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ