|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN PATCH v14 2/5] x86/pvh: Allow (un)map_pirq when dom0 is PVH
When dom0 is PVH type and passthrough a device to HVM domU, Qemu code
xen_pt_realize->xc_physdev_map_pirq and libxl code pci_add_dm_done->
xc_physdev_map_pirq map a pirq for passthrough devices.
In xc_physdev_map_pirq call stack, function hvm_physdev_op has a check
has_pirq(currd), but currd is PVH dom0, PVH has no X86_EMU_USE_PIRQ flag,
so it fails, PHYSDEVOP_map_pirq is not allowed for PVH dom0 in current
codes.
But it is fine to map interrupts through pirq to a HVM domain whose
XENFEAT_hvm_pirqs is not enabled. Because pirq field is used as a way to
reference interrupts and it is just the way for the device model to
identify which interrupt should be mapped to which domain, however
has_pirq() is just to check if HVM domains route interrupts from
devices(emulated or passthrough) through event channel, so, the has_pirq()
check should not be applied to the PHYSDEVOP_map_pirq issued by dom0.
So, allow PHYSDEVOP_map_pirq when dom0 is PVH and also allow
PHYSDEVOP_unmap_pirq for the removal device path to unmap pirq. Then the
interrupt of a passthrough device can be successfully mapped to pirq for domU.
Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
Signed-off-by: Huang Rui <ray.huang@xxxxxxx>
Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx>
---
v13->v14 changes:
Modified the commit message.
v12->v13 changes:
Removed the PHYSDEVOP_(un)map_pirq restriction check for pvh domU and added a
corresponding description in the commit message.
v11->v12 changes:
Avoid using return, set error code instead when (un)map is not allowed.
v10->v11 changes:
Delete the judgment of "d==currd", so that we can prevent physdev_(un)map_pirq
from being executed when domU has no pirq, instead of just preventing
self-mapping.
And modify the description of the commit message accordingly.
v9->v10 changes:
Indent the comments above PHYSDEVOP_map_pirq according to the code style.
v8->v9 changes:
Add a comment above PHYSDEVOP_map_pirq to describe why need this hypercall.
Change "!is_pv_domain(d)" to "is_hvm_domain(d)", and "map.domid == DOMID_SELF"
to "d == current->domian".
v7->v8 changes:
Add the domid check(domid == DOMID_SELF) to prevent self map when guest doesn't
use pirq.
That check was missed in the previous version.
v6->v7 changes:
Nothing.
v5->v6 changes:
Nothing.
v4->v5 changes:
Move the check of self map_pirq to physdev.c, and change to check if the caller
has PIRQ flag, and just break for PHYSDEVOP_(un)map_pirq in hvm_physdev_op.
v3->v4 changes:
add check to prevent PVH self map.
v2->v3 changes:
Du to changes in the implementation of the second patch on kernel side(that it
will do setup_gsi and map_pirq when assigning a device to passthrough), add
PHYSDEVOP_setup_gsi for PVH dom0, and we need to support self mapping.
---
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 f023f7879e24..81883c8d4f60 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:
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |