# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 9efe7eb108e104d2f78daed2516ead08a33e7e81
# Parent ecc20905cde3e0376f0308ec475297fff9255852
The dom0_ops implementation wasn't matching the interface definition,
leading to ill messages when X starts up (and potentially to other
problems). The attached patch fixes that. However, it also points out
that there is a potential disagreement between the dom0_ops interface
and the internal MTRR interface - the former expects an unsigned
register number from the domain, the latter wants a signed one and does
a lookup when it's negative. I would think that the lookup code should
just be ripped out of xen/arch/x86/mtrr/main.c.
Signed-off-by: Jan Beulich <JBeulich@xxxxxxxxxx>
diff -r ecc20905cde3 -r 9efe7eb108e1 xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c Wed Jan 4 17:47:11 2006
+++ b/xen/arch/x86/dom0_ops.c Wed Jan 4 17:51:38 2006
@@ -103,12 +103,27 @@
op->u.add_memtype.nr_pfns,
op->u.add_memtype.type,
1);
+ if (ret > 0)
+ {
+ (void)__put_user(0, &u_dom0_op->u.add_memtype.handle);
+ (void)__put_user(ret, &u_dom0_op->u.add_memtype.reg);
+ ret = 0;
+ }
}
break;
case DOM0_DEL_MEMTYPE:
{
- ret = mtrr_del_page(op->u.del_memtype.reg, 0, 0);
+ if (op->u.del_memtype.handle == 0
+ /* mtrr/main.c otherwise does a lookup */
+ && (int)op->u.del_memtype.reg >= 0)
+ {
+ ret = mtrr_del_page(op->u.del_memtype.reg, 0, 0);
+ if (ret > 0)
+ ret = 0;
+ }
+ else
+ ret = -EINVAL;
}
break;
@@ -179,7 +194,7 @@
memcpy(pi->hw_cap, boot_cpu_data.x86_capability, NCAPINTS*4);
ret = 0;
if ( copy_to_user(u_dom0_op, op, sizeof(*op)) )
- ret = -EFAULT;
+ ret = -EFAULT;
}
break;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|