[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] x86/hvm: allow {,un}map_pirq hypercalls unconditionally



commit 035baa203b978b219828d0d3c16057beb344f35c
Author:     Jiqian Chen <Jiqian.Chen@xxxxxxx>
AuthorDate: Wed Sep 11 12:58:24 2024 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Wed Sep 11 12:58:24 2024 +0200

    x86/hvm: allow {,un}map_pirq hypercalls unconditionally
    
    The current hypercall interfaces to manage and assign interrupts to
    domains is mostly based in using pIRQs as handlers.  Such pIRQ values
    are abstract domain-specific references to interrupts.
    
    Classic HVM domains can have access to {,un}map_pirq hypercalls if the
    domain is allowed to route physical interrupts over event channels.
    That's however a different interface, limited to only mapping
    interrupts to itself. PVH domains on the other hand never had access
    to the interface, as PVH domains are not allowed to route interrupts
    over event channels.
    
    In order to allow setting up PCI passthrough from a PVH domain it
    needs access to the {,un}map_pirq hypercalls so interrupts can be
    assigned a pIRQ handler that can then be used by further hypercalls to
    bind the interrupt to a domain.
    
    Note that the {,un}map_pirq hypercalls end up calling helpers that are
    already used against a PVH domain in order to setup interrupts for the
    hardware domain when running in PVH mode.  physdev_map_pirq() will
    call allocate_and_map_{gsi,msi}_pirq() which is already used by the
    vIO-APIC or the vPCI code respectively.  So the exposed code paths are
    not new when targeting a PVH domain, but rather previous callers are
    not hypercall but emulation based.
    
    Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
    Signed-off-by: Huang Rui <ray.huang@xxxxxxx>
    Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 xen/arch/x86/hvm/hypercall.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c
index f023f7879e..81883c8d4f 100644
--- a/xen/arch/x86/hvm/hypercall.c
+++ b/xen/arch/x86/hvm/hypercall.c
@@ -73,6 +73,8 @@ long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
     {
     case PHYSDEVOP_map_pirq:
     case PHYSDEVOP_unmap_pirq:
+        break;
+
     case PHYSDEVOP_eoi:
     case PHYSDEVOP_irq_status_query:
     case PHYSDEVOP_get_free_pirq:
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.