summaryrefslogtreecommitdiffstats
path: root/sys/amd64/vmm/vmm_lapic.c
diff options
context:
space:
mode:
authortychon <tychon@FreeBSD.org>2014-04-15 17:06:26 +0000
committertychon <tychon@FreeBSD.org>2014-04-15 17:06:26 +0000
commitbbe78c2d7227b0f1369125ca429b99bd85d2115f (patch)
tree63f3b13bf752f05f0fc9a9235ad003eb67ad0f37 /sys/amd64/vmm/vmm_lapic.c
parente9d7536faef5ec74323d67465fa0e980b7a8c1fa (diff)
downloadFreeBSD-src-bbe78c2d7227b0f1369125ca429b99bd85d2115f.zip
FreeBSD-src-bbe78c2d7227b0f1369125ca429b99bd85d2115f.tar.gz
Local APIC access via 32-bit naturally-aligned loads is merely
suggested in the SDM. Since some OSes have implemented otherwise don't be too rigorous in enforcing it. Approved by: grehan (co-mentor)
Diffstat (limited to 'sys/amd64/vmm/vmm_lapic.c')
-rw-r--r--sys/amd64/vmm/vmm_lapic.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/amd64/vmm/vmm_lapic.c b/sys/amd64/vmm/vmm_lapic.c
index 640c779..fa9832e 100644
--- a/sys/amd64/vmm/vmm_lapic.c
+++ b/sys/amd64/vmm/vmm_lapic.c
@@ -230,10 +230,12 @@ lapic_mmio_read(void *vm, int cpu, uint64_t gpa, uint64_t *rval, int size,
off = gpa - DEFAULT_APIC_BASE;
/*
- * Memory mapped local apic accesses must be 4 bytes wide and
- * aligned on a 16-byte boundary.
+ * Memory mapped local apic accesses should be aligned on a
+ * 16-byte boundary. They are also suggested to be 4 bytes
+ * wide, alas not all OSes follow suggestions.
*/
- if (size != 4 || off & 0xf)
+ off &= ~3;
+ if (off & 0xf)
return (EINVAL);
vlapic = vm_lapic(vm, cpu);
OpenPOWER on IntegriCloud