Re: [PATCH v2] drm/gem: fix mmap vma size calculations

2013-08-01 Thread Sedat Dilek
On Wed, Jul 31, 2013 at 6:46 PM, David Herrmann dh.herrm...@gmail.com wrote:
 Hi

 On Tue, Jul 30, 2013 at 9:52 AM, Sedat Dilek sedat.di...@gmail.com wrote:
 On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek sedat.di...@gmail.com wrote:
 On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter dan...@ffwll.ch wrote:
 On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 This bug was introduced in commit:
   0de23977cfeb5b357ec884ba15417ae118ff9e9b
   drm/gem: convert to new unified vma manager

 Fixes i915 gtt mmap failure reported by Sedat Dilek in:
   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

 Cc: Daniel Vetter daniel.vet...@ffwll.ch
 Cc: Chris Wilson ch...@chris-wilson.co.uk
 Signed-off-by: David Herrmann dh.herrm...@gmail.com
 Reported-by: Sedat Dilek sedat.di...@gmail.com
 Tested-by: Sedat Dilek sedat.di...@gmail.com

 I remember that I even checked whether v4 was consistent with pages vs.
 bytes ;-) So


 Hi David, Daniel, and Dave,

 Just reading quickly drm: add unified vma offset manager... is that
 below in the docs?

 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 If not, do you mind adding it?


 To quote this two:

 [ include/drm/drm_vma_manager.h ]

 /**
  * drm_vma_node_size() - Return size (page-based)
  * @node: Node to inspect
  *
  * Return the size as number of pages for the given node. This is the same 
 size
  * that was passed to drm_vma_offset_add(). If no offset is allocated for the
  * node, this is 0.
  *
  * RETURNS:
  * Size of @node as number of pages. 0 if the node does not have an offset
  * allocated.
  */

 [ drivers/gpu/drm/drm_gem.c ]

 It's actually drm_gem_mmap_obj which we have to look at and it says:
   * @obj_size: the object size to be mapped, in bytes

 So both are already documented.


Good. I had only a quick view, you are the expert.

 Regards
 David

 /**
  * drm_gem_mmap - memory map routine for GEM objects
  * @filp: DRM file pointer
  * @vma: VMA for the area to be mapped
  *
  * If a driver supports GEM object mapping, mmap calls on the DRM file
  * descriptor will end up here.
  *
  * Look up the GEM object based on the offset passed in (vma-vm_pgoff will
  * contain the fake offset we created when the GTT map ioctl was called on
  * the object) and map it with a call to drm_gem_mmap_obj().
  */

 - Sedat -

 Thanks in advance!

 - Sedat -

 Reviewed-by: Daniel Vetter daniel.vet...@ffwll.ch

 on this little fixup.
 -Daniel

 ---
  drivers/gpu/drm/drm_gem.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
 index 3613b50..1f76572 100644
 --- a/drivers/gpu/drm/drm_gem.c
 +++ b/drivers/gpu/drm/drm_gem.c
 @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
 vm_area_struct *vma)
   }

   obj = container_of(node, struct drm_gem_object, vma_node);
 - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
 + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node)  PAGE_SHIFT, 
 vma);

   mutex_unlock(dev-struct_mutex);

 --
 1.8.3.4


 --
 Daniel Vetter
 Software Engineer, Intel Corporation
 +41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-31 Thread Sedat Dilek
On Wed, Jul 31, 2013 at 6:46 PM, David Herrmann  
wrote:
> Hi
>
> On Tue, Jul 30, 2013 at 9:52 AM, Sedat Dilek  wrote:
>> On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek  
>> wrote:
>>> On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter  wrote:
 On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
> The VMA manager is page-size based so drm_vma_node_size() returns the size
> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
> buffers.
>
> This bug was introduced in commit:
>   0de23977cfeb5b357ec884ba15417ae118ff9e9b
>   "drm/gem: convert to new unified vma manager"
>
> Fixes i915 gtt mmap failure reported by Sedat Dilek in:
>   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]
>
> Cc: Daniel Vetter 
> Cc: Chris Wilson 
> Signed-off-by: David Herrmann 
> Reported-by: Sedat Dilek 
> Tested-by: Sedat Dilek 

 I remember that I even checked whether v4 was consistent with pages vs.
 bytes ;-) So

