mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-06-06 09:06:30 +00:00
hv: define posted interrupt IRQs/vectors
This is a preparation patch for adding support for VT-d PI related vCPU scheduling. ACRN does not support vCPU migration, one vCPU always runs on the same pCPU, so PI's ndst is never changed after startup. VCPUs of a VM won’t share same pCPU. So the maximum possible number of VCPUs that can run on a pCPU is CONFIG_MAX_VM_NUM. Allocate unique Activation Notification Vectors (ANV) for each vCPU that belongs to the same pCPU, the ANVs need only be unique within each pCPU, not across all vCPUs. This reduces # of pre-allocated ANVs for posted interrupts to CONFIG_MAX_VM_NUM, and enables ACRN to avoid switching between active and wake-up vector values in the posted interrupt descriptor on vCPU scheduling state changes. A total of CONFIG_MAX_VM_NUM consecutive IRQs/vectors are reserved for posted interrupts use. The code first initializes vcpu->arch.pid.control.bits.nv dynamically (will be added in subsequent patch), the other code shall use vcpu->arch.pid.control.bits.nv instead of the hard-coded notification vectors. Rename some functions: apicv_post_intr --> apicv_trigger_pi_anv posted_intr_notification --> handle_pi_notification setup_posted_intr_notification --> setup_pi_notification Tracked-On: #4506 Signed-off-by: dongshen <dongsheng.x.zhang@intel.com> Reviewed-by: Eddie Dong <eddie.dong@Intel.com>
This commit is contained in:
@@ -98,21 +98,20 @@ void setup_notification(void)
|
||||
notification_irq, irq_to_vector(notification_irq));
|
||||
}
|
||||
|
||||
static void posted_intr_notification(__unused uint32_t irq, __unused void *data)
|
||||
static void handle_pi_notification(__unused uint32_t irq, __unused void *data)
|
||||
{
|
||||
/* Dummy IRQ handler for case that Posted-Interrupt Notification
|
||||
* is sent to vCPU in root mode(isn't running),interrupt will be
|
||||
* picked up in next vmentry,do nothine here.
|
||||
*/
|
||||
}
|
||||
|
||||
/*pre-conditon: be called only by BSP initialization proccess*/
|
||||
void setup_posted_intr_notification(void)
|
||||
void setup_pi_notification(void)
|
||||
{
|
||||
if (request_irq(POSTED_INTR_IRQ,
|
||||
posted_intr_notification,
|
||||
NULL, IRQF_NONE) < 0) {
|
||||
pr_err("Failed to setup posted-intr notification");
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0U; i < CONFIG_MAX_VM_NUM; i++) {
|
||||
if (request_irq(POSTED_INTR_IRQ + i, handle_pi_notification, NULL, IRQF_NONE) < 0) {
|
||||
pr_err("Failed to setup pi notification");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user