diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/fifo/tsg.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/fifo/tsg.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/common/fifo/tsg.c b/drivers/gpu/nvgpu/common/fifo/tsg.c index 841dd465..ebcdd2be 100644 --- a/drivers/gpu/nvgpu/common/fifo/tsg.c +++ b/drivers/gpu/nvgpu/common/fifo/tsg.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
@@ -148,7 +148,7 @@ int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg, | |||
148 | } | 148 | } |
149 | 149 | ||
150 | /* The caller must ensure that channel belongs to a tsg */ | 150 | /* The caller must ensure that channel belongs to a tsg */ |
151 | int gk20a_tsg_unbind_channel(struct channel_gk20a *ch) | 151 | int gk20a_tsg_unbind_channel(struct channel_gk20a *ch, bool force) |
152 | { | 152 | { |
153 | struct gk20a *g = ch->g; | 153 | struct gk20a *g = ch->g; |
154 | struct tsg_gk20a *tsg = tsg_gk20a_from_ch(ch); | 154 | struct tsg_gk20a *tsg = tsg_gk20a_from_ch(ch); |
@@ -159,6 +159,11 @@ int gk20a_tsg_unbind_channel(struct channel_gk20a *ch) | |||
159 | } | 159 | } |
160 | 160 | ||
161 | err = gk20a_fifo_tsg_unbind_channel(ch); | 161 | err = gk20a_fifo_tsg_unbind_channel(ch); |
162 | |||
163 | if (!force && err == -EAGAIN) { | ||
164 | return err; | ||
165 | } | ||
166 | |||
162 | if (err) { | 167 | if (err) { |
163 | nvgpu_err(g, "Channel %d unbind failed, tearing down TSG %d", | 168 | nvgpu_err(g, "Channel %d unbind failed, tearing down TSG %d", |
164 | ch->chid, tsg->tsgid); | 169 | ch->chid, tsg->tsgid); |