This is a helper function to print vcpu pin info.
---
tools/virsh-domain.c | 65 ++++++++++++++++++++++++++++++++------------------
1 file changed, 42 insertions(+), 23 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index edbda91..aab5921 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -4517,6 +4517,45 @@ static const vshCmdOptDef opts_vcpupin[] = {
{NULL, 0, 0, NULL}
};
+/*
+ * Helper function to print vcpupin info.
+ */
+static bool
+vshPrintPinInfo(unsigned char *cpumaps, size_t cpumaplen,
+ int maxcpu, int vcpuindex)
+{
+ int cpu, lastcpu;
+ bool bit, lastbit, isInvert;
+
+ if (!cpumaps || cpumaplen <= 0 || maxcpu <= 0 || vcpuindex < 0) {
+ return false;
+ }
+
+ bit = lastbit = isInvert = false;
+ lastcpu = -1;
+
+ for (cpu = 0; cpu < maxcpu; cpu++) {
+ bit = VIR_CPU_USABLE(cpumaps, cpumaplen, vcpuindex, cpu);
+
+ isInvert = (bit ^ lastbit);
+ if (bit && isInvert) {
+ if (lastcpu == -1)
+ vshPrint(ctl, "%d", cpu);
+ else
+ vshPrint(ctl, ",%d", cpu);
+ lastcpu = cpu;
+ }
+ if (!bit && isInvert && lastcpu != cpu - 1)
+ vshPrint(ctl, "-%d", cpu - 1);
+ lastbit = bit;
+ }
+ if (bit && !isInvert) {
+ vshPrint(ctl, "-%d", maxcpu - 1);
+ }
+
+ return true;
+}
+
static bool
cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
{
@@ -4529,7 +4568,6 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
unsigned char *cpumap = NULL;
unsigned char *cpumaps = NULL;
size_t cpumaplen;
- bool bit, lastbit, isInvert;
int i, cpu, lastcpu, maxcpu, ncpus;
bool unuse = false;
const char *cur;
@@ -4614,30 +4652,11 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
if (vcpu != -1 && i != vcpu)
continue;
- bit = lastbit = isInvert = false;
- lastcpu = -1;
-
vshPrint(ctl, "%4d: ", i);
- for (cpu = 0; cpu < maxcpu; cpu++) {
-
- bit = VIR_CPU_USABLE(cpumaps, cpumaplen, i, cpu);
-
- isInvert = (bit ^ lastbit);
- if (bit && isInvert) {
- if (lastcpu == -1)
- vshPrint(ctl, "%d", cpu);
- else
- vshPrint(ctl, ",%d", cpu);
- lastcpu = cpu;
- }
- if (!bit && isInvert && lastcpu != cpu - 1)
- vshPrint(ctl, "-%d", cpu - 1);
- lastbit = bit;
- }
- if (bit && !isInvert) {
- vshPrint(ctl, "-%d", maxcpu - 1);
- }
+ ret = vshPrintPinInfo(cpumaps, cpumaplen, maxcpu, i);
vshPrint(ctl, "\n");
+ if (!ret)
+ break;
}
} else {
--
1.7.10.2