Do not report error when setting affinity is allowed to fail

Suggested-by: Ján Tomko <jtomko@redhat.com>

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Martin Kletzander 2020-09-05 07:53:58 +02:00
parent 7afc99ae2d
commit 9514e24984
5 changed files with 32 additions and 16 deletions

View File

@ -775,7 +775,7 @@ static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl)
* so use '0' to indicate our own process ID. No threads are * so use '0' to indicate our own process ID. No threads are
* running at this point * running at this point
*/ */
if (virProcessSetAffinity(0 /* Self */, cpumapToSet) < 0) { if (virProcessSetAffinity(0 /* Self */, cpumapToSet, false) < 0) {
virBitmapFree(cpumap); virBitmapFree(cpumap);
return -1; return -1;
} }

View File

@ -4559,7 +4559,8 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
goto cleanup; goto cleanup;
} }
if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu), cpumap) < 0) if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu),
cpumap, false) < 0)
goto cleanup; goto cleanup;
} }
@ -4777,7 +4778,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
} }
} }
if (virProcessSetAffinity(vm->pid, pcpumap) < 0) if (virProcessSetAffinity(vm->pid, pcpumap, false) < 0)
goto endjob; goto endjob;
virBitmapFree(def->cputune.emulatorpin); 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; goto endjob;
if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0) if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)

View File

@ -2570,7 +2570,7 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm)
} }
if (cpumapToSet && 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 * 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 * user-requested mapping. If we are just trying to reset the affinity
@ -2740,7 +2740,8 @@ qemuProcessSetupPid(virDomainObjPtr vm,
affinity_cpumask = use_cpumask; affinity_cpumask = use_cpumask;
/* Setup legacy affinity. */ /* 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 * 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 * user-requested mapping. If we are just trying to reset the affinity

View File

@ -441,7 +441,7 @@ int virProcessKillPainfully(pid_t pid, bool force)
#if WITH_SCHED_GETAFFINITY #if WITH_SCHED_GETAFFINITY
int virProcessSetAffinity(pid_t pid, virBitmapPtr map) int virProcessSetAffinity(pid_t pid, virBitmapPtr map, bool quiet)
{ {
size_t i; size_t i;
int numcpus = 1024; int numcpus = 1024;
@ -479,9 +479,14 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
numcpus = numcpus << 2; numcpus = numcpus << 2;
goto realloc; goto realloc;
} }
virReportSystemError(errno, if (quiet) {
_("cannot set CPU affinity on process %d"), pid); VIR_DEBUG("cannot set CPU affinity on process %d: %s",
return -1; pid, g_strerror(errno));
} else {
virReportSystemError(errno,
_("cannot set CPU affinity on process %d"), pid);
return -1;
}
} }
CPU_FREE(mask); CPU_FREE(mask);
@ -533,7 +538,8 @@ virProcessGetAffinity(pid_t pid)
#elif defined(WITH_BSD_CPU_AFFINITY) #elif defined(WITH_BSD_CPU_AFFINITY)
int virProcessSetAffinity(pid_t pid, int virProcessSetAffinity(pid_t pid,
virBitmapPtr map) virBitmapPtr map,
bool quiet)
{ {
size_t i; size_t i;
cpuset_t mask; cpuset_t mask;
@ -546,9 +552,14 @@ int virProcessSetAffinity(pid_t pid,
if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid,
sizeof(mask), &mask) != 0) { sizeof(mask), &mask) != 0) {
virReportSystemError(errno, if (quiet) {
_("cannot set CPU affinity on process %d"), pid); VIR_DEBUG("cannot set CPU affinity on process %d: %s",
return -1; pid, g_strerror(errno));
} else {
virReportSystemError(errno,
_("cannot set CPU affinity on process %d"), pid);
return -1;
}
} }
return 0; return 0;
@ -582,8 +593,11 @@ virProcessGetAffinity(pid_t pid)
#else /* WITH_SCHED_GETAFFINITY */ #else /* WITH_SCHED_GETAFFINITY */
int virProcessSetAffinity(pid_t pid G_GNUC_UNUSED, 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", virReportSystemError(ENOSYS, "%s",
_("Process CPU affinity is not supported on this platform")); _("Process CPU affinity is not supported on this platform"));
return -1; return -1;

View File

@ -58,7 +58,7 @@ int virProcessKillPainfullyDelay(pid_t pid,
bool force, bool force,
unsigned int extradelay); unsigned int extradelay);
int virProcessSetAffinity(pid_t pid, virBitmapPtr map); int virProcessSetAffinity(pid_t pid, virBitmapPtr map, bool quiet);
virBitmapPtr virProcessGetAffinity(pid_t pid); virBitmapPtr virProcessGetAffinity(pid_t pid);