On 9/9/26 04:38, Marek Vasut wrote:
> On 8/18/26 10:52 AM, Patrice CHOTARD wrote:
> 
> Hello Patrice,
> 
>>>> Yes, It's possible to optimize schedule() call.
>>>> Since commit 4b6a3e860878 ("usb: gadget: f_mass_storage: Add schedule() in 
>>>> sleep_thread()")
>>>> schedule is called on every for() loop iteration.
>>>>
>>>> Schedule() can be called only if needed, ie if 
>>>> g_dnl_board_usb_cable_connected() is not overloaded.
>>>> I well send a patch for this.
>>> My question is, whether it is possible for the schedule() call to determine 
>>> whether or not it has to do (a lot of, lengthy, expensive) work or not, 
>>> instead of patching the USB stack.
>>
>> To remind you, initially, it was to avoid a watchdog timeout in case 
>> g_dnl_board_usb_cable_connected()
>> is not overloaded and no USB cable plugged.
>>
>> As now watchdog is managed by schedule(), we have no choice to call 
>> schedule() to ensure watchdog's reset.
>> even if schedule performs other cyclic things (led blinking, card detect, 
>> video_sync....).
>>
>> Recently schedule() has already been optimized (more precisely 
>> cyclic_run()), currently i didn't see any
>> better optimization.
> 
> The schedule() call should be effectively a no-op in case the next event is 
> not yet due (whatever that next event is), so what does take so long in 
> schedule() that it takes so long (70ms) to complete ?
> 


Hi Marek

schedule() execution doesn't takes 70ms.
Moving schedule() from main loop to same level that ctrlc(), it allows to call 
ctrlc() every ~70ms.

Patrice

Reply via email to