[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 3/3] x86/pv: Minor tweaks to {, compat_}register_guest_callback()



 * Being internal functions, use int rather than long for the return value
 * Factor out pv_vcpu into a local variable.  Reduces code volume, and removes
   some split lines.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/pv/callback.c | 48 ++++++++++++++++++++++------------------------
 1 file changed, 23 insertions(+), 25 deletions(-)

diff --git a/xen/arch/x86/pv/callback.c b/xen/arch/x86/pv/callback.c
index 866c835..362197b 100644
--- a/xen/arch/x86/pv/callback.c
+++ b/xen/arch/x86/pv/callback.c
@@ -71,10 +71,11 @@ static void unregister_guest_nmi_callback(void)
     memset(t, 0, sizeof(*t));
 }
 
-static long register_guest_callback(struct callback_register *reg)
+static int register_guest_callback(struct callback_register *reg)
 {
-    long ret = 0;
     struct vcpu *curr = current;
+    struct pv_vcpu *pv = &curr->arch.pv_vcpu;
+    int ret = 0;
 
     if ( !is_canonical_address(reg->address) )
         return -EINVAL;
@@ -82,11 +83,11 @@ static long register_guest_callback(struct 
callback_register *reg)
     switch ( reg->type )
     {
     case CALLBACKTYPE_event:
-        curr->arch.pv_vcpu.event_callback_eip    = reg->address;
+        pv->event_callback_eip = reg->address;
         break;
 
     case CALLBACKTYPE_failsafe:
-        curr->arch.pv_vcpu.failsafe_callback_eip = reg->address;
+        pv->failsafe_callback_eip = reg->address;
         if ( reg->flags & CALLBACKF_mask_events )
             curr->arch.vgc_flags |= VGCF_failsafe_disables_events;
         else
@@ -94,7 +95,7 @@ static long register_guest_callback(struct callback_register 
*reg)
         break;
 
     case CALLBACKTYPE_syscall:
-        curr->arch.pv_vcpu.syscall_callback_eip  = reg->address;
+        pv->syscall_callback_eip = reg->address;
         if ( reg->flags & CALLBACKF_mask_events )
             curr->arch.vgc_flags |= VGCF_syscall_disables_events;
         else
@@ -102,15 +103,13 @@ static long register_guest_callback(struct 
callback_register *reg)
         break;
 
     case CALLBACKTYPE_syscall32:
-        curr->arch.pv_vcpu.syscall32_callback_eip = reg->address;
-        curr->arch.pv_vcpu.syscall32_disables_events =
-            !!(reg->flags & CALLBACKF_mask_events);
+        pv->syscall32_callback_eip = reg->address;
+        pv->syscall32_disables_events = reg->flags & CALLBACKF_mask_events;
         break;
 
     case CALLBACKTYPE_sysenter:
-        curr->arch.pv_vcpu.sysenter_callback_eip = reg->address;
-        curr->arch.pv_vcpu.sysenter_disables_events =
-            !!(reg->flags & CALLBACKF_mask_events);
+        pv->sysenter_callback_eip = reg->address;
+        pv->sysenter_disables_events = reg->flags & CALLBACKF_mask_events;
         break;
 
     case CALLBACKTYPE_nmi:
@@ -214,23 +213,24 @@ long do_set_callbacks(unsigned long event_address,
     return 0;
 }
 
-static long compat_register_guest_callback(struct compat_callback_register 
*reg)
+static int compat_register_guest_callback(struct compat_callback_register *reg)
 {
-    long ret = 0;
     struct vcpu *curr = current;
+    struct pv_vcpu *pv = &curr->arch.pv_vcpu;
+    int ret = 0;
 
     fixup_guest_code_selector(curr->domain, reg->address.cs);
 
     switch ( reg->type )
     {
     case CALLBACKTYPE_event:
-        curr->arch.pv_vcpu.event_callback_cs     = reg->address.cs;
-        curr->arch.pv_vcpu.event_callback_eip    = reg->address.eip;
+        pv->event_callback_cs  = reg->address.cs;
+        pv->event_callback_eip = reg->address.eip;
         break;
 
     case CALLBACKTYPE_failsafe:
-        curr->arch.pv_vcpu.failsafe_callback_cs  = reg->address.cs;
-        curr->arch.pv_vcpu.failsafe_callback_eip = reg->address.eip;
+        pv->failsafe_callback_cs  = reg->address.cs;
+        pv->failsafe_callback_eip = reg->address.eip;
         if ( reg->flags & CALLBACKF_mask_events )
             curr->arch.vgc_flags |= VGCF_failsafe_disables_events;
         else
@@ -238,17 +238,15 @@ static long compat_register_guest_callback(struct 
compat_callback_register *reg)
         break;
 
     case CALLBACKTYPE_syscall32:
-        curr->arch.pv_vcpu.syscall32_callback_cs     = reg->address.cs;
-        curr->arch.pv_vcpu.syscall32_callback_eip    = reg->address.eip;
-        curr->arch.pv_vcpu.syscall32_disables_events =
-            (reg->flags & CALLBACKF_mask_events) != 0;
+        pv->syscall32_callback_cs     = reg->address.cs;
+        pv->syscall32_callback_eip    = reg->address.eip;
+        pv->syscall32_disables_events = reg->flags & CALLBACKF_mask_events;
         break;
 
     case CALLBACKTYPE_sysenter:
-        curr->arch.pv_vcpu.sysenter_callback_cs     = reg->address.cs;
-        curr->arch.pv_vcpu.sysenter_callback_eip    = reg->address.eip;
-        curr->arch.pv_vcpu.sysenter_disables_events =
-            (reg->flags & CALLBACKF_mask_events) != 0;
+        pv->sysenter_callback_cs     = reg->address.cs;
+        pv->sysenter_callback_eip    = reg->address.eip;
+        pv->sysenter_disables_events = reg->flags & CALLBACKF_mask_events;
         break;
 
     case CALLBACKTYPE_nmi:
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.