Я пытался написать пример кода для переменной процессора после чтения из книги, но я не могу получить ожидаемый результат после обновления переменной per CPU одного из счетчиков.
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
MODULE_LICENSE("GPL");
DEFINE_PER_CPU(int, counter);
static int test_percpu_init(void)
{
int num_cpus = num_online_cpus();
int i = 0;
int val;
pr_info("Number of cpus available:%d\n", num_cpus);
for (i = 0; i < num_cpus; i++) {
int value = per_cpu(counter, i);
pr_info("Value of counter is %d at Processor:%d\n", value, i);
}
val = get_cpu_var(counter);
val = 10;
put_cpu_var(counter);
pr_info("Printing counter value of all processor after updating current processor:%d\n",
smp_processor_id());
for (i = 0; i < num_cpus; i++) {
int value = per_cpu(counter, i);
pr_info("Value of counter is %d at Processor:%d\n", value, i);
}
return 0;
}
static void test_percpu_exit(void)
{
}
module_init(test_percpu_init);
module_exit(test_percpu_exit);
вывод dmesg:
[14516.661529] Number of cpus available:6
[14516.661531] Value of counter is 0 at Processor:0
[14516.661532] Value of counter is 0 at Processor:1
[14516.661532] Value of counter is 0 at Processor:2
[14516.661533] Value of counter is 0 at Processor:3
[14516.661533] Value of counter is 0 at Processor:4
[14516.661534] Value of counter is 0 at Processor:5
[14516.661534] Printing counter value of all processor after updating current processor:5
[14516.661534] Value of counter is 0 at Processor:0
[14516.661535] Value of counter is 0 at Processor:1
[14516.661535] Value of counter is 0 at Processor:2
[14516.661536] Value of counter is 0 at Processor:3
[14516.661536] Value of counter is 0 at Processor:4
[14516.661536] Value of counter is 0 at Processor:5
Подскажите, пожалуйста, почему значение текущего процессора не обновляется.Я делаю какую-либо ошибку в использовании API или передаю неверные аргументы.
Спасибо за вашу помощь