[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 3/7] x86: dynamically attach/detach CQM service for a guest
On 29/11/13 05:48, dongxiao.xu@xxxxxxxxx wrote: > From: Dongxiao Xu <dongxiao.xu@xxxxxxxxx> > > Add hypervisor side support for dynamically attach and detach CQM > services for a certain guest. > > Signed-off-by: Jiongxi Li <jiongxi.li@xxxxxxxxx> > Signed-off-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx> > --- > xen/arch/x86/domctl.c | 40 ++++++++++++++++++++++++++++++++++++++++ > xen/include/public/domctl.h | 14 ++++++++++++++ > 2 files changed, 54 insertions(+) > > diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c > index f7e4586..7007990 100644 > --- a/xen/arch/x86/domctl.c > +++ b/xen/arch/x86/domctl.c > @@ -35,6 +35,7 @@ > #include <asm/mem_sharing.h> > #include <asm/xstate.h> > #include <asm/debugger.h> > +#include <asm/pqos.h> > > static int gdbsx_guest_mem_io( > domid_t domid, struct xen_domctl_gdbsx_memio *iop) > @@ -1223,6 +1224,45 @@ long arch_do_domctl( > } > break; > > + case XEN_DOMCTL_attach_pqos: > + { > + if ( domctl->u.qos_type.flags & XEN_DOMCTL_pqos_cqm ) > + { > + if ( !system_supports_cqm() ) > + ret = -ENODEV; > + else if ( d->arch.pqos_cqm_rmid > 0 ) > + ret = -EEXIST; > + else > + { > + ret = alloc_cqm_rmid(d); > + if ( ret < 0 ) > + ret = -EUSERS; > + } > + } > + else > + ret = -EINVAL; > + } > + break; > + > + case XEN_DOMCTL_detach_pqos: > + { > + if ( domctl->u.qos_type.flags & XEN_DOMCTL_pqos_cqm ) > + { > + if ( !system_supports_cqm() ) > + ret = -ENODEV; > + else if ( d->arch.pqos_cqm_rmid > 0 ) > + { > + free_cqm_rmid(d); > + ret = 0; > + } > + else > + ret = -ENOENT; > + } > + else > + ret = -EINVAL; > + } > + break; > + > default: > ret = iommu_do_domctl(domctl, d, u_domctl); > break; > diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h > index 47a850a..800b2f4 100644 > --- a/xen/include/public/domctl.h > +++ b/xen/include/public/domctl.h > @@ -872,6 +872,17 @@ struct xen_domctl_set_max_evtchn { > typedef struct xen_domctl_set_max_evtchn xen_domctl_set_max_evtchn_t; > DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_max_evtchn_t); > > +/* XEN_DOMCTL_attach_pqos */ > +/* XEN_DOMCTL_detach_pqos */ > +struct xen_domctl_qos_type { > + /* Attach or detach flag for cqm */ > +#define _XEN_DOMCTL_pqos_cqm 0 > +#define XEN_DOMCTL_pqos_cqm (1U<<_XEN_DOMCTL_pqos_cqm) > + uint32_t flags; How many different QoS do you think might come to be? Might it be worth making this a uint64_t before the ABI is set? Either way, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > +}; > +typedef struct xen_domctl_qos_type xen_domctl_qos_type_t; > +DEFINE_XEN_GUEST_HANDLE(xen_domctl_qos_type_t); > + > struct xen_domctl { > uint32_t cmd; > #define XEN_DOMCTL_createdomain 1 > @@ -941,6 +952,8 @@ struct xen_domctl { > #define XEN_DOMCTL_setnodeaffinity 68 > #define XEN_DOMCTL_getnodeaffinity 69 > #define XEN_DOMCTL_set_max_evtchn 70 > +#define XEN_DOMCTL_attach_pqos 71 > +#define XEN_DOMCTL_detach_pqos 72 > #define XEN_DOMCTL_gdbsx_guestmemio 1000 > #define XEN_DOMCTL_gdbsx_pausevcpu 1001 > #define XEN_DOMCTL_gdbsx_unpausevcpu 1002 > @@ -1001,6 +1014,7 @@ struct xen_domctl { > struct xen_domctl_set_broken_page_p2m set_broken_page_p2m; > struct xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu; > struct xen_domctl_gdbsx_domstatus gdbsx_domstatus; > + struct xen_domctl_qos_type qos_type; > uint8_t pad[128]; > } u; > }; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |