diff options
author | Seema Khowala <seemaj@nvidia.com> | 2018-10-19 15:08:46 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2019-02-13 16:19:37 -0500 |
commit | 220860d04383489a8e75684802a2ced1323831df (patch) | |
tree | 123e92d8b1781afa6de32bc2615ae5835b389f4d /drivers/gpu/nvgpu/include | |
parent | 18643ac1357a845d204d6dabd98359a0ab0509a7 (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.h | 6 |
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 | ||
468 | void gk20a_channel_set_timedout(struct channel_gk20a *ch); | ||
469 | bool gk20a_channel_check_timedout(struct channel_gk20a *ch); | ||
470 | |||
467 | #endif | 471 | #endif |