From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v3 3/7] x86: dynamically attach/detach CQM service for a guest Date: Fri, 29 Nov 2013 14:22:56 +0000 Message-ID: <5298A340.9050704@citrix.com> References: <1385704092-89546-1-git-send-email-dongxiao.xu@intel.com> <1385704092-89546-4-git-send-email-dongxiao.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1385704092-89546-4-git-send-email-dongxiao.xu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: dongxiao.xu@intel.com Cc: keir@xen.org, Ian.Campbell@citrix.com, stefano.stabellini@eu.citrix.com, Ian.Jackson@eu.citrix.com, xen-devel@lists.xen.org, JBeulich@suse.com, dgdegra@tycho.nsa.gov List-Id: xen-devel@lists.xenproject.org On 29/11/13 05:48, dongxiao.xu@intel.com wrote: > From: Dongxiao Xu > > Add hypervisor side support for dynamically attach and detach CQM > services for a certain guest. > > Signed-off-by: Jiongxi Li > Signed-off-by: Dongxiao Xu > --- > 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 > #include > #include > +#include > > 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 > +}; > +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; > };