>>>
>>> Hi David, Daniel, and Dave,
>>>
>>> Just reading quickly "drm: add unified vma offset manager"... is that
>>> below in the docs?
>>>
>>> "The VMA manager is page-size based so drm_vma_node_size() returns the size
>>> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
>>> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
>>> buffers."
>>>
>>> If not, do you mind adding it?
>>>
>>
>> To quote this two:
>>
>> [ include/drm/drm_vma_manager.h ]
>>
>> /**
>>  * drm_vma_node_size() - Return size (page-based)
>>  * @node: Node to inspect
>>  *
>>  * Return the size as number of pages for the given node. This is the same 
>> size
>>  * that was passed to drm_vma_offset_add(). If no offset is allocated for the
>>  * node, this is 0.
>>  *
>>  * RETURNS:
>>  * Size of @node as number of pages. 0 if the node does not have an offset
>>  * allocated.
>>  */
>>
>> [ drivers/gpu/drm/drm_gem.c ]
>
> It's actually "drm_gem_mmap_obj" which we have to look at and it says:
>   * @obj_size: the object size to be mapped, in bytes
>
> So both are already documented.
>

Good. I had only a quick view, you are the expert.

> Regards
> David
>
>> /**
>>  * drm_gem_mmap - memory map routine for GEM objects
>>  * @filp: DRM file pointer
>>  * @vma: VMA for the area to be mapped
>>  *
>>  * If a driver supports GEM object mapping, mmap calls on the DRM file
>>  * descriptor will end up here.
>>  *
>>  * Look up the GEM object based on the offset passed in (vma->vm_pgoff will
>>  * contain the fake offset we created when the GTT map ioctl was called on
>>  * the object) and map it with a call to drm_gem_mmap_obj().
>>  */
>>
>> - Sedat -
>>
>>> Thanks in advance!
>>>
>>> - Sedat -
>>>
 Reviewed-by: Daniel Vetter 

 on this little fixup.
 -Daniel

> ---
>  drivers/gpu/drm/drm_gem.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 3613b50..1f76572 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
> vm_area_struct *vma)
>   }
>
>   obj = container_of(node, struct drm_gem_object, vma_node);
> - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
> + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, 
> vma);
>
>   mutex_unlock(>struct_mutex);
>
> --
> 1.8.3.4
>

 --
 Daniel Vetter
 Software Engineer, Intel Corporation
 +41 (0) 79 365 57 48 - http://blog.ffwll.ch


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-31 Thread David Herrmann
Hi

On Tue, Jul 30, 2013 at 9:52 AM, Sedat Dilek  wrote:
> On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek  wrote:
>> On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter  wrote:
>>> On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 This bug was introduced in commit:
   0de23977cfeb5b357ec884ba15417ae118ff9e9b
   "drm/gem: convert to new unified vma manager"

 Fixes i915 gtt mmap failure reported by Sedat Dilek in:
   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

 Cc: Daniel Vetter 
 Cc: Chris Wilson 
 Signed-off-by: David Herrmann 
 Reported-by: Sedat Dilek 
 Tested-by: Sedat Dilek 
>>>
>>> I remember that I even checked whether v4 was consistent with pages vs.
>>> bytes ;-) So
>>>
>>
>> Hi David, Daniel, and Dave,
>>
>> Just reading quickly "drm: add unified vma offset manager"... is that
>> below in the docs?
>>
>> "The VMA manager is page-size based so drm_vma_node_size() returns the size
>> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
>> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
>> buffers."
>>
>> If not, do you mind adding it?
>>
>
> To quote this two:
>
> [ include/drm/drm_vma_manager.h ]
>
> /**
>  * drm_vma_node_size() - Return size (page-based)
>  * @node: Node to inspect
>  *
>  * Return the size as number of pages for the given node. This is the same 
> size
>  * that was passed to drm_vma_offset_add(). If no offset is allocated for the
>  * node, this is 0.
>  *
>  * RETURNS:
>  * Size of @node as number of pages. 0 if the node does not have an offset
>  * allocated.
>  */
>
> [ drivers/gpu/drm/drm_gem.c ]

It's actually "drm_gem_mmap_obj" which we have to look at and it says:
  * @obj_size: the object size to be mapped, in bytes

So both are already documented.

Regards
David

> /**
>  * drm_gem_mmap - memory map routine for GEM objects
>  * @filp: DRM file pointer
>  * @vma: VMA for the area to be mapped
>  *
>  * If a driver supports GEM object mapping, mmap calls on the DRM file
>  * descriptor will end up here.
>  *
>  * Look up the GEM object based on the offset passed in (vma->vm_pgoff will
>  * contain the fake offset we created when the GTT map ioctl was called on
>  * the object) and map it with a call to drm_gem_mmap_obj().
>  */
>
> - Sedat -
>
>> Thanks in advance!
>>
>> - Sedat -
>>
>>> Reviewed-by: Daniel Vetter 
>>>
>>> on this little fixup.
>>> -Daniel
>>>
 ---
  drivers/gpu/drm/drm_gem.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
 index 3613b50..1f76572 100644
 --- a/drivers/gpu/drm/drm_gem.c
 +++ b/drivers/gpu/drm/drm_gem.c
 @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
 vm_area_struct *vma)
   }

   obj = container_of(node, struct drm_gem_object, vma_node);
 - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
 + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, 
 vma);

   mutex_unlock(>struct_mutex);

 --
 1.8.3.4

>>>
>>> --
>>> Daniel Vetter
>>> Software Engineer, Intel Corporation
>>> +41 (0) 79 365 57 48 - http://blog.ffwll.ch


Re: [PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-31 Thread David Herrmann
Hi

On Tue, Jul 30, 2013 at 9:52 AM, Sedat Dilek sedat.di...@gmail.com wrote:
 On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek sedat.di...@gmail.com wrote:
 On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter dan...@ffwll.ch wrote:
 On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 This bug was introduced in commit:
   0de23977cfeb5b357ec884ba15417ae118ff9e9b
   drm/gem: convert to new unified vma manager

 Fixes i915 gtt mmap failure reported by Sedat Dilek in:
   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

 Cc: Daniel Vetter daniel.vet...@ffwll.ch
 Cc: Chris Wilson ch...@chris-wilson.co.uk
 Signed-off-by: David Herrmann dh.herrm...@gmail.com
 Reported-by: Sedat Dilek sedat.di...@gmail.com
 Tested-by: Sedat Dilek sedat.di...@gmail.com

 I remember that I even checked whether v4 was consistent with pages vs.
 bytes ;-) So


 Hi David, Daniel, and Dave,

 Just reading quickly drm: add unified vma offset manager... is that
 below in the docs?

 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 If not, do you mind adding it?


 To quote this two:

 [ include/drm/drm_vma_manager.h ]

 /**
  * drm_vma_node_size() - Return size (page-based)
  * @node: Node to inspect
  *
  * Return the size as number of pages for the given node. This is the same 
 size
  * that was passed to drm_vma_offset_add(). If no offset is allocated for the
  * node, this is 0.
  *
  * RETURNS:
  * Size of @node as number of pages. 0 if the node does not have an offset
  * allocated.
  */

 [ drivers/gpu/drm/drm_gem.c ]

It's actually drm_gem_mmap_obj which we have to look at and it says:
  * @obj_size: the object size to be mapped, in bytes

So both are already documented.

Regards
David

 /**
  * drm_gem_mmap - memory map routine for GEM objects
  * @filp: DRM file pointer
  * @vma: VMA for the area to be mapped
  *
  * If a driver supports GEM object mapping, mmap calls on the DRM file
  * descriptor will end up here.
  *
  * Look up the GEM object based on the offset passed in (vma-vm_pgoff will
  * contain the fake offset we created when the GTT map ioctl was called on
  * the object) and map it with a call to drm_gem_mmap_obj().
  */

 - Sedat -

 Thanks in advance!

 - Sedat -

 Reviewed-by: Daniel Vetter daniel.vet...@ffwll.ch

 on this little fixup.
 -Daniel

 ---
  drivers/gpu/drm/drm_gem.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
 index 3613b50..1f76572 100644
 --- a/drivers/gpu/drm/drm_gem.c
 +++ b/drivers/gpu/drm/drm_gem.c
 @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
 vm_area_struct *vma)
   }

   obj = container_of(node, struct drm_gem_object, vma_node);
 - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
 + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node)  PAGE_SHIFT, 
 vma);

   mutex_unlock(dev-struct_mutex);

 --
 1.8.3.4


 --
 Daniel Vetter
 Software Engineer, Intel Corporation
 +41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-30 Thread Sedat Dilek
On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek  wrote:
> On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter  wrote:
>> On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
>>> The VMA manager is page-size based so drm_vma_node_size() returns the size
>>> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
>>> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
>>> buffers.
>>>
>>> This bug was introduced in commit:
>>>   0de23977cfeb5b357ec884ba15417ae118ff9e9b
>>>   "drm/gem: convert to new unified vma manager"
>>>
>>> Fixes i915 gtt mmap failure reported by Sedat Dilek in:
>>>   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]
>>>
>>> Cc: Daniel Vetter 
>>> Cc: Chris Wilson 
>>> Signed-off-by: David Herrmann 
>>> Reported-by: Sedat Dilek 
>>> Tested-by: Sedat Dilek 
>>
>> I remember that I even checked whether v4 was consistent with pages vs.
>> bytes ;-) So
>>
>
> Hi David, Daniel, and Dave,
>
> Just reading quickly "drm: add unified vma offset manager"... is that
> below in the docs?
>
> "The VMA manager is page-size based so drm_vma_node_size() returns the size
> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
> buffers."
>
> If not, do you mind adding it?
>

To quote this two:

[ include/drm/drm_vma_manager.h ]

/**
 * drm_vma_node_size() - Return size (page-based)
 * @node: Node to inspect
 *
 * Return the size as number of pages for the given node. This is the same size
 * that was passed to drm_vma_offset_add(). If no offset is allocated for the
 * node, this is 0.
 *
 * RETURNS:
 * Size of @node as number of pages. 0 if the node does not have an offset
 * allocated.
 */

[ drivers/gpu/drm/drm_gem.c ]

/**
 * drm_gem_mmap - memory map routine for GEM objects
 * @filp: DRM file pointer
 * @vma: VMA for the area to be mapped
 *
 * If a driver supports GEM object mapping, mmap calls on the DRM file
 * descriptor will end up here.
 *
 * Look up the GEM object based on the offset passed in (vma->vm_pgoff will
 * contain the fake offset we created when the GTT map ioctl was called on
 * the object) and map it with a call to drm_gem_mmap_obj().
 */

- Sedat -

> Thanks in advance!
>
> - Sedat -
>
>> Reviewed-by: Daniel Vetter 
>>
>> on this little fixup.
>> -Daniel
>>
>>> ---
>>>  drivers/gpu/drm/drm_gem.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
>>> index 3613b50..1f76572 100644
>>> --- a/drivers/gpu/drm/drm_gem.c
>>> +++ b/drivers/gpu/drm/drm_gem.c
>>> @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
>>> vm_area_struct *vma)
>>>   }
>>>
>>>   obj = container_of(node, struct drm_gem_object, vma_node);
>>> - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
>>> + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, 
>>> vma);
>>>
>>>   mutex_unlock(>struct_mutex);
>>>
>>> --
>>> 1.8.3.4
>>>
>>
>> --
>> Daniel Vetter
>> Software Engineer, Intel Corporation
>> +41 (0) 79 365 57 48 - http://blog.ffwll.ch


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-30 Thread Sedat Dilek
On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter  wrote:
> On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
>> The VMA manager is page-size based so drm_vma_node_size() returns the size
>> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
>> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
>> buffers.
>>
>> This bug was introduced in commit:
>>   0de23977cfeb5b357ec884ba15417ae118ff9e9b
>>   "drm/gem: convert to new unified vma manager"
>>
>> Fixes i915 gtt mmap failure reported by Sedat Dilek in:
>>   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]
>>
>> Cc: Daniel Vetter 
>> Cc: Chris Wilson 
>> Signed-off-by: David Herrmann 
>> Reported-by: Sedat Dilek 
>> Tested-by: Sedat Dilek 
>
> I remember that I even checked whether v4 was consistent with pages vs.
> bytes ;-) So
>

Hi David, Daniel, and Dave,

Just reading quickly "drm: add unified vma offset manager"... is that
below in the docs?

"The VMA manager is page-size based so drm_vma_node_size() returns the size
in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
buffers."

