summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/include
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2018-10-19 15:08:46 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2019-02-13 16:19:37 -0500
commit220860d04383489a8e75684802a2ced1323831df (patch)
tree123e92d8b1781afa6de32bc2615ae5835b389f4d /drivers/gpu/nvgpu/include
parent18643ac1357a845d204d6dabd98359a0ab0509a7 (diff)
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 Signed-off-by: Debarshi Dutta <ddutta@nvidia.com> (cherry picked from commit 1f54ea09e3445d9ca3cf7a69b4967849cc9defc8 in dev-kernel) Reviewed-on: https://git-master.nvidia.com/r/2016975 GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Bibek Basu <bbasu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/include')
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/channel.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/include/nvgpu/channel.h b/drivers/gpu/nvgpu/include/nvgpu/channel.h
index 1851b9e2..0a956c66 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/channel.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/channel.h
@@ -298,6 +298,8 @@ struct channel_gk20a {
298 298
299 struct nvgpu_mem ctx_header; 299 struct nvgpu_mem ctx_header;
300 300
301 struct nvgpu_spinlock ch_timedout_lock;
302 bool ch_timedout;
301 /* Any operating system specific data. */ 303 /* Any operating system specific data. */
302 void *os_priv; 304 void *os_priv;
303 305
@@ -313,7 +315,6 @@ struct channel_gk20a {
313 u32 runlist_id; 315 u32 runlist_id;
314 316
315 bool mmu_nack_handled; 317 bool mmu_nack_handled;
316 bool has_timedout;
317 bool referenceable; 318 bool referenceable;
318 bool vpr; 319 bool vpr;
319 bool deterministic; 320 bool deterministic;
@@ -464,4 +465,7 @@ static inline void trace_write_pushbuffers(struct channel_gk20a *c, u32 count)
464} 465}
465#endif 466#endif
466 467
468void gk20a_channel_set_timedout(struct channel_gk20a *ch);
469bool gk20a_channel_check_timedout(struct channel_gk20a *ch);
470
467#endif 471#endif