/* https://github.com/cirosantilli/linux-kernel-module-cheat#arm-multicore */ #include LKMC_PROLOGUE mov r0, 0 ldr r1, =spinlock str r0, [r1] /* Get CPU ID. */ mrc p15, 0, r1, c0, c0, 5 ands r1, r1, 3 beq cpu0_only cpu1_only: mov r0, 1 ldr r1, =spinlock str r0, [r1] dmb sy sev cpu1_sleep_forever: wfe b cpu1_sleep_forever cpu0_only: #if !LKMC_GEM5 /* PSCI CPU_ON. */ ldr r0, =0x84000003 mov r1, 1 ldr r2, =cpu1_only mov r3, 0 hvc 0 #endif spinlock_start: ldr r0, spinlock wfe cmp r0, 0 beq spinlock_start LKMC_EPILOGUE spinlock: .skip 4