]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Do not report error when setting affinity is allowed to fail
authorMartin Kletzander <mkletzan@redhat.com>
Sat, 5 Sep 2020 05:53:58 +0000 (07:53 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Mon, 7 Sep 2020 09:35:36 +0000 (11:35 +0200)
Suggested-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/lxc/lxc_controller.c
src/qemu/qemu_driver.c
src/qemu/qemu_process.c
src/util/virprocess.c
src/util/virprocess.h

index 0a496fb7886c952b48eaecfbce18776e5ba2fb80..37a28ac2f3c13708a5cdbd01f67c30587d36b61d 100644 (file)
@@ -775,7 +775,7 @@ static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl)
      * so use '0' to indicate our own process ID. No threads are
      * running at this point
      */
-    if (virProcessSetAffinity(0 /* Self */, cpumapToSet) < 0) {
+    if (virProcessSetAffinity(0 /* Self */, cpumapToSet, false) < 0) {
         virBitmapFree(cpumap);
         return -1;
     }
index 5ae030affee96d8d225f7e526e32fbbe288eec15..2e46931c7163b95db2fab47bc350e5a324ec9beb 100644 (file)
@@ -4559,7 +4559,8 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
                 goto cleanup;
         }
 
-        if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu), cpumap) < 0)
+        if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu),
+                                  cpumap, false) < 0)
             goto cleanup;
     }
 
@@ -4777,7 +4778,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
             }
         }
 
-        if (virProcessSetAffinity(vm->pid, pcpumap) < 0)
+        if (virProcessSetAffinity(vm->pid, pcpumap, false) < 0)
             goto endjob;
 
         virBitmapFree(def->cputune.emulatorpin);
@@ -5252,7 +5253,7 @@ qemuDomainPinIOThread(virDomainPtr dom,
             }
         }
 
-        if (virProcessSetAffinity(iothrid->thread_id, pcpumap) < 0)
+        if (virProcessSetAffinity(iothrid->thread_id, pcpumap, false) < 0)
             goto endjob;
 
         if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)
index a269d794075cf590a193e6dd42f542fe836c343e..04e5cbb65969497c2b9e196b93da4664af6cc505 100644 (file)
@@ -2570,7 +2570,7 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm)
     }
 
     if (cpumapToSet &&
-        virProcessSetAffinity(vm->pid, cpumapToSet) < 0) {
+        virProcessSetAffinity(vm->pid, cpumapToSet, false) < 0) {
         /*
          * We only want to error out if we failed to set the affinity to
          * user-requested mapping.  If we are just trying to reset the affinity
@@ -2740,7 +2740,8 @@ qemuProcessSetupPid(virDomainObjPtr vm,
         affinity_cpumask = use_cpumask;
 
     /* Setup legacy affinity. */
-    if (affinity_cpumask && virProcessSetAffinity(pid, affinity_cpumask) < 0) {
+    if (affinity_cpumask &&
+        virProcessSetAffinity(pid, affinity_cpumask, false) < 0) {
         /*
          * We only want to error out if we failed to set the affinity to
          * user-requested mapping.  If we are just trying to reset the affinity
index 9de3565051042f00b5d0e7c0ea8dec2f8a4f4b81..e9df56389621819c1e50325fcf3aaa73c5831856 100644 (file)
@@ -441,7 +441,7 @@ int virProcessKillPainfully(pid_t pid, bool force)
 
 #if WITH_SCHED_GETAFFINITY
 
-int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
+int virProcessSetAffinity(pid_t pid, virBitmapPtr map, bool quiet)
 {
     size_t i;
     int numcpus = 1024;
@@ -479,9 +479,14 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
             numcpus = numcpus << 2;
             goto realloc;
         }
-        virReportSystemError(errno,
-                             _("cannot set CPU affinity on process %d"), pid);
-        return -1;
+        if (quiet) {
+            VIR_DEBUG("cannot set CPU affinity on process %d: %s",
+                      pid, g_strerror(errno));
+        } else {
+            virReportSystemError(errno,
+                                 _("cannot set CPU affinity on process %d"), pid);
+            return -1;
+        }
     }
     CPU_FREE(mask);
 
@@ -533,7 +538,8 @@ virProcessGetAffinity(pid_t pid)
 #elif defined(WITH_BSD_CPU_AFFINITY)
 
 int virProcessSetAffinity(pid_t pid,
-                          virBitmapPtr map)
+                          virBitmapPtr map,
+                          bool quiet)
 {
     size_t i;
     cpuset_t mask;
@@ -546,9 +552,14 @@ int virProcessSetAffinity(pid_t pid,
 
     if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid,
                            sizeof(mask), &mask) != 0) {
-        virReportSystemError(errno,
-                             _("cannot set CPU affinity on process %d"), pid);
-        return -1;
+        if (quiet) {
+            VIR_DEBUG("cannot set CPU affinity on process %d: %s",
+                      pid, g_strerror(errno));
+        } else {
+            virReportSystemError(errno,
+                                 _("cannot set CPU affinity on process %d"), pid);
+            return -1;
+        }
     }
 
     return 0;
@@ -582,8 +593,11 @@ virProcessGetAffinity(pid_t pid)
 #else /* WITH_SCHED_GETAFFINITY */
 
 int virProcessSetAffinity(pid_t pid G_GNUC_UNUSED,
-                          virBitmapPtr map G_GNUC_UNUSED)
+                          virBitmapPtr map G_GNUC_UNUSED,
+                          bool quiet G_GNUC_UNUSED)
 {
+    /* The @quiet parameter is ignored here, it is used only for silencing
+     * actual failures. */
     virReportSystemError(ENOSYS, "%s",
                          _("Process CPU affinity is not supported on this platform"));
     return -1;
index 437deb18305b2b035f13cb2e9a8614ce584e8ddb..34210d6c9d62f596b5f6f5eea651bcda5245784c 100644 (file)
@@ -58,7 +58,7 @@ int virProcessKillPainfullyDelay(pid_t pid,
                                  bool force,
                                  unsigned int extradelay);
 
-int virProcessSetAffinity(pid_t pid, virBitmapPtr map);
+int virProcessSetAffinity(pid_t pid, virBitmapPtr map, bool quiet);
 
 virBitmapPtr virProcessGetAffinity(pid_t pid);