[IA64] work around for skbuff_ctor() on non-privileged domain
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 15 Jun 2006 15:10:14 +0000 (09:10 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 15 Jun 2006 15:10:14 +0000 (09:10 -0600)
populate physmap/increase reservation hypercall fail with
extent order > 0 on non-privileged domain.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c

index 58e30466a378c43f2e10504104c55e86726d3b8b..a4062735136b2d890204577cdae279fadb51db4f 100644 (file)
@@ -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;
 }