lkl: relax cpu during __ndelay() #619
Merged
+1
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
__ndelay() spins until the timeout occurs. If interrupts come concurrently from another host thread, an irq_status bit will be set, but the handler will not be called during the spin. This behavior is unreasonable. At least, it differs from that of real Linux running on a bare-mental machine.
A driver may expect the device to raise an IRQ within a few microseconds, so it tries to spin and wait for it. This does not work without the commit.
Calling cpu_relax() explicitly can cause the handlers to fire. This is also a valid use of cpu_relax() because the CPU is spinning.
linux/arch/lkl/include/asm/processor.h
Lines 6 to 15 in 9c51103