From: awilliam@xenbuild.aw Date: Thu, 15 Jun 2006 15:10:14 +0000 (-0600) Subject: [IA64] work around for skbuff_ctor() on non-privileged domain X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15961 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=42162a97c0cb8b9de57e28bd9b48575a51b92056;p=xen.git [IA64] work around for skbuff_ctor() on non-privileged domain populate physmap/increase reservation hypercall fail with extent order > 0 on non-privileged domain. Signed-off-by: Isaku Yamahata --- diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c index 58e30466a3..a406273513 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c @@ -76,6 +76,15 @@ ia64_xenmem_reservation_op(unsigned long op, } 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 long gpfn, unsigned int extent_order, }; 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; }