On 02.05.20 18:09, Julien Grall wrote:
On 02/05/2020 13:34, Julien Grall wrote:
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 195e7ee583..81628e2d98 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -844,7 +844,7 @@ static inline bool is_vcpu_dirty_cpu(unsigned
int cpu)
static inline bool vcpu_cpu_dirty(const struct vcpu *v)
{
- return is_vcpu_dirty_cpu(v->dirty_cpu);
+ return is_vcpu_dirty_cpu(read_atomic((unsigned int
*)&v->dirty_cpu));
Is the cast necessary?
Yes, that was the problem when building for ARM I encountered.
read_atomic() on ARM has a local variable of the same type as the
read_atomic() parameter for storing the result. Due to the const
attribute of v this results in assignment to a read-only variable.
Doh, we should be able to read from a const value without. So I would
argue this is a bug in the read_atomic() implementation on Arm. I will
try to come up with a patch.
I have just sent a series [1] to address the issue reported here and a
few more.
With that series V1 of this patch is fine again. :-)
Juergen