[Mesa-dev] [PATCH] radeon: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads.

Marek Olšák maraeo at gmail.com
Mon Jun 29 02:54:24 PDT 2015


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

The fix for amdgpu should be in libdrm_amdgpu / amdgpu_device.c.

Marek

On Sun, Jun 28, 2015 at 7:49 AM, Mario Kleiner
<mario.kleiner.de at gmail.com> wrote:
> Thanks for the review Ilia. Just saw that the new amdgpu winsys driver will
> need the same fix, once this one is confirmed to be ok.
>
> thanks,
> -mario
>
>
> On 06/28/2015 07:23 AM, Ilia Mirkin wrote:
>>
>> Without being intimately familiar with the radeon winsys code, this
>> seems sane (esp after re-reviewing the situation for nouveau).
>> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>. But one of the radeon
>> people definitely needs to look at this before pushing.
>>
>> On Sat, Jun 27, 2015 at 9:02 PM, Mario Kleiner
>> <mario.kleiner.de at gmail.com> wrote:
>>>
>>> Same problem and fix as for nouveau's ZaphodHeads trouble.
>>>
>>> See patch ...
>>>
>>> "nouveau: Use dup fd as key in drm-winsys hash table to fix ZaphodHeads."
>>>
>>> ... for reference.
>>>
>>> Cc: "10.3 10.4 10.5 10.6" <mesa-stable at lists.freedesktop.org>
>>>
>>> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
>>> Cc: Ilia Mirkin <imirkin at alum.mit.edu>
>>> ---
>>>   src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 13 ++++++++++---
>>>   1 file changed, 10 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> index ba8d143..ebdb19e 100644
>>> --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
>>> @@ -484,6 +484,10 @@ static void radeon_winsys_destroy(struct
>>> radeon_winsys *rws)
>>>       if (ws->gen >= DRV_R600) {
>>>           radeon_surface_manager_free(ws->surf_man);
>>>       }
>>> +
>>> +    if (ws->fd)
>>> +        close(ws->fd);
>>> +
>>>       FREE(rws);
>>>   }
>>>
>>> @@ -696,7 +700,7 @@ radeon_drm_winsys_create(int fd,
>>> radeon_screen_create_t screen_create)
>>>           return NULL;
>>>       }
>>>
>>> -    ws->fd = fd;
>>> +    ws->fd = dup(fd);
>>>
>>>       if (!do_winsys_init(ws))
>>>           goto fail;
>>> @@ -712,7 +716,7 @@ radeon_drm_winsys_create(int fd,
>>> radeon_screen_create_t screen_create)
>>>           goto fail;
>>>
>>>       if (ws->gen >= DRV_R600) {
>>> -        ws->surf_man = radeon_surface_manager_new(fd);
>>> +        ws->surf_man = radeon_surface_manager_new(ws->fd);
>>>           if (!ws->surf_man)
>>>               goto fail;
>>>       }
>>> @@ -753,7 +757,7 @@ radeon_drm_winsys_create(int fd,
>>> radeon_screen_create_t screen_create)
>>>           return NULL;
>>>       }
>>>
>>> -    util_hash_table_set(fd_tab, intptr_to_pointer(fd), ws);
>>> +    util_hash_table_set(fd_tab, intptr_to_pointer(ws->fd), ws);
>>>
>>>       /* We must unlock the mutex once the winsys is fully initialized,
>>> so that
>>>        * other threads attempting to create the winsys from the same fd
>>> will
>>> @@ -770,6 +774,9 @@ fail:
>>>           ws->kman->destroy(ws->kman);
>>>       if (ws->surf_man)
>>>           radeon_surface_manager_free(ws->surf_man);
>>> +    if (ws->fd)
>>> +        close(ws->fd);
>>> +
>>>       FREE(ws);
>>>       return NULL;
>>>   }
>>> --
>>> 2.1.4
>>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list