Skip to content

Commit

Permalink
usb: renesas_usbhs: don't re-allocation pipe buffer
Browse files Browse the repository at this point in the history
Because pipe buffer allocation is very picky and difficult,
current renesas_usbhs driver is not caring pipe re-allocation.

In this situation, driver will create new pipe without caring old pipe
if "usbhsg_ep_enable" is called after "usbhsg_ep_disable" on current driver.
This mean the limited pipe and buffer will be used as waste.
But it is possible to re-use same buffer to same pipe.

By this patch, driver will initialize pipe when it detected new connection or
new gadget, and doesn't try re-allocation for same pipe in above case.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Kuninori Morimoto authored and Greg Kroah-Hartman committed Apr 30, 2011
1 parent 45e13e6 commit 409ba9e
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions drivers/usb/renesas_usbhs/mod_gadget.c
Original file line number Diff line number Diff line change
Expand Up @@ -787,12 +787,18 @@ static int usbhsg_pipe_disable(struct usbhsg_uep *uep)
usbhsg_queue_pop(uep, ureq, -ECONNRESET);
}

uep->pipe->mod_private = NULL;
uep->pipe = NULL;

return 0;
}

static void usbhsg_uep_init(struct usbhsg_gpriv *gpriv)
{
int i;
struct usbhsg_uep *uep;

usbhsg_for_each_uep_with_dcp(uep, gpriv, i)
uep->pipe = NULL;
}

/*
*
* usb_ep_ops
Expand All @@ -809,6 +815,13 @@ static int usbhsg_ep_enable(struct usb_ep *ep,
unsigned long flags;
int ret = -EIO;

/*
* if it already have pipe,
* nothing to do
*/
if (uep->pipe)
return 0;

/******************** spin lock ********************/
spin_lock_irqsave(lock, flags);

Expand Down Expand Up @@ -1045,6 +1058,7 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
* pipe initialize and enable DCP
*/
usbhs_pipe_init(priv);
usbhsg_uep_init(gpriv);
usbhsg_dcp_enable(dcp);

/*
Expand Down

0 comments on commit 409ba9e

Please sign in to comment.