diff options
author | Tim Deegan <tim.deegan@xensource.com> | 2006-10-05 16:48:28 +0100 |
---|---|---|
committer | Tim Deegan <tim.deegan@xensource.com> | 2006-10-05 16:48:28 +0100 |
commit | 3930ae7abdded5cdde5f9ecf38956ddc1a724031 (patch) | |
tree | 96f272554e341f31e5c429000dbf627ba7d59cb6 | |
parent | 92bc3792bbdda655aec173c68cb77068a3a464a9 (diff) | |
parent | 8ee614278c2d058881db620b1fa065566e6fcf50 (diff) | |
download | xen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.tar.gz xen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.tar.bz2 xen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.zip |
Merge
-rw-r--r-- | tools/python/xen/xend/XendDomainInfo.py | 2 | ||||
-rw-r--r-- | tools/python/xen/xm/main.py | 5 | ||||
-rw-r--r-- | xen/arch/x86/Makefile | 17 | ||||
-rw-r--r-- | xen/arch/x86/microcode.c | 11 | ||||
-rw-r--r-- | xen/arch/x86/platform_hypercall.c | 16 | ||||
-rw-r--r-- | xen/arch/x86/x86_32/asm-offsets.c | 1 | ||||
-rw-r--r-- | xen/arch/x86/x86_64/asm-offsets.c | 1 | ||||
-rw-r--r-- | xen/include/asm-x86/multicall.h | 2 |
8 files changed, 32 insertions, 23 deletions
diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 230479d7c0..42e3a50dd7 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1745,7 +1745,7 @@ class XendDomainInfo: blcfg = None # FIXME: this assumes that we want to use the first disk device for (n,c) in self.info['device']: - if not n or not c or n != "vbd": + if not n or not c or not(n in ["vbd", "tap"]): continue disk = sxp.child_value(c, "uname") if disk is None: diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 1fb4cc2061..5239ae4156 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -291,6 +291,11 @@ all_commands = (domain_commands + host_commands + scheduler_commands + def cmdHelp(cmd): """Print help for a specific subcommand.""" + for fc in SUBCOMMAND_HELP.keys(): + if fc[:len(cmd)] == cmd: + cmd = fc + break + try: args, desc = SUBCOMMAND_HELP[cmd] except KeyError: diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index 8b008562e5..e303ec7b59 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -53,18 +53,18 @@ $(TARGET)-syms: boot/$(TARGET_SUBARCH).o $(ALL_OBJS) xen.lds $(MAKE) -f $(BASEDIR)/Rules.mk $(BASEDIR)/common/symbols-dummy.o $(LD) $(LDFLAGS) -T xen.lds -N \ boot/$(TARGET_SUBARCH).o $(ALL_OBJS) \ - $(BASEDIR)/common/symbols-dummy.o -o $@ - $(NM) -n $@ | $(BASEDIR)/tools/symbols >$(BASEDIR)/xen-syms.S - $(MAKE) -f $(BASEDIR)/Rules.mk $(BASEDIR)/xen-syms.o + $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0 + $(NM) -n $(@D)/.$(@F).0 | $(BASEDIR)/tools/symbols >$(@D)/.$(@F).0.S + $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o $(LD) $(LDFLAGS) -T xen.lds -N \ boot/$(TARGET_SUBARCH).o $(ALL_OBJS) \ - $(BASEDIR)/xen-syms.o -o $@ - $(NM) -n $@ | $(BASEDIR)/tools/symbols >$(BASEDIR)/xen-syms.S - $(MAKE) -f $(BASEDIR)/Rules.mk $(BASEDIR)/xen-syms.o + $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1 + $(NM) -n $(@D)/.$(@F).1 | $(BASEDIR)/tools/symbols >$(@D)/.$(@F).1.S + $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o $(LD) $(LDFLAGS) -T xen.lds -N \ boot/$(TARGET_SUBARCH).o $(ALL_OBJS) \ - $(BASEDIR)/xen-syms.o -o $@ - rm -f $(BASEDIR)/xen-syms.S $(BASEDIR)/xen-syms.o + $(@D)/.$(@F).1.o -o $@ + rm -f $(@D)/.$(@F).[0-9]* asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c $(HDRS) $(CC) $(CFLAGS) -S -o $@ $< @@ -78,3 +78,4 @@ boot/mkelf32: boot/mkelf32.c .PHONY: clean clean:: rm -f asm-offsets.s xen.lds boot/*.o boot/*~ boot/core boot/mkelf32 + rm -f $(BASEDIR)/.xen-syms.[0-9]* diff --git a/xen/arch/x86/microcode.c b/xen/arch/x86/microcode.c index 9c4b4d66f8..3dcac7d124 100644 --- a/xen/arch/x86/microcode.c +++ b/xen/arch/x86/microcode.c @@ -455,7 +455,7 @@ out: return error; } -int microcode_update(void *buf, unsigned long len) +int microcode_update(XEN_GUEST_HANDLE(void) buf, unsigned long len) { int ret; @@ -464,10 +464,15 @@ int microcode_update(void *buf, unsigned long len) return -EINVAL; } + if (len != (typeof(user_buffer_size))len) { + printk(KERN_ERR "microcode: too much data\n"); + return -E2BIG; + } + mutex_lock(µcode_mutex); - user_buffer = (void __user *) buf; - user_buffer_size = (int) len; + user_buffer = buf.p; + user_buffer_size = len; ret = do_microcode_update(); diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c index 098c847112..33be6746b3 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -58,12 +58,13 @@ long do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op) op->u.add_memtype.nr_mfns, op->u.add_memtype.type, 1); - if ( ret > 0 ) + if ( ret >= 0 ) { op->u.add_memtype.handle = 0; op->u.add_memtype.reg = ret; - (void)copy_to_guest(u_xenpf_op, op, 1); - ret = 0; + ret = copy_to_guest(u_xenpf_op, op, 1) ? -EFAULT : 0; + if ( ret != 0 ) + mtrr_del_page(ret, 0, 0); } } break; @@ -75,7 +76,7 @@ long do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op) && (int)op->u.del_memtype.reg >= 0) { ret = mtrr_del_page(op->u.del_memtype.reg, 0, 0); - if (ret > 0) + if ( ret > 0 ) ret = 0; } else @@ -96,16 +97,15 @@ long do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op) op->u.read_memtype.mfn = mfn; op->u.read_memtype.nr_mfns = nr_mfns; op->u.read_memtype.type = type; - (void)copy_to_guest(u_xenpf_op, op, 1); - ret = 0; + ret = copy_to_guest(u_xenpf_op, op, 1) ? -EFAULT : 0; } } break; case XENPF_microcode_update: { - extern int microcode_update(void *buf, unsigned long len); - ret = microcode_update(op->u.microcode.data.p, + extern int microcode_update(XEN_GUEST_HANDLE(void), unsigned long len); + ret = microcode_update(op->u.microcode.data, op->u.microcode.length); } break; diff --git a/xen/arch/x86/x86_32/asm-offsets.c b/xen/arch/x86/x86_32/asm-offsets.c index 3a994650ca..36197ef9e8 100644 --- a/xen/arch/x86/x86_32/asm-offsets.c +++ b/xen/arch/x86/x86_32/asm-offsets.c @@ -118,7 +118,6 @@ void __dummy__(void) OFFSET(MULTICALL_arg3, struct multicall_entry, args[3]); OFFSET(MULTICALL_arg4, struct multicall_entry, args[4]); OFFSET(MULTICALL_arg5, struct multicall_entry, args[5]); - OFFSET(MULTICALL_arg6, struct multicall_entry, args[6]); OFFSET(MULTICALL_result, struct multicall_entry, result); BLANK(); diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index 6744e6c9e2..5e95815678 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -112,7 +112,6 @@ void __dummy__(void) OFFSET(MULTICALL_arg3, struct multicall_entry, args[3]); OFFSET(MULTICALL_arg4, struct multicall_entry, args[4]); OFFSET(MULTICALL_arg5, struct multicall_entry, args[5]); - OFFSET(MULTICALL_arg6, struct multicall_entry, args[6]); OFFSET(MULTICALL_result, struct multicall_entry, result); BLANK(); diff --git a/xen/include/asm-x86/multicall.h b/xen/include/asm-x86/multicall.h index 5fe37176fa..1ce7866c3e 100644 --- a/xen/include/asm-x86/multicall.h +++ b/xen/include/asm-x86/multicall.h @@ -16,7 +16,7 @@ " movq "STR(MULTICALL_op)"(%0),%%rax; " \ " cmpq $("STR(NR_hypercalls)"),%%rax; " \ " jae 2f; " \ - " leaq "STR(hypercall_table)"(%%rip),%%rdi; "\ + " leaq hypercall_table(%%rip),%%rdi; " \ " leaq (%%rdi,%%rax,8),%%rax; " \ " movq "STR(MULTICALL_arg0)"(%0),%%rdi; " \ " movq "STR(MULTICALL_arg1)"(%0),%%rsi; " \ |