diff options
author | Konsta Holtta <kholtta@nvidia.com> | 2018-03-22 07:35:01 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-03-23 20:18:24 -0400 |
commit | cb8d8337a61ead5eb948d78ef24d55d07fa99e7b (patch) | |
tree | 428f0ce0f90620bc0ec1c7ddf1453c832aae5d3a | |
parent | bac51e8081a2ae778bfdccc1c57ee3ef382de077 (diff) |
gpu: nvgpu: disallow invalid syncpoint wait ids
Instead of ignoring a wait when a raw syncpoint prefence has an invalid
id, reject the submit with -EINVAL just like with syncpoints in syncfds.
Change-Id: I9b5c417bd1c7cd081c79659d088ac2c915de8c0e
Signed-off-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1680281
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/channel.c | 7 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c | 6 |
2 files changed, 4 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/channel.c b/drivers/gpu/nvgpu/common/linux/channel.c index 07bb393e..dc35fbc0 100644 --- a/drivers/gpu/nvgpu/common/linux/channel.c +++ b/drivers/gpu/nvgpu/common/linux/channel.c | |||
@@ -462,11 +462,8 @@ static int gk20a_submit_prepare_syncs(struct channel_gk20a *c, | |||
462 | } | 462 | } |
463 | 463 | ||
464 | /* | 464 | /* |
465 | * Optionally insert syncpt wait in the beginning of gpfifo submission | 465 | * Optionally insert syncpt/semaphore wait in the beginning of gpfifo |
466 | * when user requested and the wait hasn't expired. Validate that the id | 466 | * submission when user requested and the wait hasn't expired. |
467 | * makes sense, elide if not. The only reason this isn't being | ||
468 | * unceremoniously killed is to keep running some tests which trigger | ||
469 | * this condition. | ||
470 | */ | 467 | */ |
471 | if (flags & NVGPU_SUBMIT_GPFIFO_FLAGS_FENCE_WAIT) { | 468 | if (flags & NVGPU_SUBMIT_GPFIFO_FLAGS_FENCE_WAIT) { |
472 | int max_wait_cmds = c->deterministic ? 1 : 0; | 469 | int max_wait_cmds = c->deterministic ? 1 : 0; |
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c index 25c57681..e94a112f 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c | |||
@@ -58,10 +58,8 @@ static int gk20a_channel_syncpt_wait_syncpt(struct gk20a_channel_sync *s, | |||
58 | struct channel_gk20a *c = sp->c; | 58 | struct channel_gk20a *c = sp->c; |
59 | int err = 0; | 59 | int err = 0; |
60 | 60 | ||
61 | if (!nvgpu_nvhost_syncpt_is_valid_pt_ext(sp->nvhost_dev, id)) { | 61 | if (!nvgpu_nvhost_syncpt_is_valid_pt_ext(sp->nvhost_dev, id)) |
62 | nvgpu_warn(c->g, "invalid wait id in gpfifo submit, elided"); | 62 | return -EINVAL; |
63 | return 0; | ||
64 | } | ||
65 | 63 | ||
66 | if (nvgpu_nvhost_syncpt_is_expired_ext(sp->nvhost_dev, id, thresh)) | 64 | if (nvgpu_nvhost_syncpt_is_expired_ext(sp->nvhost_dev, id, thresh)) |
67 | return 0; | 65 | return 0; |