2016-01-14 16 views
0

Im пытается напечатать cpus, что определенная задача разрешена для запуска.Печать задачи, на которой разрешено выполнение задачи?

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

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

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

+0

Учитывая, что это 'cpumask_t', я подозреваю, что это целое число (32- или 64-разрядное), содержащее 1 бит в каждой позиции, если разрешен соответствующий CPU. Другими словами, это не список чисел, но вам придется перебирать биты и тестировать их. – twalberg

ответ

1

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

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

Oki, так что я нашел функцию внутри ядра, что делает именно то, что мне нужно в cpumask.hcpumask_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); 
}