Merge "Move driver/linux into the main repository rather than a submodule."
diff --git a/src/arch/aarch64/hypervisor/cpu.c b/src/arch/aarch64/hypervisor/cpu.c
index 346c6b6..eadca3b 100644
--- a/src/arch/aarch64/hypervisor/cpu.c
+++ b/src/arch/aarch64/hypervisor/cpu.c
@@ -144,4 +144,7 @@
lor_disable();
write_msr(CPTR_EL2, get_cptr_el2_value());
+
+ /* Initialize counter-timer virtual offset register to 0. */
+ write_msr(CNTVOFF_EL2, 0);
}
diff --git a/src/arch/aarch64/inc/hf/arch/spinlock.h b/src/arch/aarch64/inc/hf/arch/spinlock.h
index 3e3d1a0..2b39a1b 100644
--- a/src/arch/aarch64/inc/hf/arch/spinlock.h
+++ b/src/arch/aarch64/inc/hf/arch/spinlock.h
@@ -52,12 +52,12 @@
" mov %w2, #1\n"
" sevl\n" /* set event bit */
"1: wfe\n" /* wait for event, clear event bit */
- "2: ldaxr %w1, [%0]\n" /* load lock value */
+ "2: ldaxr %w1, [%3]\n" /* load lock value */
" cbnz %w1, 1b\n" /* if lock taken, goto WFE */
- " stxr %w1, %w2, [%0]\n" /* try to take lock */
+ " stxr %w1, %w2, [%3]\n" /* try to take lock */
" cbnz %w1, 2b\n" /* loop if unsuccessful */
- : "+r"(l), "=&r"(tmp1), "=&r"(tmp2)
- :
+ : "+m"(*l), "=&r"(tmp1), "=&r"(tmp2)
+ : "r"(l)
: "cc");
}
@@ -67,5 +67,5 @@
* Store zero to lock's value with release semantics. This triggers an
* event which wakes up other threads waiting on a lock (no SEV needed).
*/
- __asm__ volatile("stlr wzr, [%0]" : "+r"(l)::"cc");
+ __asm__ volatile("stlr wzr, [%1]" : "=m"(*l) : "r"(l) : "cc");
}