[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