|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/shadow: avoid sizeof(this_cpu(...))
commit 6621fa6708b8259c4b72bcb967a73fe1f4fb01ec
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri May 22 08:19:00 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri May 22 08:19:00 2026 +0200
x86/shadow: avoid sizeof(this_cpu(...))
Misra C:2012 rule 13.6 takes issue with RELOC_HIDE() uses inside sizeof(),
as used by this_cpu(). Latch the address of the per-CPU variable into a
local variable, and use that in the two sizeof().
No difference in generated code for 2- and 4-level code. There's a small
improvement for the 3-level case.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/mm/shadow/multi.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c
index cc5e1c50d2..775cf4c39b 100644
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -2057,22 +2057,24 @@ static DEFINE_PER_CPU(guest_l1e_t,
trace_emulate_write_val);
static void cf_check trace_emulate_write_val(
const void *ptr, unsigned long vaddr, const void *src, unsigned int bytes)
{
- if ( bytes > sizeof(this_cpu(trace_emulate_write_val)) )
- bytes = sizeof(this_cpu(trace_emulate_write_val));
+ guest_l1e_t *pval = &this_cpu(trace_emulate_write_val);
+
+ if ( bytes > sizeof(*pval) )
+ bytes = sizeof(*pval);
#if GUEST_PAGING_LEVELS == 3
if ( vaddr == this_cpu(trace_emulate_initial_va) )
- memcpy(&this_cpu(trace_emulate_write_val), src, bytes);
+ memcpy(pval, src, bytes);
else if ( (vaddr & ~(GUEST_PTE_SIZE - 1)) ==
this_cpu(trace_emulate_initial_va) )
{
TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_EMULATE_FULL_PT);
- memcpy(&this_cpu(trace_emulate_write_val),
+ memcpy(pval,
(typeof(ptr))((unsigned long)ptr & ~(GUEST_PTE_SIZE - 1)),
GUEST_PTE_SIZE);
}
#else
- memcpy(&this_cpu(trace_emulate_write_val), src, bytes);
+ memcpy(pval, src, bytes);
#endif
}
#endif /* CONFIG_TRACEBUFFER */
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |