# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID e9ad96356afba6e2a7c30fcff7efef008345723a # Parent 49b93835c261a6e74c7c51c16be9269511732d43 work around for skbuff_ctor() on non-privileged domain populate physmap/increase reservation hypercall fail with extent order > 0 on non-privileged domain. PATCHNAME: work_around_for_skbuff_ctor Signed-off-by: Isaku Yamahata diff -r 49b93835c261 -r e9ad96356afb linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Thu Jun 15 18:47:31 2006 +0900 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Thu Jun 15 19:35:49 2006 +0900 @@ -76,6 +76,15 @@ ia64_xenmem_reservation_op(unsigned long } break; } + if (tmp_ret == 0) { + //XXX dirty work around for skbuff_ctor() + // of a non-privileged domain, + if ((op == XENMEM_increase_reservation || + op == XENMEM_populate_physmap) && + !(xen_start_info->flags & SIF_PRIVILEGED) && + reservation.extent_order > 0) + return ret; + } frame_list += tmp_ret; nr_extents -= tmp_ret; ret += tmp_ret; @@ -165,7 +174,12 @@ HYPERVISOR_populate_physmap(unsigned lon }; set_xen_guest_handle(reservation.extent_start, &gpfn); ret = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation); - BUG_ON(ret != 1); + // it may fail on non-privileged domain with extent_order > 0. + BUG_ON(ret != 1 && + !(ret == 0 && !(xen_start_info->flags & SIF_PRIVILEGED) && + extent_order > 0)); + if (ret != 1) + return -EINVAL;//XXX return 0; }