[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Update __vmread()
# HG changeset patch # User lcy@xxxxxxxxxxxxxxxxxxxxxxxx # Node ID df589c4cf1ad7c1c9edf2ce42859ba059c3e448d # Parent dfaf788ab18cdd92f626380ddd97a64fa92abbcd Update __vmread() To make it not to break the stack. Signed-off-by: Jun Nakajima <jun.nakajima@xxxxxxxxx> Signed-off-by: Chengyuan Li <chengyuan.li@xxxxxxxxx> diff -r dfaf788ab18c -r df589c4cf1ad xen/include/asm-x86/vmx.h --- a/xen/include/asm-x86/vmx.h Fri Aug 26 20:47:16 2005 +++ b/xen/include/asm-x86/vmx.h Sun Aug 28 06:55:37 2005 @@ -275,7 +275,9 @@ return 0; } -static inline int __vmread (unsigned long field, void *value) +#define __vmread(x, ptr) ___vmread((x), (ptr), sizeof(*(ptr))) + +static always_inline int ___vmread (const unsigned long field, void *ptr, const int size) { unsigned long eflags; unsigned long ecx = 0; @@ -286,7 +288,23 @@ : "a" (field) : "memory"); - *((long *) value) = ecx; + switch (size) { + case 1: + *((u8 *) (ptr)) = ecx; + break; + case 2: + *((u16 *) (ptr)) = ecx; + break; + case 4: + *((u32 *) (ptr)) = ecx; + break; + case 8: + *((u64 *) (ptr)) = ecx; + break; + default: + domain_crash_synchronous(); + break; + } __save_flags(eflags); if (eflags & X86_EFLAGS_ZF || eflags & X86_EFLAGS_CF) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |