[libvirt] [PATCH 3/3] virsh: Prohibit all clear cpumap
Osier Yang
jyang at redhat.com
Tue Apr 2 12:06:46 UTC 2013
On 02/04/13 18:53, John Ferlan wrote:
> On 04/02/2013 01:42 AM, Osier Yang wrote:
>> This prohibits all clear cpumap eariler in virsh, for both vcpupin
>> and emulatorpin.
>> ---
>> tools/virsh-domain.c | 35 ++++++++++++++++++++++++++++++-----
>> 1 file changed, 30 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
>> index 965f92c..8d3d63f 100644
>> --- a/tools/virsh-domain.c
>> +++ b/tools/virsh-domain.c
>> @@ -5552,6 +5552,20 @@ cleanup:
>> }
>>
>> static bool
>> +vshIsCpumapAllClear(const unsigned char *cpumap,
>> + int maxcpu)
>> +{
>> + int i;
>> +
>> + for (i = 0; i < maxcpu; i++) {
>> + if (VIR_CPU_USED(cpumap, i))
>> + return false;
>> + }
>> +
>> + return true;
>> +}
>> +
>> +static bool
>> cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
>> {
>> virDomainInfo info;
>> @@ -5620,7 +5634,7 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
>>
>> cpumaplen = VIR_CPU_MAPLEN(maxcpu);
>>
>> - /* Query mode: show CPU affinity information then exit.*/
>> + /* Query mode: show CPU affinity information then exit. */
>> if (query) {
>> /* When query mode and neither "live", "config" nor "current"
>> * is specified, set VIR_DOMAIN_AFFECT_CURRENT as flags */
>> @@ -5649,10 +5663,15 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
>> goto cleanup;
>> }
>>
>> - /* Pin mode: pinning specified vcpu to specified physical cpus*/
>> + /* Pin mode: pinning specified vcpu to specified physical cpus. */
>> if (!(cpumap = vshParseCPUList(ctl, cpulist, maxcpu, cpumaplen)))
>> goto cleanup;
>>
>> + if (vshIsCpumapAllClear(cpumap, maxcpu)) {
>> + vshError(ctl, "%s", _("No CPU specified"));
>> + goto cleanup;
>> + }
>> +
>> if (flags == -1) {
>> if (virDomainPinVcpu(dom, vcpu, cpumap, cpumaplen) != 0)
>> goto cleanup;
>> @@ -5755,10 +5774,11 @@ cmdEmulatorPin(vshControl *ctl, const vshCmd *cmd)
>>
>> cpumaplen = VIR_CPU_MAPLEN(maxcpu);
>>
>> - /* Query mode: show CPU affinity information then exit.*/
>> + /* Query mode: show CPU affinity information then exit. */
>> if (query) {
>> /* When query mode and neither "live", "config" nor "current"
>> - * is specified, set VIR_DOMAIN_AFFECT_CURRENT as flags */
>> + * is specified, set VIR_DOMAIN_AFFECT_CURRENT as flags.
>> + */
>> if (flags == -1)
>> flags = VIR_DOMAIN_AFFECT_CURRENT;
>>
>> @@ -5775,10 +5795,15 @@ cmdEmulatorPin(vshControl *ctl, const vshCmd *cmd)
>> goto cleanup;
>> }
>>
>> - /* Pin mode: pinning emulator threads to specified physical cpus*/
>> + /* Pin mode: pinning emulator threads to specified physical cpus. */
>> if (!(cpumap = vshParseCPUList(ctl, cpulist, maxcpu, cpumaplen)))
>> goto cleanup;
>>
>> + if (vshIsCpumapAllClear(cpumap, maxcpu)) {
>> + vshError(ctl, "%s", _("No CPU is specified"));
>> + goto cleanup;
>> + }
>> +
>> if (flags == -1)
>> flags = VIR_DOMAIN_AFFECT_LIVE;
>>
>>
> Unlike the virReportError() which provides the function trace - how
> would one know which of the two functions had the error here? OK other
> than looking at the code and noting one error has an "is" verb and the
> other doesn't...
Something like "vcpupin: No CPU is specified" should be clear
enough to tell which function throws the error. But what I was
thinking is the prefix "vcpupin:" is redundant. As one must known
he is executing a "vcpupin" command. E.g.
% virsh vcpupin toy 0 0,^0
error: No CPU specified
>
> One message could indicate "No domain vCPU affinity" while the other
> could indicate "No domain emulator affinity"...
>
> John
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list