--- /home/jbeulich/src/xen/unstable/2005-12-20/xen/arch/x86/dom0_ops.c 2005-12-05 10:24:02.000000000 +0100 +++ 2005-12-20/xen/arch/x86/dom0_ops.c 2006-01-04 17:38:11.000000000 +0100 @@ -102,12 +102,27 @@ long arch_do_dom0_op(dom0_op_t *op, dom0 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;