If not, do you mind adding it?

Thanks in advance!

- Sedat -

> Reviewed-by: Daniel Vetter 
>
> on this little fixup.
> -Daniel
>
>> ---
>>  drivers/gpu/drm/drm_gem.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
>> index 3613b50..1f76572 100644
>> --- a/drivers/gpu/drm/drm_gem.c
>> +++ b/drivers/gpu/drm/drm_gem.c
>> @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
>> vm_area_struct *vma)
>>   }
>>
>>   obj = container_of(node, struct drm_gem_object, vma_node);
>> - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
>> + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, 
>> vma);
>>
>>   mutex_unlock(>struct_mutex);
>>
>> --
>> 1.8.3.4
>>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch


Re: [PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-30 Thread Sedat Dilek
On Tue, Jul 30, 2013 at 9:41 AM, Sedat Dilek sedat.di...@gmail.com wrote:
 On Fri, Jul 26, 2013 at 10:15 PM, Daniel Vetter dan...@ffwll.ch wrote:
 On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 This bug was introduced in commit:
   0de23977cfeb5b357ec884ba15417ae118ff9e9b
   drm/gem: convert to new unified vma manager

 Fixes i915 gtt mmap failure reported by Sedat Dilek in:
   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

 Cc: Daniel Vetter daniel.vet...@ffwll.ch
 Cc: Chris Wilson ch...@chris-wilson.co.uk
 Signed-off-by: David Herrmann dh.herrm...@gmail.com
 Reported-by: Sedat Dilek sedat.di...@gmail.com
 Tested-by: Sedat Dilek sedat.di...@gmail.com

 I remember that I even checked whether v4 was consistent with pages vs.
 bytes ;-) So


 Hi David, Daniel, and Dave,

 Just reading quickly drm: add unified vma offset manager... is that
 below in the docs?

 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.

 If not, do you mind adding it?


To quote this two:

[ include/drm/drm_vma_manager.h ]

/**
 * drm_vma_node_size() - Return size (page-based)
 * @node: Node to inspect
 *
 * Return the size as number of pages for the given node. This is the same size
 * that was passed to drm_vma_offset_add(). If no offset is allocated for the
 * node, this is 0.
 *
 * RETURNS:
 * Size of @node as number of pages. 0 if the node does not have an offset
 * allocated.
 */

[ drivers/gpu/drm/drm_gem.c ]

/**
 * drm_gem_mmap - memory map routine for GEM objects
 * @filp: DRM file pointer
 * @vma: VMA for the area to be mapped
 *
 * If a driver supports GEM object mapping, mmap calls on the DRM file
 * descriptor will end up here.
 *
 * Look up the GEM object based on the offset passed in (vma-vm_pgoff will
 * contain the fake offset we created when the GTT map ioctl was called on
 * the object) and map it with a call to drm_gem_mmap_obj().
 */

- Sedat -

 Thanks in advance!

 - Sedat -

 Reviewed-by: Daniel Vetter daniel.vet...@ffwll.ch

 on this little fixup.
 -Daniel

 ---
  drivers/gpu/drm/drm_gem.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
 index 3613b50..1f76572 100644
 --- a/drivers/gpu/drm/drm_gem.c
 +++ b/drivers/gpu/drm/drm_gem.c
 @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct 
 vm_area_struct *vma)
   }

   obj = container_of(node, struct drm_gem_object, vma_node);
 - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
 + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node)  PAGE_SHIFT, 
 vma);

   mutex_unlock(dev-struct_mutex);

 --
 1.8.3.4


 --
 Daniel Vetter
 Software Engineer, Intel Corporation
 +41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-26 Thread Daniel Vetter
On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
> The VMA manager is page-size based so drm_vma_node_size() returns the size
> in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
> PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
> buffers.
> 
> This bug was introduced in commit:
>   0de23977cfeb5b357ec884ba15417ae118ff9e9b
>   "drm/gem: convert to new unified vma manager"
> 
> Fixes i915 gtt mmap failure reported by Sedat Dilek in:
>   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]
> 
> Cc: Daniel Vetter 
> Cc: Chris Wilson 
> Signed-off-by: David Herrmann 
> Reported-by: Sedat Dilek 
> Tested-by: Sedat Dilek 

