gpu: nvgpu: replace tsgid input variable with pointer to a struct tsg_gk20a

replace tsgid with a pointer to a struct tsg_gk20a in the function
gk20a_fifo_tsg_abort(). gk20a_fifo_tsg_abort needs to enumerate through
all the channels within the tsg as well as pass the tsg pointer to
other functions, qualifying the need to use a pointer instead as an
input parameter.

Jira NVGPU-1461

Change-Id: I59cec05d5d778f733d0c3e9ffadf46e74e249080
Signed-off-by: Debarshi Dutta <ddutta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1956567
(cherry picked from commit e5bebd880f
in dev-kernel)
Reviewed-on: https://git-master.nvidia.com/r/2013724
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Debarshi Dutta
2018-11-23 09:30:17 +05:30
committed by mobile promotions
parent 7e8ba851a8
commit 5b8ecbc51f
5 changed files with 20 additions and 13 deletions

View File

@@ -214,10 +214,12 @@ void gk20a_channel_abort_clean_up(struct channel_gk20a *ch)
void gk20a_channel_abort(struct channel_gk20a *ch, bool channel_preempt)
{
struct tsg_gk20a *tsg = tsg_gk20a_from_ch(ch);
nvgpu_log_fn(ch->g, " ");
if (gk20a_is_channel_marked_as_tsg(ch)) {
return gk20a_fifo_abort_tsg(ch->g, ch->tsgid, channel_preempt);
if (tsg != NULL) {
return gk20a_fifo_abort_tsg(ch->g, tsg, channel_preempt);
}
/* make sure new kickoffs are prevented */

View File

@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
#include <nvgpu/bug.h>
#include <nvgpu/kmem.h>
#include <nvgpu/log.h>
#include <nvgpu/os_sched.h>
@@ -149,18 +150,23 @@ int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg,
return 0;
}
/* The caller must ensure that channel belongs to a tsg */
int gk20a_tsg_unbind_channel(struct channel_gk20a *ch)
{
struct gk20a *g = ch->g;
struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid];
struct tsg_gk20a *tsg = tsg_gk20a_from_ch(ch);
int err;
if (tsg == NULL) {
return -EINVAL;
}
err = g->ops.fifo.tsg_unbind_channel(ch);
if (err) {
nvgpu_err(g, "Channel %d unbind failed, tearing down TSG %d",
ch->chid, tsg->tsgid);
gk20a_fifo_abort_tsg(ch->g, ch->tsgid, true);
gk20a_fifo_abort_tsg(ch->g, tsg, true);
/* If channel unbind fails, channel is still part of runlist */
channel_gk20a_update_runlist(ch, false);

View File

@@ -1553,17 +1553,16 @@ void gk20a_fifo_set_ctx_mmu_error_tsg(struct gk20a *g,
}
void gk20a_fifo_abort_tsg(struct gk20a *g, u32 tsgid, bool preempt)
void gk20a_fifo_abort_tsg(struct gk20a *g, struct tsg_gk20a *tsg, bool preempt)
{
struct tsg_gk20a *tsg = &g->fifo.tsg[tsgid];
struct channel_gk20a *ch;
struct channel_gk20a *ch = NULL;
nvgpu_log_fn(g, " ");
g->ops.fifo.disable_tsg(tsg);
if (preempt) {
g->ops.fifo.preempt_tsg(g, tsgid);
g->ops.fifo.preempt_tsg(g, tsg->tsgid);
}
nvgpu_rwsem_down_read(&tsg->ch_list_lock);
@@ -1809,7 +1808,7 @@ static bool gk20a_fifo_handle_mmu_fault_locked(
tsg);
}
verbose = gk20a_fifo_error_tsg(g, tsg);
gk20a_fifo_abort_tsg(g, tsg->tsgid, false);
gk20a_fifo_abort_tsg(g, tsg, false);
}
/* put back the ref taken early above */
@@ -1998,7 +1997,7 @@ void gk20a_fifo_recover_tsg(struct gk20a *g, u32 tsgid, bool verbose,
gk20a_debug_dump(g);
}
gk20a_fifo_abort_tsg(g, tsgid, false);
gk20a_fifo_abort_tsg(g, tsg, false);
}
gr_gk20a_enable_ctxsw(g);

View File

@@ -287,7 +287,7 @@ u32 gk20a_fifo_get_failing_engine_data(struct gk20a *g,
int *__id, bool *__is_tsg);
void gk20a_fifo_set_ctx_mmu_error_tsg(struct gk20a *g,
struct tsg_gk20a *tsg);
void gk20a_fifo_abort_tsg(struct gk20a *g, u32 tsgid, bool preempt);
void gk20a_fifo_abort_tsg(struct gk20a *g, struct tsg_gk20a *tsg, bool preempt);
void gk20a_fifo_set_ctx_mmu_error_ch(struct gk20a *g,
struct channel_gk20a *refch);
bool gk20a_fifo_error_tsg(struct gk20a *g, struct tsg_gk20a *tsg);

View File

@@ -974,7 +974,7 @@ static void gv11b_fifo_locked_abort_runlist_active_tsgs(struct gk20a *g,
rlid);
}
gk20a_fifo_abort_tsg(g, tsg->tsgid, false);
gk20a_fifo_abort_tsg(g, tsg, false);
nvgpu_log(g, gpu_dbg_info, "aborted tsg id %d", tsgid);
}
@@ -1183,7 +1183,7 @@ void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
gk20a_fifo_set_ctx_mmu_error_tsg(g, tsg);
}
gk20a_fifo_abort_tsg(g, tsg->tsgid, false);
gk20a_fifo_abort_tsg(g, tsg, false);
}
} else {
gv11b_fifo_locked_abort_runlist_active_tsgs(g, rc_type,