[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC XEN PATCH v8 5/5] domctl: Add XEN_DOMCTL_gsi_permission to grant gsi
On 16.05.2024 11:52, Jiqian Chen wrote: > Some type of domain don't have PIRQ, like PVH, when > passthrough a device to guest on PVH dom0, callstack > pci_add_dm_done->XEN_DOMCTL_irq_permission will failed > at domain_pirq_to_irq. > > So, add a new hypercall to grant/revoke gsi permission > when dom0 is not PV or dom0 has not PIRQ flag. Honestly I find this hard to follow, and thus not really making clear why no other existing mechanism could be used. > Signed-off-by: Huang Rui <ray.huang@xxxxxxx> > Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx> > --- Below here in an RFC patch you typically would want to put specific items you're seeking feedback on. Without that it's hard to tell why this is marked RFC. > --- a/xen/arch/x86/domctl.c > +++ b/xen/arch/x86/domctl.c > @@ -237,6 +237,37 @@ long arch_do_domctl( > break; > } > > + case XEN_DOMCTL_gsi_permission: > + { > + unsigned int gsi = domctl->u.gsi_permission.gsi; > + int allow = domctl->u.gsi_permission.allow_access; bool? > + if ( is_pv_domain(current->domain) || has_pirq(current->domain) ) > + { > + ret = -EOPNOTSUPP; > + break; > + } Such a restriction imo wants explaining in a comment. > + if ( gsi >= nr_irqs_gsi ) > + { > + ret = -EINVAL; > + break; > + } > + > + if ( !irq_access_permitted(current->domain, gsi) || I.e. assuming IRQ == GSI? Is that a valid assumption when any number of source overrides may be surfaced by ACPI? > + xsm_irq_permission(XSM_HOOK, d, gsi, allow) ) Here I'm pretty sure you can't very well re-use an existing hook, as the value of interest is in a different numbering space, and a possible hook function has no way of knowing which one it is. Daniel? > + { > + ret = -EPERM; > + break; > + } > + > + if ( allow ) > + ret = irq_permit_access(d, gsi); > + else > + ret = irq_deny_access(d, gsi); As above I'm afraid you can't assume IRQ == GSI. > --- a/xen/include/public/domctl.h > +++ b/xen/include/public/domctl.h > @@ -447,6 +447,13 @@ struct xen_domctl_irq_permission { > }; > > > +/* XEN_DOMCTL_gsi_permission */ > +struct xen_domctl_gsi_permission { > + uint32_t gsi; > + uint8_t allow_access; /* flag to specify enable/disable of x86 gsi > access */ > +}; Explicit padding please, including a check that it's zero on input. > + > + > /* XEN_DOMCTL_iomem_permission */ No double blank lines please. In fact you will want to break the double blank lines in leading context, inserting in the middle. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |