mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 02:52:51 +03:00
gpu: nvgpu: do tsg unbind hw state check only for multi-channel TSG
Host scheduler might be confused if more than one channels are present in TSG and one of the unbound channel has NEXT set. This is not so much of an issue if there is single channel in the TSG. So don't fail unbind in that case. ctx_reload and engine_faulted check can also be skipped for single channel TSG. Bug 3144960 Change-Id: I85eb9025ea53706ce8fda6d9b4bcf6a15a300d17 Signed-off-by: Sagar Kamble <skamble@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2442970 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Alex Waterman
parent
87e988aa24
commit
4d101a6303
@@ -150,6 +150,22 @@ int nvgpu_tsg_bind_channel(struct nvgpu_tsg *tsg, struct nvgpu_channel *ch)
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool nvgpu_tsg_is_multi_channel(struct nvgpu_tsg *tsg)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
nvgpu_rwsem_down_read(&tsg->ch_list_lock);
|
||||
if (nvgpu_list_first_entry(&tsg->ch_list, nvgpu_channel,
|
||||
ch_entry) !=
|
||||
nvgpu_list_last_entry(&tsg->ch_list, nvgpu_channel,
|
||||
ch_entry)) {
|
||||
ret = true;
|
||||
}
|
||||
nvgpu_rwsem_up_read(&tsg->ch_list_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int nvgpu_tsg_unbind_channel_common(struct nvgpu_tsg *tsg,
|
||||
struct nvgpu_channel *ch)
|
||||
{
|
||||
@@ -170,7 +186,11 @@ static int nvgpu_tsg_unbind_channel_common(struct nvgpu_tsg *tsg,
|
||||
goto fail_enable_tsg;
|
||||
}
|
||||
|
||||
if (!tsg_timedout &&
|
||||
/*
|
||||
* State validation is only necessary if there are multiple channels in
|
||||
* the TSG.
|
||||
*/
|
||||
if (nvgpu_tsg_is_multi_channel(tsg) && !tsg_timedout &&
|
||||
(g->ops.tsg.unbind_channel_check_hw_state != NULL)) {
|
||||
err = g->ops.tsg.unbind_channel_check_hw_state(tsg, ch);
|
||||
if (err != 0) {
|
||||
|
||||
Reference in New Issue
Block a user