svn commit: r262139 - head/sys/amd64/vmm/io
Neel Natu
neel at FreeBSD.org
Mon Feb 17 22:57:52 UTC 2014
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++)
More information about the svn-src-all
mailing list