On 03/12/2010 01:45 PM, Arvind R wrote:
> On Thu, Mar 11, 2010 at 4:32 PM, Pekka Paalanen <pq@xxxxxx> wrote:
>> I'm adding dri-devel@ to CC, since this suggested patch touches
>> TTM code, and none of the Nouveau code. TTM patches go via
>> dri-devel@.
>>
>> Thanks.
>>
>>
>> On Wed, 10 Mar 2010 18:51:21 +0530
>> Arvind R <arvino55@xxxxxxxxx> wrote:
>>
>>> Hi,
>>> Following is a simple patch that is needed in nouveau to get
>>> accelerated X on a Xen dom0 pv_ops kernel. The kernel is jeremy's
>>> 2.6.31.6 as of 20100222. The whole gpu tree of nouveau (which is
>>> almost the mainline merge), was substituted into the kernel-tree.
>>> All components of X (mesa, Xorg-server-7.5, xf86-nouveau, libdrm)
>>> used of the same day.
>>>
>>> Patch:
>>> diff -Naur nouveau-kernel.orig/drivers/gpu/drm/ttm/ttm_bo_vm.c
>>> nouveau-kernel.new/drivers/gpu/drm/ttm/ttm_bo_vm.c
>>> --- nouveau-kernel.orig/drivers/gpu/drm/ttm/ttm_bo_vm.c 2010-01-27
>>> 10:19:28.000000000 +0530
>>> +++ nouveau-kernel.new/drivers/gpu/drm/ttm/ttm_bo_vm.c 2010-03-10
>>> 17:28:59.000000000 +0530
>>> @@ -271,7 +271,10 @@
>>> */
>>>
>>> vma->vm_private_data = bo;
>>> - vma->vm_flags |= VM_RESERVED | VM_IO | VM_MIXEDMAP |
>>> VM_DONTEXPAND;
>>> + vma->vm_flags |= VM_RESERVED | VM_MIXEDMAP |
>>> VM_DONTEXPAND;
>>> + if (!((bo->mem.placement & TTM_PL_MASK_MEM) &
>>> TTM_PL_FLAG_TT))
>>> + vma->vm_flags |= VM_IO;
>>> + vma->vm_page_prot = vma_get_vm_prot(vma->vm_flags);
>>> return 0;
>>> out_unref:
>>> ttm_bo_unref(&bo);
>>>
> sorry for the typo and other procedural errors.
> the last added line should be
> + vma->vm_page_prot = vm_get_page_prot(vma->vm_flags)
>
>>> This patch is necessary because, in Xen, PFN of a page is
>>> virtualised. So physical addresses
>>> for DMA programming needs to use the MFN. Xen transparently does
>>> the correct translation
>>> using the _PAGE_IOMEM prot-bit in the PTE. If the bit is set,
>>> then Xen assumes that the backing
>>> memory is in the IOMEM space, and PFN equals MFN. If not set,
>>> page_to_pfn() returns MFN.
>>>
>>> The patch enables the ttm_bo_vm_fault() handler to behave
>>> correctly under Xen, and has no
>>> side-effects on normal (not under Xen) operations. The use of
>>> TTM_PL_FLAG_TT in the
>>> check assumes that all other placements are backed by device
>>> memory or IO. If there are
>>> any other placements that use system memory, that flag has to be
>>> OR'ed into the check.
>>>
>>> The above patch has no implications on a normal kernel or a Xen
>>> pv_ops kernel booted without
>>> the Xen hypervisor. My testing is on a debian-lenny environment
>>> on a Core2 processor with
>>> nVidia GeForce 9400 GT.
>>
> Efficacy of patch:
> successful flightgear run on dom0 AND bareboot!
>
Jeremy, will you be merging this patch into any of the xen/stable-*
branches any time soon?
Thanks,
joanna.
signature.asc
Description: OpenPGP digital signature
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|