A method that allows the context of an SMI task to be saved between SMIs.
Upon entering an SMI handler for a task that needs to be split up into
shorter SMIs, a new task context stack is created in memory. From that
point forward, the SMI handler uses the task context, leaving the
original stack unchanged. When the time limit for a single SMI is about
to be reached, the CPU is directed back to the original stack, and the
task context stack persists in memory and retains the context of the task
in hand. The soft SMI exits with a return code or other indication to
signify that a new SMI should be invoked to continue processing. The
driver or other software that caused the first soft SMI then invokes
another, passing in a code or other indication to signify that this is a
continuation of a previously started task. On entering the SMI handler
for the second time, the handler notes the request for continuation,
switches back to the saved task context stack and continues processing
where it left off.