diff options
author | tychon <tychon@FreeBSD.org> | 2014-04-15 17:06:26 +0000 |
---|---|---|
committer | tychon <tychon@FreeBSD.org> | 2014-04-15 17:06:26 +0000 |
commit | bbe78c2d7227b0f1369125ca429b99bd85d2115f (patch) | |
tree | 63f3b13bf752f05f0fc9a9235ad003eb67ad0f37 /sys/amd64/vmm/vmm_lapic.c | |
parent | e9d7536faef5ec74323d67465fa0e980b7a8c1fa (diff) | |
download | FreeBSD-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.c | 8 |
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); |