Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > Make the Xen domain scheduler parameter methods directly > call into XenD or Xen hypervisor drivers > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > src/xen/xen_driver.c | 54 +++++++++++++++++++++--------------------------- > src/xen/xen_driver.h | 15 -------------- > src/xen/xen_hypervisor.c | 25 ---------------------- > src/xen/xen_hypervisor.h | 1 - > src/xen/xend_internal.c | 12 +++-------- > src/xen/xend_internal.h | 12 +++++++---- > 6 files changed, 35 insertions(+), 84 deletions(-) > > diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c > index 2262713..ac61677 100644 > --- a/src/xen/xen_driver.c > +++ b/src/xen/xen_driver.c > @@ -80,12 +80,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom, > unsigned char *cpumaps, int maplen); > > > -/* The five Xen drivers below us. */ > -static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = { > - [XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver, > - [XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver, > -}; > - > Ah, so my hypothesis in patch 18 was correct, we are down to zero now :). ACK. Regards, Jim > static bool inside_daemon = false; > > /** > @@ -1503,17 +1497,17 @@ static char * > xenUnifiedDomainGetSchedulerType(virDomainPtr dom, int *nparams) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i; > - char *schedulertype; > > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; i++) { > - if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerType) { > - schedulertype = drivers[i]->xenDomainGetSchedulerType(dom, nparams); > - if (schedulertype != NULL) > - return schedulertype; > + if (dom->id < 0) { > + if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Cannot change scheduler parameters")); > + return NULL; > } > + return xenDaemonGetSchedulerType(dom, nparams); > + } else { > + return xenHypervisorGetSchedulerType(dom, nparams); > } > - return NULL; > } > > static int > @@ -1523,18 +1517,19 @@ xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom, > unsigned int flags) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i, ret; > > virCheckFlags(0, -1); > > - for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) { > - if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerParameters) { > - ret = drivers[i]->xenDomainGetSchedulerParameters(dom, params, nparams); > - if (ret == 0) > - return 0; > + if (dom->id < 0) { > + if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Cannot change scheduler parameters")); > + return -1; > } > + return xenDaemonGetSchedulerParameters(dom, params, nparams); > + } else { > + return xenHypervisorGetSchedulerParameters(dom, params, nparams); > } > - return -1; > } > > static int > @@ -1553,20 +1548,19 @@ xenUnifiedDomainSetSchedulerParametersFlags(virDomainPtr dom, > unsigned int flags) > { > xenUnifiedPrivatePtr priv = dom->conn->privateData; > - int i, ret; > > virCheckFlags(0, -1); > > - /* do the hypervisor call last to get better error */ > - for (i = XEN_UNIFIED_NR_DRIVERS - 1; i >= 0; i--) { > - if (priv->opened[i] && drivers[i]->xenDomainSetSchedulerParameters) { > - ret = drivers[i]->xenDomainSetSchedulerParameters(dom, params, nparams); > - if (ret == 0) > - return 0; > + if (dom->id < 0) { > + if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Cannot change scheduler parameters")); > + return -1; > } > + return xenDaemonSetSchedulerParameters(dom, params, nparams); > + } else { > + return xenHypervisorSetSchedulerParameters(dom, params, nparams); > } > - > - return -1; > } > > static int > diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h > index e8c2958..e33610d 100644 > --- a/src/xen/xen_driver.h > +++ b/src/xen/xen_driver.h > @@ -82,21 +82,6 @@ extern int xenRegister (void); > VIR_MIGRATE_PAUSED | \ > VIR_MIGRATE_PERSIST_DEST) > > -/* _xenUnifiedDriver: > - * > - * Entry points into the underlying Xen drivers. This structure > - * will eventually go away and instead xen unified will make direct > - * calls to the underlying Xen drivers. > - * > - * To reiterate - the goal is to remove elements from this structure > - * until it is empty, replacing indirect calls through this > - * structure with direct calls in xen_unified.c. > - */ > -struct xenUnifiedDriver { > - virDrvDomainGetSchedulerType xenDomainGetSchedulerType; > - virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters; > - virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters; > -}; > > typedef struct xenXMConfCache *xenXMConfCachePtr; > typedef struct xenXMConfCache { > diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c > index df2a93f..d7b7cfc 100644 > --- a/src/xen/xen_hypervisor.c > +++ b/src/xen/xen_hypervisor.c > @@ -849,12 +849,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom; > # error "unsupported platform" > #endif > > -struct xenUnifiedDriver xenHypervisorDriver = { > - .xenDomainGetSchedulerType = xenHypervisorGetSchedulerType, > - .xenDomainGetSchedulerParameters = xenHypervisorGetSchedulerParameters, > - .xenDomainSetSchedulerParameters = xenHypervisorSetSchedulerParameters, > -}; > - > /** > * xenHypervisorDoV0Op: > * @handle: the handle to the Xen hypervisor > @@ -1124,12 +1118,6 @@ xenHypervisorGetSchedulerType(virDomainPtr domain, int *nparams) > char *schedulertype = NULL; > xenUnifiedPrivatePtr priv = domain->conn->privateData; > > - if (domain->id < 0) { > - virReportError(VIR_ERR_OPERATION_INVALID, > - "%s", _("domain is not running")); > - return NULL; > - } > - > /* > * Support only hv_versions.dom_interface >=5 > * (Xen3.1.0 or later) > @@ -1194,13 +1182,6 @@ xenHypervisorGetSchedulerParameters(virDomainPtr domain, > { > xenUnifiedPrivatePtr priv = domain->conn->privateData; > > - > - if (domain->id < 0) { > - virReportError(VIR_ERR_OPERATION_INVALID, > - "%s", _("domain is not running")); > - return -1; > - } > - > /* > * Support only hv_versions.dom_interface >=5 > * (Xen3.1.0 or later) > @@ -1303,12 +1284,6 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain, > NULL) < 0) > return -1; > > - if (domain->id < 0) { > - virReportError(VIR_ERR_OPERATION_INVALID, > - "%s", _("domain is not running")); > - return -1; > - } > - > /* > * Support only hv_versions.dom_interface >=5 > * (Xen3.1.0 or later) > diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h > index bd36bf7..8507bd0 100644 > --- a/src/xen/xen_hypervisor.h > +++ b/src/xen/xen_hypervisor.h > @@ -36,7 +36,6 @@ struct xenHypervisorVersions { > int dom_interface; /* -1,3,4,5,6,7 */ > }; > > -extern struct xenUnifiedDriver xenHypervisorDriver; > int xenHypervisorInit(struct xenHypervisorVersions *override_versions); > > virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn); > diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c > index 49ef256..87b8875 100644 > --- a/src/xen/xend_internal.c > +++ b/src/xen/xend_internal.c > @@ -2975,7 +2975,7 @@ error: > * Returns a scheduler name (credit or sedf) which must be freed by the > * caller or NULL in case of failure > */ > -static char * > +char * > xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams) > { > xenUnifiedPrivatePtr priv = domain->conn->privateData; > @@ -3040,7 +3040,7 @@ error: > * > * Returns 0 or -1 in case of failure > */ > -static int > +int > xenDaemonGetSchedulerParameters(virDomainPtr domain, > virTypedParameterPtr params, > int *nparams) > @@ -3142,7 +3142,7 @@ error: > * > * Returns 0 or -1 in case of failure > */ > -static int > +int > xenDaemonSetSchedulerParameters(virDomainPtr domain, > virTypedParameterPtr params, > int nparams) > @@ -3331,12 +3331,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain, > return ret; > } > > -struct xenUnifiedDriver xenDaemonDriver = { > - .xenDomainGetSchedulerType = xenDaemonGetSchedulerType, > - .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters, > - .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters, > -}; > - > > /** > * virDomainXMLDevID: > diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h > index 4a8578b..7332303 100644 > --- a/src/xen/xend_internal.h > +++ b/src/xen/xend_internal.h > @@ -148,10 +148,6 @@ int xenDaemonDomainGetAutostart (virDomainPtr dom, > int xenDaemonDomainSetAutostart (virDomainPtr domain, > int autostart); > > -/* xen_unified calls through here. */ > -extern struct xenUnifiedDriver xenDaemonDriver; > -int xenDaemonInit (void); > - > virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc); > virDomainPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid); > virDomainPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname); > @@ -160,4 +156,12 @@ int xenDaemonDomainMigratePerform (virDomainPtr domain, const char *cookie, int > > int xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path, unsigned long long offset, size_t size, void *buffer); > > +char * xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams); > +int xenDaemonGetSchedulerParameters(virDomainPtr domain, > + virTypedParameterPtr params, > + int *nparams); > +int xenDaemonSetSchedulerParameters(virDomainPtr domain, > + virTypedParameterPtr params, > + int nparams); > + > #endif /* __XEND_INTERNAL_H_ */ > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list