Re: [PATCH v3 2/2] usb/gadget: Add driver for Aspeed SoC virtual hub

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Benjamin,

I love your patch! Perhaps something to improve:

[auto build test WARNING on balbi-usb/next]
[also build test WARNING on v4.15-rc9 next-20180119]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Benjamin-Herrenschmidt/usb-gadget-Add-an-EP-dispose-callback-for-EP-lifetime-tracking/20180124-065635
base:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/usb/gadget/udc/aspeed-vhub/epn.c:270:23: sparse: restricted __le32 degrades to integer
--
>> drivers/usb/gadget/udc/aspeed-vhub/dev.c:269:9: sparse: context imbalance in 'ast_vhub_udc_wakeup' - different lock contexts for basic block

vim +270 drivers/usb/gadget/udc/aspeed-vhub/epn.c

   236	
   237	static void ast_vhub_epn_handle_ack_desc(struct ast_vhub_ep *ep)
   238	{
   239		struct ast_vhub_req *req;
   240		unsigned int len, d_last;
   241		u32 stat, stat1;
   242	
   243		/* Read EP status, workaround HW race */
   244		do {
   245			stat = readl(ep->epn.regs + AST_VHUB_EP_DESC_STATUS);
   246			stat1 = readl(ep->epn.regs + AST_VHUB_EP_DESC_STATUS);
   247		} while(stat != stat1);
   248	
   249		/* Extract RPTR */
   250		d_last = VHUB_EP_DMA_RPTR(stat);
   251	
   252		/* Grab current request if any */
   253		req = list_first_entry_or_null(&ep->queue, struct ast_vhub_req, queue);
   254	
   255		EPVDBG(ep, "ACK status=%08x is_in=%d ep->d_last=%d..%d\n",
   256		       stat, ep->epn.is_in, ep->epn.d_last, d_last);
   257	
   258		/* Check all completed descriptors */
   259		while (ep->epn.d_last != d_last) {
   260			struct ast_vhub_desc *desc;
   261			unsigned int d_num;
   262			bool is_last_desc;
   263	
   264			/* Grab next completed descriptor */
   265			d_num = ep->epn.d_last;
   266			desc = &ep->epn.descs[d_num];
   267			ep->epn.d_last = (d_num + 1) & (AST_VHUB_DESCS_COUNT - 1);
   268	
   269			/* Grab len out of descriptor */
 > 270			len = VHUB_DSC1_IN_LEN(desc->w1);
   271	
   272			EPVDBG(ep, " desc %d len=%d req=%p (act=%d)\n",
   273			       d_num, len, req, req ? req->active : 0);
   274	
   275			/* If no active request pending, move on */
   276			if (!req || !req->active)
   277				continue;
   278	
   279			/* Adjust size */
   280			req->req.actual += len;
   281	
   282			/* Is that the last chunk ? */
   283			is_last_desc = req->last_desc == d_num;
   284			CHECK(ep, is_last_desc == (len < ep->ep.maxpacket ||
   285						   (req->req.actual >= req->req.length &&
   286						    !req->req.zero)),
   287			      "Last packet discrepancy: last_desc=%d len=%d r.act=%d "
   288			      "r.len=%d r.zero=%d mp=%d\n",
   289			      is_last_desc, len, req->req.actual, req->req.length,
   290			      req->req.zero, ep->ep.maxpacket);
   291	
   292			if (is_last_desc) {
   293				/*
   294				 * Because we can only have one request at a time
   295				 * in our descriptor list in this implementation,
   296				 * d_last and ep->d_last should now be equal
   297				 */
   298				CHECK(ep, d_last == ep->epn.d_last,
   299				      "DMA read ptr mismatch %d vs %d\n",
   300				      d_last, ep->epn.d_last);
   301	
   302				/* Note: done will drop and re-acquire the lock */
   303				ast_vhub_done(ep, req, 0);
   304				req = list_first_entry_or_null(&ep->queue,
   305							       struct ast_vhub_req,
   306							       queue);
   307				break;
   308			}
   309		}
   310	
   311		/* More work ? */
   312		if (req)
   313			ast_vhub_epn_kick_desc(ep, req);
   314	}
   315	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux