Dave Airlie wrote:
> On Wed, Apr 7, 2010 at 8:21 PM, Jerome Glisse <jgli...@redhat.com> wrote:
>   
>> On fault the driver is given the opportunity to perform any operation
>> it sees fit in order to place the buffer into a CPU visible area of
>> memory. This patch doesn't break TTM users, nouveau, vmwgfx and radeon
>> should keep working properly. Future patch will take advantage of this
>> infrastructure and remove the old path from TTM once driver are
>> converted.
>>
>> V2 return VM_FAULT_NOPAGE if callback return -EBUSY or -ERESTARTSYS
>> V3 balance io_mem_reserve and io_mem_free call, fault_reserve_notify
>>   is responsible to perform any necessary task for mapping to succeed
>> V4 minor cleanup, atomic_t -> bool as member is protected by reserve
>>   mecanism from concurent access
>> V5 the callback is now responsible for iomapping the bo and providing
>>   a virtual address this simplify TTM and will allow to get rid of
>>   TTM_MEMTYPE_FLAG_NEEDS_IOREMAP
>>     
>
> Okay I've applied all these to drm-next and it fails to run X for longer than
> 5 mins on my 32-bit machine.
>
> The whole IO reserve thing looks like a bad idea for anything but kmap,
> since it ioremap's the pages, but we have limited ioremap space on 32-bit,
> and you hit that and vmallocs all start failing soon after.
>
>   
>> -       ret = ttm_bo_pci_offset(bdev, &bo->mem, &bus_base, &bus_offset,
>> -                               &bus_size);
>> -       if (unlikely(ret != 0)) {
>> +       ret = ttm_mem_io_reserve(bdev, &bo->mem);
>> +       if (ret) {
>>                retval = VM_FAULT_SIGBUS;
>>                goto out_unlock;
>>        }
>>     
>
> This is the start of the insanity, since ever bo that takes a
> userspace pagefault
> ends up using ioremap space for *no* reason whatsoever at all. You only need
> to use ioremap space if the *kernel* is accessing the bo not if userspace is,
> so really only in the kmap space.
>
> I've dropped it all from drm-next until you can resolve this.
>
> Dave.
>   

Indeed, ttm_mem_io_reserve() shouldn't do anything like that. It should 
place the bo data in a mappable region. If there is a copy involving 
ioremap() to do so, it should be iounmapped() before the operation is 
finished.

Thomas



------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to