Печать процессора, на котором разрешено запускать задачу?

Я пытаюсь напечатать процессор, на котором разрешено запускать определенную задачу.

Внутри struct task_struct (которую можно найти здесь) есть cpumask_t cpus_allowed, который, насколько я понимаю, содержит именно то, что я ищу. Это правильно?

Если да, то как мне извлечь номера процессоров, которые разрешены?

например, мой комп имеет 8 логических ядер - так что я ожидаю, что где-то внутри cpus_allowed я смогу найти эти числа (например, 0,2,5)

2 ответа

Макрос for_each_cpu будет перебирать все процессоры, разрешенные данной маской:

// Assume `mask` is given.
int cpu;
for_each_cpu(cpu, mask)
{
    printk("Allowed CPU: %d\n", cpu);
}

Используйте функцию cpumask_pr_args() определяется внутри cpumask.h.

Использование:

 printk("%*pbl\n", cpumask_pr_args(mask));

Смотрите здесь для получения информации о %*pbl заполнитель.

Оки, поэтому я нашел функцию внутри ядра, которая делает именно то, что мне нужно, в cpumask.h cpumask_scnprintf:

 /**
 * cpumask_scnprintf - print a cpumask into a string as comma-separated hex
 * @buf: the buffer to sprintf into
 * @len: the length of the buffer
 * @srcp: the cpumask to print
 *
 * If len is zero, returns zero.  Otherwise returns the length of the
 * (nul-terminated) @buf string.
 */
static inline int cpumask_scnprintf(char *buf, int len,
                                    const struct cpumask *srcp)
{
        return bitmap_scnprintf(buf, len, cpumask_bits(srcp), nr_cpumask_bits);
}
Другие вопросы по тегам