On 13/07/17 06:50, Heinrich Schuchardt wrote:
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.

By analyzing CPU registers it is not possible to find out if the
external hardware is set up to trigger interrupts.

It allows the platform firmware (such as U-Boot) to deliberately signal to other programs (such as UEFI iPXE) that interrupts are unexpectedly disabled. You would have to ensure that U-Boot actually does this.

Disabling interrupts via "cli" will not prevent CPU exceptions such as page faults on x86. The Intel SDM states:

  "Clearing the IF flag causes the processor to ignore maskable
   external interrupts.  The IF flag and the CLI and STI instruction
   have no affect on the generation of exceptions and NMI interrupts."

I assume that the equivalent is true on ARM, but you should check the documentation to be sure.

What is wrong about deciding at compile time if we enable cpu_nap()?

The "#ifdef MY_PET_FEATURE" anti-pattern has been banned to the maximum extent possible from new iPXE code since around 2005 (before the name change from Etherboot to gPXE, let alone iPXE). See

  http://dox.ipxe.org/ifdef_harmful.html

for a rationale.

Michael
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to