在内核初始化期间编写per-cpu变量物理地址

时间:2018-03-25 10:40:31

标签: linux-kernel kernel

我有以下代码:

static DEFINE_PER_CPU_ALIGNED(cpu_clock_t, cpu_clock);

static void func(void *info)
{
        uint64_t cpu_clock_pa = per_cpu_ptr_to_phys(get_cpu_ptr(&cpu_clock));
        __asm__ __volatile__ ... //Giving the PA to VMware kernel which is supposed to write something to there
        put_cpu_ptr(cpu_clock);
}

问题是,当这段代码作为内核初始化的一部分运行时,我在VMware工作站中收到一条消息“客户机操作系统上的CPU被禁用”,这意味着发生了一些内核恐慌,当我使用相同的代码后内核启动(将其作为模块初始化的一部分调用)它工作正常......

1 个答案:

答案 0 :(得分:0)

正如a3f指出的那样,我的代码在setup_per_cpu_areas之前运行。