Author: neel
Date: Mon Feb 17 22:57:51 2014
New Revision: 262139
URL: http://svnweb.freebsd.org/changeset/base/262139

Log:
  Use spinlocks to lock accesses to the vioapic.
  
  This is necessary because if the vlapic is configured in x2apic mode the
  vioapic_process_eoi() function is called inside the critical section
  established by vm_run().

Modified:
  head/sys/amd64/vmm/io/vioapic.c

Modified: head/sys/amd64/vmm/io/vioapic.c
==============================================================================
--- head/sys/amd64/vmm/io/vioapic.c     Mon Feb 17 22:43:07 2014        
(r262138)
+++ head/sys/amd64/vmm/io/vioapic.c     Mon Feb 17 22:57:51 2014        
(r262139)
@@ -64,8 +64,8 @@ struct vioapic {
        } rtbl[REDIR_ENTRIES];
 };
 
-#define        VIOAPIC_LOCK(vioapic)           mtx_lock(&((vioapic)->mtx))
-#define        VIOAPIC_UNLOCK(vioapic)         mtx_unlock(&((vioapic)->mtx))
+#define        VIOAPIC_LOCK(vioapic)           mtx_lock_spin(&((vioapic)->mtx))
+#define        VIOAPIC_UNLOCK(vioapic)         
mtx_unlock_spin(&((vioapic)->mtx))
 #define        VIOAPIC_LOCKED(vioapic)         mtx_owned(&((vioapic)->mtx))
 
 static MALLOC_DEFINE(M_VIOAPIC, "vioapic", "bhyve virtual ioapic");
@@ -476,7 +476,7 @@ vioapic_init(struct vm *vm)
        vioapic = malloc(sizeof(struct vioapic), M_VIOAPIC, M_WAITOK | M_ZERO);
 
        vioapic->vm = vm;
-       mtx_init(&vioapic->mtx, "vioapic lock", NULL, MTX_DEF);
+       mtx_init(&vioapic->mtx, "vioapic lock", NULL, MTX_SPIN);
 
        /* Initialize all redirection entries to mask all interrupts */
        for (i = 0; i < REDIR_ENTRIES; i++)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to