[ipxe-devel] [PATCH 1/1] efi: provide possibility to disable cpu_nap

Michael Brown mcb30 at ipxe.org
Wed Jul 12 23:35:36 UTC 2017


On 12/07/17 19:50, Heinrich Schuchardt wrote:
> On 07/12/2017 08:35 PM, Michael Brown wrote:
>> On 12/07/17 19:15, Heinrich Schuchardt wrote:
>>> Nope. Interrupts are not supported by U-Boot. To get them running every
>>> architecture implementation would have to be changed.
>>>
>>> U-Boot simply uses a call inside the waiting loop to check if new data
>>> is available.
>>>
>>> E.g. in UEFI WaitForEvent it will check if new data becomes available on
>>> the serial console or on the network interface inside a loop. In
>>> CheckEvent it will do the same. If data becomes available it will fire
>>> the UEFI event.
>>
>> OK.  What facility does U-Boot provide to allow the CPU to sleep (i.e.
>> to allow an idling program to avoid running with 100% CPU usage)?
> 
> None. U-Boot loads grub or the OS kernel within a few seconds. So why
> bother about reducing CPU load of the only core that is running?
> 
> E.g. on the Davinci boards the waiting routine udelay is implemented using
> 
> while (get_ticks() < endtime)
>    ;

iPXE similarly doesn't bother about reducing CPU load while downloading 
the OS since it will generally be finished in under a second, but we do 
sleep the CPU when we have nothing to do for long periods of time (e.g. 
when waiting for user input, or in the middle of an explicit "sleep" 
command).

You could add code in efiarm_nap.c and/or efix86_nap.c to detect whether 
or not it is safe to sleep the CPU.  The attached (completely untested) 
patch demonstrates this idea: modify the cpu_nap() implementation in 
efix86_nap.c to execute "hlt" only if the platform firmware has enabled 
interrupts.

Michael
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ipxe-cpu-nap.patch
Type: text/x-patch
Size: 1454 bytes
Desc: not available
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20170713/a0cd5ac1/attachment.bin>


More information about the ipxe-devel mailing list