Ping x2. Hi Jakub, This patch is fairly straightforward, and solves a easily encountered deadlock. Please approve for trunk and gcc-6-branch.
Thanks, Chung-Lin On 2016/4/16 03:39 PM, Chung-Lin Tang wrote: > 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 <clt...@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. >> >