From 7ed8959cd366c14a65e3cb46782663c8d8de413c Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Mon, 29 Jun 2020 14:15:22 +0100 Subject: [PATCH] pv: Register callbacks in a loop Signed-off-by: Andrew Cooper --- arch/x86/pv/traps.c | 49 +++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/arch/x86/pv/traps.c b/arch/x86/pv/traps.c index e70a680..0ce5ea8 100644 --- a/arch/x86/pv/traps.c +++ b/arch/x86/pv/traps.c @@ -119,38 +119,31 @@ static void init_callbacks(void) if ( rc ) panic("Failed to set trap table: %d\n", rc); - xen_callback_register_t cb; - - cb = (xen_callback_register_t) { - .type = CALLBACKTYPE_event, - .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_EVTCHN)), - }; - - rc = hypercall_register_callback(&cb); - if ( rc ) - panic("Failed to register evtchn callback: %d\n", rc); - + static const xen_callback_register_t cb[] = { + { + .type = CALLBACKTYPE_event, + .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_EVTCHN)), + }, #ifdef __x86_64__ - cb = (xen_callback_register_t) { - .type = CALLBACKTYPE_syscall, - .flags = CALLBACKF_mask_events, - .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_SYSCALL)), - }; - - rc = hypercall_register_callback(&cb); - if ( rc ) - panic("Failed to register syscall callback: %d\n", rc); + { + .type = CALLBACKTYPE_syscall, + .flags = CALLBACKF_mask_events, + .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_SYSCALL)), + }, #endif - - cb = (xen_callback_register_t) { - .type = CALLBACKTYPE_syscall32, - .flags = CALLBACKF_mask_events, - .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_SYSCALL)), + { + .type = CALLBACKTYPE_syscall32, + .flags = CALLBACKF_mask_events, + .address = INIT_XEN_CALLBACK(__KERN_CS, _u(entry_SYSCALL)), + }, }; - rc = hypercall_register_callback(&cb); - if ( rc ) - panic("Failed to register syscall32 callback: %d\n", rc); + for ( unsigned int i = 0; i < ARRAY_SIZE(cb); ++i ) + { + rc = hypercall_register_callback(&cb[i]); + if ( rc ) + panic("Failed to register callback[%u]: %d\n", i, rc); + } } void arch_init_traps(void) -- 2.39.5