[PATCH, libgomp] Fix deadlock in acc_set_device_type

Chung-Lin Tang cltang@codesourcery.com
Sat Apr 16 07:40:00 GMT 2016


Ping.

On 2016/3/28 05:45 PM, Chung-Lin Tang wrote:
> Hi Jakub, there's a path for deadlock on acc_device_lock when going
> through the acc_set_device_type() OpenACC library function.
> Basically, the gomp_init_targets_once() function should not be
> called with that held. The attached patch moves it appropriately.
> 
> Also in this patch, there are several cases in acc_* functions
> where gomp_init_targets_once() is guarded by a test of
> !cached_base_dev. Since that function already uses pthread_once() to
> call gomp_target_init(), and technically cached_base_dev
> is protected by acc_device_lock, the cleanest way should be to
> simply drop those "if(!cached_base_dev)" tests.
> 
> Tested libgomp without regressions on an nvptx offloaded system,
> is this okay for trunk?
> 
> Thanks,
> Chung-Lin
> 
> 2016-03-28  Chung-Lin Tang  <cltang@codesourcery.com>
> 
>         * oacc-init.c (acc_init): Remove !cached_base_dev condition on call to
>         gomp_init_targets_once().
>         (acc_set_device_type): Remove !cached_base_dev condition on call to
>         gomp_init_targets_once(), move call to before acc_device_lock acquire,
>         to avoid deadlock.
>         (acc_get_device_num): Remove !cached_base_dev condition on call to
>         gomp_init_targets_once().
>         (acc_set_device_num): Likewise.
> 



More information about the Gcc-patches mailing list