Adjust_Exec_Priority

include vmm.inc

mov eax, PriorityBoost ; signed integer specifying priority boost

mov ebx, VM ; VM handle

VMMcall Adjust_Exec_Priority


The Adjust_Exec_Priority service raises or lowers the execution priority of the specified virtual machine. The service adds the specified boost to the virtual machine's current execution priority.

Parameters

PriorityBoost

Specifies a positive or negative priority boost for the virtual machine. This parameter must be a value such that when added to the current execution priority, the result is within the range Reserved_Low_Boost to Reserved_High_Boost.

The following lists some common priority boost values:

Value Meaning

Critical_Section_Boost The system uses this value for virtual machines specified in a call to the Begin_Critical_Section service.
Cur_Run_VM_Boost The time-slice scheduler uses this value to force a virtual machine to run for its allotted time slice.
High_Pri_Device_Boost Virtual devices use this value for events that need timely processing but should not circumvent operations that have a critical section boost.
Low_Pri_Device_Boost Virtual devices use this value for events that need timely processing but are not time critical.
Reserved_High_Boost Reserved for use by system.
Reserved_Low_Boost Reserved for use by system.
Time_Critical_Boost Virtual devices use this value for events that must be processed even when another virtual machine is in a critical section. For example, VPICD uses this when simulating hardware interrupts.

VM

Specifies the handle identifying the virtual machine.

Return Value

This service has no return value.

Comments

Since the nonsuspended virtual machine with the highest execution priority is
always the current virtual machine, this service causes a task switch under two
circumstances:

1.The execution priority of the current virtual machine is lowered (EAX is negative), and there is another virtual machine with a higher priority that is not suspended.

2.The execution of a nonsuspended virtual machine which is not the current virtual machine is raised (EAX is positive) higher than the current virtual machine's execution priority.

Even if the current virtual machine is in a critical section, a task switch will still occur if the priority of another nonsuspended virtual machine is raised higher than the current virtual machine's priority. However, this will only occur when a virtual machine is given a time-critical boost, for example, to simulate a hardware interrupt.

It is often more convenient to call the Call_Priority_VM_Event service than to call this service directly.

Uses

Flags

See Also

Begin_Critical_Section, Call_Priority_VM_Event