Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: [PATCH v2] port/xen: map memory directly in privcmd PRIVCMD_MMAPBATCH



>>>>> "Roger" == Roger Pau Monne <roger.pau%citrix.com@localhost> writes:

    Roger> Manuel Bouyer wrote:
    >> On Tue, Jun 26, 2012 at 10:47:05AM +0100, Roger Pau Monne wrote:
    >>>> informations. I think qemu should instruct the kernel that
    >>>> things changed.
    >>> With the proposed patch, the kernel doesn't store the gfns
    >>> anymore, since the mapping is done directly, and no pagefault
    >>> handler is set.  So the information (or the lack of it) stored
    >>> by the NetBSD kernel is correct.
    >> 
    >> OK. As this is a mapping which isn't consuming dom0 memory I
    >> guess it doesn't matter much that this area is not paged. But I
    >> think PRIVCMD_MMAP and PRIVCMD_MMAPBATCH should behave the
    >> same. I don't like much the idea of a mapping in user area that
    >> is unknown to UVM though, can't you make qemu unmap and remap the
    >> area with the right information ?

    Roger> Yes, I agree, I will resubmit a patch that changes both
    Roger> PRIVCMD_MMAPBATCH and PRIVCMD_MMAP to direct mapping.

It just occurred to me that if all that's required is a fault-in ( to
trigger the bogus backing mapping fault handler ) at ioctl time, the
following patch (untested) should do the trick as a temporary shim.

It doesn't solve qemu's badness though.

Does it work ?

Cheers,

-- 
Cherry

*** privcmd.c.~1.43.~   Thu Jun 16 01:21:50 2011
--- privcmd.c   Wed Jun 27 05:10:26 2012
***************
*** 586,591 ****
--- 586,601 ----
                printf("uvm_map didn't give us back our vm space\n");
                return EINVAL;
        }
+ 
+       /* Wire in mapping */
+       error = uvm_fault_wire(map, newstart, newstart + size, prot, 0); 
+       if (error) {
+               if (obj)
+                       obj->uobj.pgops->pgo_detach(&obj->uobj);
+               return error;
+       }
+ 
+       
        return 0;
  }
  


Home | Main Index | Thread Index | Old Index