[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56ADD580.1070505@rock-chips.com>
Date: Sun, 31 Jan 2016 17:36:00 +0800
From: Kever Yang <kever.yang@...k-chips.com>
To: Douglas Anderson <dianders@...omium.org>,
John Youn <John.Youn@...opsys.com>, balbi@...com
CC: huangtao@...k-chips.com, stefan.wahren@...e.com, heiko@...ech.de,
johnyoun@...opsys.com, gregkh@...uxfoundation.org,
ming.lei@...onical.com, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-rockchip@...ts.infradead.org,
yousaf.kaukab@...el.com, stern@...land.harvard.edu,
linux-rpi-kernel@...ts.infradead.org, gregory.herrero@...el.com,
william.wu@...k-chips.com, Julius Werner <jwerner@...omium.org>,
dinguyen@...nsource.altera.com
Subject: Re: [PATCH v6 18/22] usb: dwc2: host: Schedule periodic right away
if it's time
Doug,
On 01/29/2016 10:20 AM, Douglas Anderson wrote:
> In dwc2_hcd_qh_deactivate() we will put some things on the
> periodic_sched_ready list. These things won't be taken off the ready
> list until the next SOF, which might be a little late. Let's put them
> on right away.
>
> Signed-off-by: Douglas Anderson <dianders@...omium.org>
> Tested-by: Heiko Stuebner <heiko@...ech.de>
> Tested-by: Stefan Wahren <stefan.wahren@...e.com>
> ---
> Changes in v6:
> - Add Heiko's Tested-by.
> - Add Stefan's Tested-by.
>
> Changes in v5: None
> Changes in v4:
> - Schedule periodic right away if it's time new for v4.
>
> Changes in v3: None
> Changes in v2: None
>
> drivers/usb/dwc2/hcd_queue.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c
> index 9b3c435339ee..3abb34a5fc5b 100644
> --- a/drivers/usb/dwc2/hcd_queue.c
> +++ b/drivers/usb/dwc2/hcd_queue.c
> @@ -1080,12 +1080,26 @@ void dwc2_hcd_qh_deactivate(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
> * Note: we purposely use the frame_number from the "hsotg" structure
> * since we know SOF interrupt will handle future frames.
> */
> - if (dwc2_frame_num_le(qh->next_active_frame, hsotg->frame_number))
> + if (dwc2_frame_num_le(qh->next_active_frame, hsotg->frame_number)) {
> + enum dwc2_transaction_type tr_type;
> +
> + /*
> + * We're bypassing the SOF handler which is normally what puts
> + * us on the ready list because we're in a hurry and need to
> + * try to catch up.
> + */
> + dwc2_sch_vdbg(hsotg, "QH=%p IMM ready fn=%04x, nxt=%04x\n",
> + qh, frame_number, qh->next_active_frame);
> list_move_tail(&qh->qh_list_entry,
> &hsotg->periodic_sched_ready);
> - else
> +
> + tr_type = dwc2_hcd_select_transactions(hsotg);
Do we need to add select_transactions call here? If we get into this
function in interrupt
and once we put the qh in ready queue, the qh can be handled in this
frame again by the
later function call of dwc_hcd_select_transactions, so what we need to
to here is put
it in ready list instead of inactive queue, and wait for the schedule.
Thanks,
- Kever
> + if (tr_type != DWC2_TRANSACTION_NONE)
> + dwc2_hcd_queue_transactions(hsotg, tr_type);
> + } else {
> list_move_tail(&qh->qh_list_entry,
> &hsotg->periodic_sched_inactive);
> + }
> }
>
> /**
Powered by blists - more mailing lists