aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Deegan <tim.deegan@xensource.com>2006-10-05 16:48:28 +0100
committerTim Deegan <tim.deegan@xensource.com>2006-10-05 16:48:28 +0100
commit3930ae7abdded5cdde5f9ecf38956ddc1a724031 (patch)
tree96f272554e341f31e5c429000dbf627ba7d59cb6
parent92bc3792bbdda655aec173c68cb77068a3a464a9 (diff)
parent8ee614278c2d058881db620b1fa065566e6fcf50 (diff)
downloadxen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.tar.gz
xen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.tar.bz2
xen-3930ae7abdded5cdde5f9ecf38956ddc1a724031.zip
Merge
-rw-r--r--tools/python/xen/xend/XendDomainInfo.py2
-rw-r--r--tools/python/xen/xm/main.py5
-rw-r--r--xen/arch/x86/Makefile17
-rw-r--r--xen/arch/x86/microcode.c11
-rw-r--r--xen/arch/x86/platform_hypercall.c16
-rw-r--r--xen/arch/x86/x86_32/asm-offsets.c1
-rw-r--r--xen/arch/x86/x86_64/asm-offsets.c1
-rw-r--r--xen/include/asm-x86/multicall.h2
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(&microcode_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; " \