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

[Xen-devel] [PATCH] kexec: don't disable interrupts when acquiring load/unload lock



This doesn't appear to have served any purpose other than causing
map_pages_to_xen() to be (incorrectly) invoked with interrupts
disabled. In particular, serialization against actual kexec-ing is done
without this lock being involved. Clarify the scope of the lock at once
by making it local to do_kexec_op_internal().

Once at it, also drop a pointless initializer.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -55,8 +55,6 @@ static xen_kexec_image_t kexec_image[KEX
 
 static unsigned long kexec_flags = 0; /* the lowest bits are for 
KEXEC_IMAGE... */
 
-static spinlock_t kexec_lock = SPIN_LOCK_UNLOCKED;
-
 static unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
 static size_t vmcoreinfo_size = 0;
 
@@ -851,10 +849,9 @@ static int do_kexec_op_internal(unsigned
                                 XEN_GUEST_HANDLE_PARAM(void) uarg,
                                 bool_t compat)
 {
-    unsigned long flags;
-    int ret = -EINVAL;
+    static DEFINE_SPINLOCK(kexec_lock);
+    int ret = xsm_kexec(XSM_PRIV);
 
-    ret = xsm_kexec(XSM_PRIV);
     if ( ret )
         return ret;
 
@@ -868,7 +865,7 @@ static int do_kexec_op_internal(unsigned
         break;
     case KEXEC_CMD_kexec_load:
     case KEXEC_CMD_kexec_unload:
-        spin_lock_irqsave(&kexec_lock, flags);
+        spin_lock(&kexec_lock);
         if (!test_bit(KEXEC_FLAG_IN_PROGRESS, &kexec_flags))
         {
                 if (compat)
@@ -876,7 +873,7 @@ static int do_kexec_op_internal(unsigned
                 else
                         ret = kexec_load_unload(op, uarg);
         }
-        spin_unlock_irqrestore(&kexec_lock, flags);
+        spin_unlock(&kexec_lock);
         break;
     case KEXEC_CMD_kexec:
         ret = kexec_exec(uarg);



Attachment: kexec-locking.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

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