Merge "usb: gadget: f_hid: use free_ep_req()"
This commit is contained in:
commit
8e1e1a68b5
6 changed files with 13 additions and 23 deletions
|
@ -377,7 +377,7 @@ static int f_hidg_open(struct inode *inode, struct file *fd)
|
|||
static inline struct usb_request *hidg_alloc_ep_req(struct usb_ep *ep,
|
||||
unsigned length)
|
||||
{
|
||||
return alloc_ep_req(ep, length, length);
|
||||
return alloc_ep_req(ep, length);
|
||||
}
|
||||
|
||||
static void hidg_set_report_complete(struct usb_ep *ep, struct usb_request *req)
|
||||
|
@ -693,11 +693,8 @@ fail_free_descs:
|
|||
usb_free_all_descriptors(f);
|
||||
fail:
|
||||
ERROR(f->config->cdev, "hidg_bind FAILED\n");
|
||||
if (hidg->req != NULL) {
|
||||
kfree(hidg->req->buf);
|
||||
if (hidg->in_ep != NULL)
|
||||
usb_ep_free_request(hidg->in_ep, hidg->req);
|
||||
}
|
||||
if (hidg->req != NULL)
|
||||
free_ep_req(hidg->in_ep, hidg->req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -936,8 +933,7 @@ static void hidg_unbind(struct usb_configuration *c, struct usb_function *f)
|
|||
|
||||
/* disable/free request and end point */
|
||||
usb_ep_disable(hidg->in_ep);
|
||||
kfree(hidg->req->buf);
|
||||
usb_ep_free_request(hidg->in_ep, hidg->req);
|
||||
free_ep_req(hidg->in_ep, hidg->req);
|
||||
|
||||
usb_free_all_descriptors(f);
|
||||
}
|
||||
|
|
|
@ -308,9 +308,7 @@ static void disable_loopback(struct f_loopback *loop)
|
|||
|
||||
static inline struct usb_request *lb_alloc_ep_req(struct usb_ep *ep, int len)
|
||||
{
|
||||
struct f_loopback *loop = ep->driver_data;
|
||||
|
||||
return alloc_ep_req(ep, len, loop->buflen);
|
||||
return alloc_ep_req(ep, len);
|
||||
}
|
||||
|
||||
static int alloc_requests(struct usb_composite_dev *cdev,
|
||||
|
@ -333,7 +331,7 @@ static int alloc_requests(struct usb_composite_dev *cdev,
|
|||
if (!in_req)
|
||||
goto fail;
|
||||
|
||||
out_req = lb_alloc_ep_req(loop->out_ep, 0);
|
||||
out_req = lb_alloc_ep_req(loop->out_ep, loop->buflen);
|
||||
if (!out_req)
|
||||
goto fail_in;
|
||||
|
||||
|
|
|
@ -207,7 +207,7 @@ static struct usb_gadget_strings *midi_strings[] = {
|
|||
static inline struct usb_request *midi_alloc_ep_req(struct usb_ep *ep,
|
||||
unsigned length)
|
||||
{
|
||||
return alloc_ep_req(ep, length, length);
|
||||
return alloc_ep_req(ep, length);
|
||||
}
|
||||
|
||||
static const uint8_t f_midi_cin_length[] = {
|
||||
|
|
|
@ -298,9 +298,7 @@ static struct usb_gadget_strings *sourcesink_strings[] = {
|
|||
|
||||
static inline struct usb_request *ss_alloc_ep_req(struct usb_ep *ep, int len)
|
||||
{
|
||||
struct f_sourcesink *ss = ep->driver_data;
|
||||
|
||||
return alloc_ep_req(ep, len, ss->buflen);
|
||||
return alloc_ep_req(ep, len);
|
||||
}
|
||||
|
||||
static void disable_ep(struct usb_composite_dev *cdev, struct usb_ep *ep)
|
||||
|
@ -611,7 +609,7 @@ static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in,
|
|||
req = ss_alloc_ep_req(ep, size);
|
||||
} else {
|
||||
ep = is_in ? ss->in_ep : ss->out_ep;
|
||||
req = ss_alloc_ep_req(ep, 0);
|
||||
req = ss_alloc_ep_req(ep, ss->buflen);
|
||||
}
|
||||
|
||||
if (!req)
|
||||
|
|
|
@ -14,15 +14,14 @@
|
|||
#include "u_f.h"
|
||||
#include <linux/usb/ch9.h>
|
||||
|
||||
struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len)
|
||||
struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len)
|
||||
{
|
||||
struct usb_request *req;
|
||||
|
||||
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->length = usb_endpoint_dir_out(ep->desc) ?
|
||||
usb_ep_align(ep, len) : len;
|
||||
req->buf = kmalloc(req->length, GFP_ATOMIC);
|
||||
if (!req->buf) {
|
||||
usb_ep_free_request(ep, req);
|
||||
|
|
|
@ -53,14 +53,13 @@ struct usb_request;
|
|||
*
|
||||
* @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);
|
||||
struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t 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)
|
||||
|
|
Loading…
Add table
Reference in a new issue