The IP.com Prior Art Database
English (United States)
2 pages / 23.1 KB
Method of limiting maximum SMI latency using NMI
Methods used currently rely on cooperation from the actions performed by the SMI handler, where each action is responsible for limiting the time spent in the SMI handler. If the action needs to poll for something for a long time, next SMI is scheduled after some time and current SMI exits, to let the operating system code run. However, this method doesn't ensure the maximum SMI latency required for the real time applications or prevent operating system time drift.
A better method (as shown in the figure) is to use a Non Maskable Interrupt (NMI) inside the System Management Interrupt (SMI) handler to limit the time spent in the SMI handler. SMI handler creates its own interrupt table before arming a single-shot timer to cause an NMI after some time, but before the maximum SMI latency limit. Upon NMI from the timer, SMI handler saves its current state, schedules the next SMI after some timer and exits the current SMI. Upon the next SMI, after arming the single-shot NMI timer, the SMI handler restores the previous state and resumes, if left behind by the previous SMI. If SMI handler has finished its job, timer NMI is cancelled before exiting the SMI.
NMI is chosen instead of other operating system interrupts, to prevent collision with other hardware generated interrupt sources, because they NMI can be unmasked, while leaving all other operating system interrupts masked. NMI handler in the SMI co...