I remember that I even checked whether v4 was consistent with pages vs.
bytes ;-) So

Reviewed-by: Daniel Vetter 

on this little fixup.
-Daniel

> ---
>  drivers/gpu/drm/drm_gem.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 3613b50..1f76572 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct 
> *vma)
>   }
>  
>   obj = container_of(node, struct drm_gem_object, vma_node);
> - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
> + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, vma);
>  
>   mutex_unlock(>struct_mutex);
>  
> -- 
> 1.8.3.4
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-26 Thread David Herrmann
The VMA manager is page-size based so drm_vma_node_size() returns the size
in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
buffers.

This bug was introduced in commit:
  0de23977cfeb5b357ec884ba15417ae118ff9e9b
  "drm/gem: convert to new unified vma manager"

Fixes i915 gtt mmap failure reported by Sedat Dilek in:
  Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

Cc: Daniel Vetter 
Cc: Chris Wilson 
Signed-off-by: David Herrmann 
Reported-by: Sedat Dilek 
Tested-by: Sedat Dilek 
---
 drivers/gpu/drm/drm_gem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 3613b50..1f76572 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct 
*vma)
}

obj = container_of(node, struct drm_gem_object, vma_node);
-   ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
+   ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, vma);

mutex_unlock(>struct_mutex);

-- 
1.8.3.4



[PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-26 Thread David Herrmann
The VMA manager is page-size based so drm_vma_node_size() returns the size
in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
buffers.

This bug was introduced in commit:
  0de23977cfeb5b357ec884ba15417ae118ff9e9b
  drm/gem: convert to new unified vma manager

Fixes i915 gtt mmap failure reported by Sedat Dilek in:
  Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]

Cc: Daniel Vetter daniel.vet...@ffwll.ch
Cc: Chris Wilson ch...@chris-wilson.co.uk
Signed-off-by: David Herrmann dh.herrm...@gmail.com
Reported-by: Sedat Dilek sedat.di...@gmail.com
Tested-by: Sedat Dilek sedat.di...@gmail.com
---
 drivers/gpu/drm/drm_gem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 3613b50..1f76572 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct 
*vma)
}
 
obj = container_of(node, struct drm_gem_object, vma_node);
-   ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
+   ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node)  PAGE_SHIFT, vma);
 
mutex_unlock(dev-struct_mutex);
 
-- 
1.8.3.4

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH v2] drm/gem: fix mmap vma size calculations

2013-07-26 Thread Daniel Vetter
On Fri, Jul 26, 2013 at 12:09:32PM +0200, David Herrmann wrote:
 The VMA manager is page-size based so drm_vma_node_size() returns the size
 in pages. However, drm_gem_mmap_obj() requires the size in bytes. Apply
 PAGE_SHIFT so we no longer get EINVAL during mmaps due to too small
 buffers.
 
 This bug was introduced in commit:
   0de23977cfeb5b357ec884ba15417ae118ff9e9b
   drm/gem: convert to new unified vma manager
 
 Fixes i915 gtt mmap failure reported by Sedat Dilek in:
   Re: linux-next: Tree for Jul 25 [ call-trace: drm | drm-intel related? ]
 
 Cc: Daniel Vetter daniel.vet...@ffwll.ch
 Cc: Chris Wilson ch...@chris-wilson.co.uk
 Signed-off-by: David Herrmann dh.herrm...@gmail.com
 Reported-by: Sedat Dilek sedat.di...@gmail.com
 Tested-by: Sedat Dilek sedat.di...@gmail.com

I remember that I even checked whether v4 was consistent with pages vs.
bytes ;-) So

Reviewed-by: Daniel Vetter daniel.vet...@ffwll.ch

on this little fixup.
-Daniel

 ---
  drivers/gpu/drm/drm_gem.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
 index 3613b50..1f76572 100644
 --- a/drivers/gpu/drm/drm_gem.c
 +++ b/drivers/gpu/drm/drm_gem.c
 @@ -666,7 +666,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct 
 *vma)
   }
  
   obj = container_of(node, struct drm_gem_object, vma_node);
 - ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node), vma);
 + ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node)  PAGE_SHIFT, vma);
  
   mutex_unlock(dev-struct_mutex);
  
 -- 
 1.8.3.4
 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel