Re: [PATCH v3 2/9] usb: gadget: align buffer size when allocating for OUT endpoint
Hi, On 05-08-2016 20:15, kbuild test robot wrote: > Hi Felipe, > > [auto build test ERROR on balbi-usb/next] > [also build test ERROR on v4.7 next-20160805] > [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/Felipe-F-Tonello/Gadget-endpoint-request-allocation-and-MIDI/20160806-024520 > base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next > config: x86_64-randconfig-x013-201631 (attached as .config) > compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 > reproduce: > # save the attached .config to linux build tree > make ARCH=x86_64 > > Note: the > linux-review/Felipe-F-Tonello/Gadget-endpoint-request-allocation-and-MIDI/20160806-024520 > HEAD 5064a41cd5f89103e3b75c1a2ab9f6e98851503b builds fine. > It only hurts bisectibility. > > All errors (new ones prefixed by >>): > >>> drivers/usb/gadget/u_f.c:17:21: error: conflicting types for 'alloc_ep_req' > struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int > default_len) > ^~~~ >In file included from drivers/usb/gadget/u_f.c:14:0: >drivers/usb/gadget/u_f.h:63:21: note: previous declaration of > 'alloc_ep_req' was here > struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int > default_len); Ok, I made the mistake to change to size_t the len type just on the function declaration. I'll fix this on a v4. > ^~~~ > > vim +/alloc_ep_req +17 drivers/usb/gadget/u_f.c > > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 11 * published by the Free > Software Foundation. > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 12 */ > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 13 > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 14 #include "u_f.h" > a7ffc68f Felipe F. Tonello 2016-08-05 15 #include > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 16 > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 @17 struct usb_request > *alloc_ep_req(struct usb_ep *ep, int len, int default_len) > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 18 { > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 19 struct usb_request > *req; > 1efd54ea Andrzej Pietrasiewicz 2013-11-07 20 > > :: The code at line 17 was first introduced by commit > :: 1efd54eab2b60c68c2ce75ea635306cef847d751 usb: gadget: factor out > alloc_ep_req > > :: TO: Andrzej Pietrasiewicz > :: CC: Felipe Balbi > > --- > 0-DAY kernel test infrastructureOpen Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation > Felipe 0x92698E6A.asc Description: application/pgp-keys
Re: [PATCH v3 2/9] usb: gadget: align buffer size when allocating for OUT endpoint
Hi Felipe, [auto build test ERROR on balbi-usb/next] [also build test ERROR on v4.7 next-20160805] [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/Felipe-F-Tonello/Gadget-endpoint-request-allocation-and-MIDI/20160806-024520 base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next config: x86_64-randconfig-x013-201631 (attached as .config) compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 Note: the linux-review/Felipe-F-Tonello/Gadget-endpoint-request-allocation-and-MIDI/20160806-024520 HEAD 5064a41cd5f89103e3b75c1a2ab9f6e98851503b builds fine. It only hurts bisectibility. All errors (new ones prefixed by >>): >> drivers/usb/gadget/u_f.c:17:21: error: conflicting types for 'alloc_ep_req' struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len) ^~~~ In file included from drivers/usb/gadget/u_f.c:14:0: drivers/usb/gadget/u_f.h:63:21: note: previous declaration of 'alloc_ep_req' was here struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len); ^~~~ vim +/alloc_ep_req +17 drivers/usb/gadget/u_f.c 1efd54ea Andrzej Pietrasiewicz 2013-11-07 11 * published by the Free Software Foundation. 1efd54ea Andrzej Pietrasiewicz 2013-11-07 12 */ 1efd54ea Andrzej Pietrasiewicz 2013-11-07 13 1efd54ea Andrzej Pietrasiewicz 2013-11-07 14 #include "u_f.h" a7ffc68f Felipe F. Tonello 2016-08-05 15 #include 1efd54ea Andrzej Pietrasiewicz 2013-11-07 16 1efd54ea Andrzej Pietrasiewicz 2013-11-07 @17 struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len) 1efd54ea Andrzej Pietrasiewicz 2013-11-07 18 { 1efd54ea Andrzej Pietrasiewicz 2013-11-07 19 struct usb_request *req; 1efd54ea Andrzej Pietrasiewicz 2013-11-07 20 :: The code at line 17 was first introduced by commit :: 1efd54eab2b60c68c2ce75ea635306cef847d751 usb: gadget: factor out alloc_ep_req :: TO: Andrzej Pietrasiewicz :: CC: Felipe Balbi --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
[PATCH v3 2/9] usb: gadget: align buffer size when allocating for OUT endpoint
Using usb_ep_align() makes sure that the buffer size for OUT endpoints is always aligned with wMaxPacketSize (512 usually). This makes sure that no buffer has the wrong size, which can cause nasty bugs. Signed-off-by: Felipe F. Tonello --- drivers/usb/gadget/u_f.c | 3 +++ drivers/usb/gadget/u_f.h | 18 -- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/u_f.c b/drivers/usb/gadget/u_f.c index 4bc7eea8bfc8..d1933b0b76c3 100644 --- a/drivers/usb/gadget/u_f.c +++ b/drivers/usb/gadget/u_f.c @@ -12,6 +12,7 @@ */ #include "u_f.h" +#include struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len) { @@ -20,6 +21,8 @@ struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len) req = usb_ep_alloc_request(ep, GFP_ATOMIC); if (req) { req->length = len ?: default_len; + if (usb_endpoint_dir_out(ep->desc)) + req->length = usb_ep_align(ep, req->length); req->buf = kmalloc(req->length, GFP_ATOMIC); if (!req->buf) { usb_ep_free_request(ep, req); diff --git a/drivers/usb/gadget/u_f.h b/drivers/usb/gadget/u_f.h index 4247cc098a89..69a1d10df04f 100644 --- a/drivers/usb/gadget/u_f.h +++ b/drivers/usb/gadget/u_f.h @@ -47,8 +47,22 @@ struct usb_ep; struct usb_request; -/* Requests allocated via alloc_ep_req() must be freed by free_ep_req(). */ -struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len); +/** + * alloc_ep_req - returns a usb_request allocated by the gadget driver and + * allocates the request's buffer. + * + * @ep: the endpoint to allocate a usb_request + * @len: usb_requests's buffer suggested size + * @default_len: used if @len is not provided, ie, is 0 + * + * In case @ep direction is OUT, the @len will be aligned to ep's + * wMaxPacketSize. In order to avoid memory leaks or drops, *always* use + * usb_requests's length (req->length) to refer to the allocated buffer size. + * Requests allocated via alloc_ep_req() *must* be freed by free_ep_req(). + */ +struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len); + +/* Frees a usb_request previously allocated by alloc_ep_req() */ static inline void free_ep_req(struct usb_ep *ep, struct usb_request *req) { kfree(req->buf); -- 2.9.0