mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/pagewalk: avoid ACCESS_ONCE() in compound literals
Compound literals are also covered by Misra C:2012 rule 13.1
("Initializer lists shall not contain persistent side effects"), and
(sadly?) that rule also applies to lists with just a single element, or
more generally with just a single side effect. Use intermediate variables
to overcome this as well as ACCESS_ONCE()'s restriction to be usable on
scalar types only.
No functional change intended.
Fixes: 0345b835dc ("x86/pagewalk: Read guest PTEs with ACCESS_ONCE()")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Roger Pau Monné <roger@xenproject.org>
This commit is contained in:
1 parent
25055cde91
commit
578ac3ee3e
1 file changed
+12
-4
@@ -129,7 +129,9 @@ guest_walk_tables(const struct vcpu *v, struct p2m_domain *p2m,
|
||||
guest_l4_table_offset(va) * sizeof(gw->l4e);
|
||||
if ( !hvmemul_read_cache(v, l4gpa, &gw->l4e, sizeof(gw->l4e)) )
|
||||
{
|
||||
gw->l4e = (guest_l4e_t){ ACCESS_ONCE(l4p[guest_l4_table_offset(va)].l4) };
|
||||
guest_intpte_t l4e = ACCESS_ONCE(l4p[guest_l4_table_offset(va)].l4);
|
||||
|
||||
gw->l4e = (guest_l4e_t){ l4e };
|
||||
hvmemul_write_cache(v, l4gpa, &gw->l4e, sizeof(gw->l4e));
|
||||
}
|
||||
gflags = guest_l4e_get_flags(gw->l4e);
|
||||
@@ -164,7 +166,9 @@ guest_walk_tables(const struct vcpu *v, struct p2m_domain *p2m,
|
||||
guest_l3_table_offset(va) * sizeof(gw->l3e);
|
||||
if ( !hvmemul_read_cache(v, l3gpa, &gw->l3e, sizeof(gw->l3e)) )
|
||||
{
|
||||
gw->l3e = (guest_l3e_t){ ACCESS_ONCE(l3p[guest_l3_table_offset(va)].l3) };
|
||||
guest_intpte_t l3e = ACCESS_ONCE(l3p[guest_l3_table_offset(va)].l3);
|
||||
|
||||
gw->l3e = (guest_l3e_t){ l3e };
|
||||
hvmemul_write_cache(v, l3gpa, &gw->l3e, sizeof(gw->l3e));
|
||||
}
|
||||
gflags = guest_l3e_get_flags(gw->l3e);
|
||||
@@ -264,7 +268,9 @@ guest_walk_tables(const struct vcpu *v, struct p2m_domain *p2m,
|
||||
l2gpa += guest_l2_table_offset(va) * sizeof(gw->l2e);
|
||||
if ( !hvmemul_read_cache(v, l2gpa, &gw->l2e, sizeof(gw->l2e)) )
|
||||
{
|
||||
gw->l2e = (guest_l2e_t){ ACCESS_ONCE(l2p[guest_l2_table_offset(va)].l2) };
|
||||
guest_intpte_t l2e = ACCESS_ONCE(l2p[guest_l2_table_offset(va)].l2);
|
||||
|
||||
gw->l2e = (guest_l2e_t){ l2e };
|
||||
hvmemul_write_cache(v, l2gpa, &gw->l2e, sizeof(gw->l2e));
|
||||
}
|
||||
|
||||
@@ -353,7 +359,9 @@ guest_walk_tables(const struct vcpu *v, struct p2m_domain *p2m,
|
||||
guest_l1_table_offset(va) * sizeof(gw->l1e);
|
||||
if ( !hvmemul_read_cache(v, l1gpa, &gw->l1e, sizeof(gw->l1e)) )
|
||||
{
|
||||
gw->l1e = (guest_l1e_t){ ACCESS_ONCE(l1p[guest_l1_table_offset(va)].l1) };
|
||||
guest_intpte_t l1e = ACCESS_ONCE(l1p[guest_l1_table_offset(va)].l1);
|
||||
|
||||
gw->l1e = (guest_l1e_t){ l1e };
|
||||
hvmemul_write_cache(v, l1gpa, &gw->l1e, sizeof(gw->l1e));
|
||||
}
|
||||
|
||||
|
||||