Message ID | 1458207668-12012-21-git-send-email-zhaoshenglong@huawei.com |
---|---|
State | Superseded |
Headers | show |
Hi Shannon, On 17/03/16 09:41, Shannon Zhao wrote: > From: Shannon Zhao <shannon.zhao@linaro.org> > > Store the event-channel interrupt number and flag in HVM parameter > HVM_PARAM_CALLBACK_IRQ. Then Dom0 could get it through hypercall > HVMOP_get_param. > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> > Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > --- > xen/arch/arm/domain_build.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index a4abf28..dcbcc4c 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -2008,6 +2008,7 @@ static void initrd_load(struct kernel_info *kinfo) > static void evtchn_fixup(struct domain *d, struct kernel_info *kinfo) > { > int res, node; > + u64 val; > gic_interrupt_t intr; > > /* > @@ -2023,6 +2024,15 @@ static void evtchn_fixup(struct domain *d, struct kernel_info *kinfo) > printk("Allocating PPI %u for event channel interrupt\n", > d->arch.evtchn_irq); > > + /* Set the value of domain param HVM_PARAM_CALLBACK_IRQ */ > + val = (u64)HVM_PARAM_CALLBACK_TYPE_PPI << 56; > + val |= (2 << 8); /* Active-low level-sensitive */ > + val |= d->arch.evtchn_irq & 0xff; > + d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ] = val; > + > + if ( !acpi_disabled ) > + return; Please add a comment to explain that you can only get the event channel interrupt via hypercall when ACPI is used. > + > /* Fix up "interrupts" in /hypervisor node */ > node = fdt_path_offset(kinfo->fdt, "/hypervisor"); > if ( node < 0 ) > Regards,
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index a4abf28..dcbcc4c 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -2008,6 +2008,7 @@ static void initrd_load(struct kernel_info *kinfo) static void evtchn_fixup(struct domain *d, struct kernel_info *kinfo) { int res, node; + u64 val; gic_interrupt_t intr; /* @@ -2023,6 +2024,15 @@ static void evtchn_fixup(struct domain *d, struct kernel_info *kinfo) printk("Allocating PPI %u for event channel interrupt\n", d->arch.evtchn_irq); + /* Set the value of domain param HVM_PARAM_CALLBACK_IRQ */ + val = (u64)HVM_PARAM_CALLBACK_TYPE_PPI << 56; + val |= (2 << 8); /* Active-low level-sensitive */ + val |= d->arch.evtchn_irq & 0xff; + d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ] = val; + + if ( !acpi_disabled ) + return; + /* Fix up "interrupts" in /hypervisor node */ node = fdt_path_offset(kinfo->fdt, "/hypervisor"); if ( node < 0 )