mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 18:05:20 +00:00
xen: allow getting < max typed parameters
Allow the user to call with nparams too small, per API documentation. * src/xen/xen_hypervisor.c (xenHypervisorGetSchedulerParameters): Allow fewer than max. * src/xen/xend_internal.c (xenDaemonGetSchedulerParameters): Likewise.
This commit is contained in:
parent
6d897fc671
commit
fbae3d6f9e
@ -1274,11 +1274,6 @@ xenHypervisorGetSchedulerParameters(virDomainPtr domain,
|
|||||||
TODO
|
TODO
|
||||||
return(-1);
|
return(-1);
|
||||||
case XEN_SCHEDULER_CREDIT:
|
case XEN_SCHEDULER_CREDIT:
|
||||||
if (*nparams < XEN_SCHED_CRED_NPARAM) {
|
|
||||||
virXenError(VIR_ERR_INVALID_ARG,
|
|
||||||
"%s", _("Invalid parameter count"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memset(&op_dom, 0, sizeof(op_dom));
|
memset(&op_dom, 0, sizeof(op_dom));
|
||||||
op_dom.cmd = XEN_V2_OP_SCHEDULER;
|
op_dom.cmd = XEN_V2_OP_SCHEDULER;
|
||||||
op_dom.domain = (domid_t) domain->id;
|
op_dom.domain = (domid_t) domain->id;
|
||||||
@ -1298,17 +1293,20 @@ xenHypervisorGetSchedulerParameters(virDomainPtr domain,
|
|||||||
params[0].type = VIR_TYPED_PARAM_UINT;
|
params[0].type = VIR_TYPED_PARAM_UINT;
|
||||||
params[0].value.ui = op_dom.u.getschedinfo.u.credit.weight;
|
params[0].value.ui = op_dom.u.getschedinfo.u.credit.weight;
|
||||||
|
|
||||||
if (virStrcpyStatic(params[1].field,
|
if (*nparams > 1) {
|
||||||
VIR_DOMAIN_SCHEDULER_CAP) == NULL) {
|
if (virStrcpyStatic(params[1].field,
|
||||||
virXenError(VIR_ERR_INTERNAL_ERROR,
|
VIR_DOMAIN_SCHEDULER_CAP) == NULL) {
|
||||||
"Cap %s too big for destination",
|
virXenError(VIR_ERR_INTERNAL_ERROR,
|
||||||
VIR_DOMAIN_SCHEDULER_CAP);
|
"Cap %s too big for destination",
|
||||||
return -1;
|
VIR_DOMAIN_SCHEDULER_CAP);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
params[1].type = VIR_TYPED_PARAM_UINT;
|
||||||
|
params[1].value.ui = op_dom.u.getschedinfo.u.credit.cap;
|
||||||
}
|
}
|
||||||
params[1].type = VIR_TYPED_PARAM_UINT;
|
|
||||||
params[1].value.ui = op_dom.u.getschedinfo.u.credit.cap;
|
|
||||||
|
|
||||||
*nparams = XEN_SCHED_CRED_NPARAM;
|
if (*nparams > XEN_SCHED_CRED_NPARAM)
|
||||||
|
*nparams = XEN_SCHED_CRED_NPARAM;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__,
|
virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__,
|
||||||
|
@ -3614,12 +3614,6 @@ xenDaemonGetSchedulerParameters(virDomainPtr domain,
|
|||||||
TODO
|
TODO
|
||||||
goto error;
|
goto error;
|
||||||
case XEN_SCHED_CRED_NPARAM:
|
case XEN_SCHED_CRED_NPARAM:
|
||||||
if (*nparams < XEN_SCHED_CRED_NPARAM) {
|
|
||||||
virXendError(VIR_ERR_INVALID_ARG,
|
|
||||||
"%s", _("Invalid parameter count"));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get cpu_weight/cpu_cap from xend/domain */
|
/* get cpu_weight/cpu_cap from xend/domain */
|
||||||
if (sexpr_node(root, "domain/cpu_weight") == NULL) {
|
if (sexpr_node(root, "domain/cpu_weight") == NULL) {
|
||||||
virXendError(VIR_ERR_INTERNAL_ERROR,
|
virXendError(VIR_ERR_INTERNAL_ERROR,
|
||||||
@ -3642,16 +3636,20 @@ xenDaemonGetSchedulerParameters(virDomainPtr domain,
|
|||||||
params[0].type = VIR_TYPED_PARAM_UINT;
|
params[0].type = VIR_TYPED_PARAM_UINT;
|
||||||
params[0].value.ui = sexpr_int(root, "domain/cpu_weight");
|
params[0].value.ui = sexpr_int(root, "domain/cpu_weight");
|
||||||
|
|
||||||
if (virStrcpyStatic(params[1].field,
|
if (*nparams > 1) {
|
||||||
VIR_DOMAIN_SCHEDULER_CAP) == NULL) {
|
if (virStrcpyStatic(params[1].field,
|
||||||
virXendError(VIR_ERR_INTERNAL_ERROR,
|
VIR_DOMAIN_SCHEDULER_CAP) == NULL) {
|
||||||
_("Cap %s too big for destination"),
|
virXendError(VIR_ERR_INTERNAL_ERROR,
|
||||||
VIR_DOMAIN_SCHEDULER_CAP);
|
_("Cap %s too big for destination"),
|
||||||
goto error;
|
VIR_DOMAIN_SCHEDULER_CAP);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
params[1].type = VIR_TYPED_PARAM_UINT;
|
||||||
|
params[1].value.ui = sexpr_int(root, "domain/cpu_cap");
|
||||||
}
|
}
|
||||||
params[1].type = VIR_TYPED_PARAM_UINT;
|
|
||||||
params[1].value.ui = sexpr_int(root, "domain/cpu_cap");
|
if (*nparams > XEN_SCHED_CRED_NPARAM)
|
||||||
*nparams = XEN_SCHED_CRED_NPARAM;
|
*nparams = XEN_SCHED_CRED_NPARAM;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user