Код: Выделить всё
static void arch_timer_switch_cpu_to_phys(void *dummy)
{
u32 cvall, cvalh, val;
pr_info("Switching CPU%d to physical timer\n", smp_processor_id());
asm volatile("mrrc p15, 3, %0, %1, c14 \n" /* Read CNTV_CVAL */
"mcrr p15, 2, %0, %1, c14 \n" /* Write CNTP_CVAL */
: "=r" (cvall), "=r" (cvalh));
isb();
val = arch_timer_virt_reg_read(ARCH_TIMER_REG_CTRL);
arch_timer_virt_reg_write(ARCH_TIMER_REG_CTRL,
val & ~ARCH_TIMER_CTRL_ENABLE);
arch_timer_phys_reg_write(ARCH_TIMER_REG_CTRL, val);
*__this_cpu_ptr(arch_timer_reg_ops) = &arch_timer_phys_ops;
}