mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: rename has_timedout and make it thread safe
Currently has_timedout variable is protected by wmb at places where it is being set and there is no correspoding rmb whenever has_timedout variable is read. This is prone to errors for concurrent execution. This change is supposed to fix this issue. Rename has_timedout variable of channel struct to ch_timedout. Also to avoid rmb every time ch_timedout is read, ch_timedout_spinlock is added to protect ch_timedout variable for taking care of concurrent execution. Bug 2404865 Bug 2092051 Change-Id: I0bee9f50af0a48720aa8b54cbc3af97ef9f6df00 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1930935 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
503b897b45
commit
1f54ea09e3
@@ -1383,8 +1383,8 @@ static void gk20a_fifo_set_has_timedout_and_wake_up_wqs(struct gk20a *g,
|
||||
{
|
||||
if (refch != NULL) {
|
||||
/* mark channel as faulted */
|
||||
refch->has_timedout = true;
|
||||
nvgpu_smp_wmb();
|
||||
gk20a_channel_set_timedout(refch);
|
||||
|
||||
/* unblock pending waits */
|
||||
nvgpu_cond_broadcast_interruptible(&refch->semaphore_wq);
|
||||
nvgpu_cond_broadcast_interruptible(&refch->notifier_wq);
|
||||
@@ -1468,7 +1468,7 @@ void gk20a_fifo_abort_tsg(struct gk20a *g, u32 tsgid, bool preempt)
|
||||
nvgpu_rwsem_down_read(&tsg->ch_list_lock);
|
||||
nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) {
|
||||
if (gk20a_channel_get(ch) != NULL) {
|
||||
ch->has_timedout = true;
|
||||
gk20a_channel_set_timedout(ch);
|
||||
if (ch->g->ops.fifo.ch_abort_clean_up != NULL) {
|
||||
ch->g->ops.fifo.ch_abort_clean_up(ch);
|
||||
}
|
||||
@@ -2093,7 +2093,7 @@ int gk20a_fifo_tsg_unbind_channel(struct channel_gk20a *ch)
|
||||
|
||||
/* If one channel in TSG times out, we disable all channels */
|
||||
nvgpu_rwsem_down_write(&tsg->ch_list_lock);
|
||||
tsg_timedout = ch->has_timedout;
|
||||
tsg_timedout = gk20a_channel_check_timedout(ch);
|
||||
nvgpu_rwsem_up_write(&tsg->ch_list_lock);
|
||||
|
||||
/* Disable TSG and examine status before unbinding channel */
|
||||
|
||||
Reference in New Issue
Block a user