xen/arm: domain: Fix MISRA C 2012 Rule 8.7 violation

The function idle_loop() is referenced only in domain.c.
Change its linkage from external to internal by adding the storage-class
specifier static to its definitions.

Add the function as a 'fake' input operand to the inline assembly statement,
to make the compiler aware that the function is used.
Fake means that the function is not actually used as an operand by the asm code.
That is because there is not a suitable gcc arm32 asm constraint for labels.

Declare return_to_new_vcpu32() and return_to_new_vcpu64() that are also
referenced by this inline asm statement.

Also, this patch resolves indirectly a MISRA C 2012 Rule 8.4 violation warning.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
[add noreturn]
Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
Xenia Ragiadakou authored and Stefano Stabellini committed 2022-07-29 16:01:10 -07:00
1 parent 7451fdeb69
commit 2ce6a719a0
2 files changed
+5 -2

No files matched your search

+4 -1
View File
@@ -63,7 +63,7 @@ static void do_idle(void)
rcu_idle_exit(cpu);
}
void idle_loop(void)
static void noreturn idle_loop(void)
{
unsigned int cpu = smp_processor_id();
@@ -331,6 +331,9 @@ static void schedule_tail(struct vcpu *prev)
update_vcpu_system_time(current);
}
extern void noreturn return_to_new_vcpu32(void);
extern void noreturn return_to_new_vcpu64(void);
static void continue_new_vcpu(struct vcpu *prev)
{
current->arch.actlr = READ_SYSREG(ACTLR_EL1);
+1 -1
View File
@@ -45,7 +45,7 @@ static inline struct cpu_info *get_cpu_info(void)
#define guest_cpu_user_regs() (&get_cpu_info()->guest_cpu_user_regs)
#define switch_stack_and_jump(stack, fn) do { \
asm volatile ("mov sp,%0; b " STR(fn) : : "r" (stack) : "memory" ); \
asm volatile ("mov sp,%0; b " STR(fn) : : "r" (stack), "X" (fn) : "memory" ); \
unreachable(); \
} while ( false )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.