内核使用结构体cpumask来表示CPU的状态位图,cpumask_t是cpumask的别名。cpumask定义如下: // file: include/linux/cpumask.htypedefstructcpumask{DECLARE_BITMAP(bits,NR_CPUS);}cpumask_t; cpumask是对位图的包装,其内部引用了宏DECLARE_BITMAP。 2.1.1 宏 DECLARE_BITMAP 宏DECLARE_BITMAP用来创建一个位图,...
void dump_cpu_mask_example(cpumask_t *mask) { dump_stack(); dump_cpu_mask(mask); } 调用dump_cpu_mask_example()时,会在内核日志中看到堆栈跟踪信息以及跟随其后的CPU掩码打印。 3、直接访问cpumask_t的位: 对于更精细的控制或特殊情况,可以直接遍历cpumask_t的位数组,并使用printk打印其中的每一位。
set_cpu_possible(cpu, true); #ifdef CONFIG_SMP __boot_cpu_id = cpu; #endif } set_cpu_online()接收两个参数(cpuid ,true or false),其实现如下。若第二个参数为 true,cpumask_test_and_set_cpu将被调用。 void set_cpu_online(unsigned int cpu, bool online) { if (online) { if (!cpum...
* 第一步是替换cpus_*函数. 新的接口以cpumask_为起始字符; 这些新函数以(const) struct cpumask指针为参数, 只能操作一些bit位(若操作的bit位数量少则为CONFIG_NR_CPUS,否则为nr_cpu_ids). 替换方法如下: for_each_cpu_mask(i, my_cpumask) ... if (i == NR_CPUS) 最后一步替换为"(i >= nr...
1. cpumask、cpumask_t 和 cpumask_var_t:https://www.cnblogs.com/hellokitty2/p/16919268.html 2. bitmap.c中提供了解析cpumask的函数 staticint__init rcu_nocb_setup(char*str) { cpulist_parse(str, rcu_nocb_mask);//从用户字符串中提取cpumask} ...
中断亲和性使用cpumask_t来表示。 具体定义在/include/linux/cpumask.h: AI检测代码解析 /* Don't assign or return these: may not be this big! */ typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; 本质上就是一个long 类型的数组,数组多少和cpu数量相关。
get_cpu_mask /*cpu_bit_bitmap[0] is empty - so we can back into it*/#defineMASK_DECLARE_1(x) [x+1][0] = (1UL << (x))#defineMASK_DECLARE_2(x) MASK_DECLARE_1(x), MASK_DECLARE_1(x+1)#defineMASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2)#defineMASK_DECLA...
* @cpu: the (optionally unsigned) integer iterator * @mask1: the first cpumask pointer * @mask2: the second cpumask pointer * * This saves a temporary CPU mask in many places. It is equivalent to: * struct cpumask tmp; * cpumask_or(&tmp, &mask1, &mask2); * for_each_cpu(c...
今天在阅读内核源码时,对get_cpu_mask()函数中使用的小技巧颇有感触,在此记录一下。 一、背景知识 get_cpu_mask()函数的作用是依据输入的cpu编号,返回对应的struct cpumask结构体型指针;cpumask是代表了系统中cpu集合的位图,每一bit个代表一个cpu。
const cpumask_t *cpus_ptr; cpumask_t *user_cpus_ptr; cpumask_t cpus_mask; ... } cpus_ptr字段是一个指针 , 指向 CPU 资源 , 表示该进程被允许在哪个 CPU 上运行 ; 其表示的是当前进程可使用的cpu掩码值,通常不对进程进行taskset等相关设置的话,直接表示cpu_all_mask,可运行在所有cpu上。