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:
Eric Blake 2011-11-02 11:57:29 -06:00
parent 6d897fc671
commit fbae3d6f9e
2 changed files with 25 additions and 29 deletions

View File

@ -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__,

View File

@ -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: