私はそれがどのように機能するかを理解するためにdriver/cpufreq/cpufreq.cを閲覧していました。私は理解できないこのコードに出くわしました。
でcpufreq_core_init
:
for_each_possible_cpu(cpu) {
per_cpu(cpufreq_policy_cpu, cpu) = -1;
init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
}
定義されたマクロを調べたところ、
#define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask)
#define per_cpu(var, cpu) \
(*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu)))
#define init_rwsem(sem) \
do { \
static struct lock_class_key __key; \
\
__init_rwsem((sem), #sem, &__key); \
} while (0)
私の質問:
- どのように
for_each_possible_cpu
拡張しますか? - なぜ他の2人
#defines
が内部で呼ばれるのですか? per_cpu
出力が-1に等しいのはなぜですか?