On Wed, 4 Mar 2020 11:12:08 +0200 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote: > +static int read_qemu_guests_pids(char *guest_task, struct guest *guest) > +{ > + struct dirent *entry; > + char path[PATH_MAX]; > + char *buf = NULL; > + size_t n = 0; > + int ret = 0; > + long vcpu; > + long pid; > + DIR *dir; > + FILE *f; > + > + snprintf(path, sizeof(path), "/proc/%s/task", guest_task); > + dir = opendir(path); > + if (!dir) > + return -1; > + > + while (!ret && (entry = readdir(dir))) { > + if (!(entry->d_type == DT_DIR && is_digits(entry->d_name))) > + continue; > + > + snprintf(path, sizeof(path), "/proc/%s/task/%s/comm", > + guest_task, entry->d_name); > + f = fopen(path, "r"); > + if (!f) > + continue; > + > + if (getline(&buf, &n, f) >= 0 && > + strncmp(buf, "CPU ", 4) == 0) { > + vcpu = strtol(buf + 4, NULL, 10); > + pid = strtol(entry->d_name, NULL, 10); > + if (vcpu < INT_MAX && pid < INT_MAX && > + vcpu >= 0 && pid >= 0) { > + if (set_vcpu_pid_mapping(guest, vcpu, pid)) > + ret = 1; Small nit. For errors, I usually return negative numbers (positive numbers are usually successful values). But unless there another issue with this series, this is not big enough for a resend. I could always just patch it as well. -- Steve > + } > + } > + > + fclose(f); > + } > + free(buf); > + return ret; > +}