>>>>> "Manuel" == Manuel Bouyer <bouyer%antioche.eu.org@localhost> writes:
Manuel> On Tue, Sep 22, 2015 at 08:58:21AM +0530, Cherry G. Mathew wrote:
>> Hi,
>>
>> Here's a bunch of drm patches for dom0. Works on my ivybridge
>> with dom0_mem=2046M
>>
>> They will *not* work if you allocate more ram than your h/w dma
>> can address.
Manuel> I think it's worse than that: it won't work if you have more
Manuel> physical RAM than your HW DMA can address. It may work at
Manuel> boot time but not later. There is no guarantee that your
Manuel> dom0 has memory in the low addresses. In fact, during the
Manuel> dom0 life there will be machine pages deallocated and
Manuel> reallocated (in the driver backends for example), and these
Manuel> pages may be in high memory.
Oh, oops, I'd forgotten that the hypervisor would re-use the
rest. Hm. In any case, I'd be keen to see peoples' boot up dmesg on
other hardware (see below):
Manuel> For this to work, pages with PA constraints should be
Manuel> allocated by the Xen backend, which can request memory from
Manuel> the hypervisor with the right addresses. But for this the
Manuel> whole stuff with freelist has to be redone to get memory
Manuel> from a port-specific allocator instead of freelists and this
Manuel> probably requires changes to UVM, and better integration
Manuel> with bus_dma(9) (the fundamental problem being that the drm
Manuel> code does DMA without using bus_dma(9)). This will help
Manuel> other non-x86 ports too. I don't want to be rude (and I'm
Manuel> glad you're working on this) but I think your patch goes in
Manuel> the wrong direction.
I understand this well. I've attached a hack to override pgo_get/pgo_put
with ditto copies from uvm_aobj.c - it's pretty horrible, but I just
want to weed out the p2m issues (for esp. the hack in the Xen
pmap_enter()/pmap_kenter() code that assumes ma == pa for outside of
tracked pages) before getting all "architectural".
My immediate problem is that the cursor doesn't display on my
hardware. I'd like to know if this is consistent across other hardware,
and if so, why. Also glxgears doesn't work (crashes).
Any thoughts will help me make progress to clean up things.
Ideally I'd like to first design a cache-able version of the
xen_bus_dma.c alloc function (perhaps useing pool_cache(9).
--
Cherry
Attachment:
xen_dma
Description: Binary data