]> xenbits.xensource.com Git - people/aperard/xtf.git/commitdiff
pv: Register callbacks in a loop
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 29 Jun 2020 13:15:22 +0000 (14:15 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 29 Jun 2020 13:15:27 +0000 (14:15 +0100)
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
arch/x86/pv/traps.c

index e70a680ead98fd37650bbdeaf11b9c1ba4dbebdd..0ce5ea83dc6d9ebce7f67960e4aafc7781340926 100644 (file)
@@ -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)