Message ID | 099a4bd5ed02f4c48f4640347379b5127075e453.1658192351.git.Thinh.Nguyen@synopsys.com |
---|---|
State | New |
Headers | show |
Series | usb: gadget: f_tcm: Enhance UASP driver | expand |
On 2022-07-18 18:27:51 [-0700], Thinh Nguyen wrote: > diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c > --- a/drivers/usb/gadget/function/f_tcm.c > +++ b/drivers/usb/gadget/function/f_tcm.c > @@ -1278,6 +1278,22 @@ static void usbg_queue_tm_rsp(struct se_cmd *se_cmd) > > static void usbg_aborted_task(struct se_cmd *se_cmd) > { > + struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd, se_cmd); > + struct f_uas *fu = cmd->fu; > + struct uas_stream *stream = cmd->stream; > + int ret = 0; > + > + if (stream->req_out->status == -EINPROGRESS) > + ret = usb_ep_dequeue(fu->ep_out, stream->req_out); > + else if (stream->req_in->status == -EINPROGRESS) > + ret = usb_ep_dequeue(fu->ep_in, stream->req_in); > + else if (stream->req_status->status == -EINPROGRESS) > + ret = usb_ep_dequeue(fu->ep_status, stream->req_status); > + > + if (ret) > + pr_err("Unable to dequeue se_cmd out %p\n", se_cmd); I know I wasn't the best example here. But if you continue to work on that one, if would be nice if you could replace all the pr_err() here with a dev_err() (or so) so it is bound to an actual device and the reader can actually pin point the message to the actually device/ subsystem. I'm not sure if we lack a device or I was extremely lazy. Again, not something you need change now. > + cmd->state = UASP_QUEUE_COMMAND; > } > > static const char *usbg_check_wwn(const char *name) Sebastian
On Fri, Aug 26, 2022, Sebastian Andrzej Siewior wrote: > On 2022-07-18 18:27:51 [-0700], Thinh Nguyen wrote: > > diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c > > --- a/drivers/usb/gadget/function/f_tcm.c > > +++ b/drivers/usb/gadget/function/f_tcm.c > > @@ -1278,6 +1278,22 @@ static void usbg_queue_tm_rsp(struct se_cmd *se_cmd) > > > > static void usbg_aborted_task(struct se_cmd *se_cmd) > > { > > + struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd, se_cmd); > > + struct f_uas *fu = cmd->fu; > > + struct uas_stream *stream = cmd->stream; > > + int ret = 0; > > + > > + if (stream->req_out->status == -EINPROGRESS) > > + ret = usb_ep_dequeue(fu->ep_out, stream->req_out); > > + else if (stream->req_in->status == -EINPROGRESS) > > + ret = usb_ep_dequeue(fu->ep_in, stream->req_in); > > + else if (stream->req_status->status == -EINPROGRESS) > > + ret = usb_ep_dequeue(fu->ep_status, stream->req_status); > > + > > + if (ret) > > + pr_err("Unable to dequeue se_cmd out %p\n", se_cmd); > > I know I wasn't the best example here. But if you continue to work on > that one, if would be nice if you could replace all the pr_err() here > with a dev_err() (or so) so it is bound to an actual device and the > reader can actually pin point the message to the actually device/ > subsystem. I'm not sure if we lack a device or I was extremely lazy. > Again, not something you need change now. Yes. I noticed that too. However, I think that can be done later as it doesn't seem critical. I tried to keep the code consistent for now. Thanks, Thinh > > > + cmd->state = UASP_QUEUE_COMMAND; > > } > > > > static const char *usbg_check_wwn(const char *name) > > Sebastian
diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c index d7318c84af98..8f7eb7045e64 100644 --- a/drivers/usb/gadget/function/f_tcm.c +++ b/drivers/usb/gadget/function/f_tcm.c @@ -1278,6 +1278,22 @@ static void usbg_queue_tm_rsp(struct se_cmd *se_cmd) static void usbg_aborted_task(struct se_cmd *se_cmd) { + struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd, se_cmd); + struct f_uas *fu = cmd->fu; + struct uas_stream *stream = cmd->stream; + int ret = 0; + + if (stream->req_out->status == -EINPROGRESS) + ret = usb_ep_dequeue(fu->ep_out, stream->req_out); + else if (stream->req_in->status == -EINPROGRESS) + ret = usb_ep_dequeue(fu->ep_in, stream->req_in); + else if (stream->req_status->status == -EINPROGRESS) + ret = usb_ep_dequeue(fu->ep_status, stream->req_status); + + if (ret) + pr_err("Unable to dequeue se_cmd out %p\n", se_cmd); + + cmd->state = UASP_QUEUE_COMMAND; } static const char *usbg_check_wwn(const char *name)
Implemented aborted_task to cancel outstanding request. Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> --- Changes in v2: - None drivers/usb/gadget/function/f_tcm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)