drm/i915/guc: Kick G2H tasklet if no credits
Let's be paranoid and kick the G2H tasklet, which dequeues messages, if G2H credits are exhausted. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: John Harrison <John.C.Harrison@Intel.com> Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211214170500.28569-7-matthew.brost@intel.com
This commit is contained in:
Родитель
6e94d53962
Коммит
2aa9f833dd
|
@ -591,12 +591,19 @@ static inline bool h2g_has_room(struct intel_guc_ct *ct, u32 len_dw)
|
||||||
|
|
||||||
static int has_room_nb(struct intel_guc_ct *ct, u32 h2g_dw, u32 g2h_dw)
|
static int has_room_nb(struct intel_guc_ct *ct, u32 h2g_dw, u32 g2h_dw)
|
||||||
{
|
{
|
||||||
|
bool h2g = h2g_has_room(ct, h2g_dw);
|
||||||
|
bool g2h = g2h_has_room(ct, g2h_dw);
|
||||||
|
|
||||||
lockdep_assert_held(&ct->ctbs.send.lock);
|
lockdep_assert_held(&ct->ctbs.send.lock);
|
||||||
|
|
||||||
if (unlikely(!h2g_has_room(ct, h2g_dw) || !g2h_has_room(ct, g2h_dw))) {
|
if (unlikely(!h2g || !g2h)) {
|
||||||
if (ct->stall_time == KTIME_MAX)
|
if (ct->stall_time == KTIME_MAX)
|
||||||
ct->stall_time = ktime_get();
|
ct->stall_time = ktime_get();
|
||||||
|
|
||||||
|
/* Be paranoid and kick G2H tasklet to free credits */
|
||||||
|
if (!g2h)
|
||||||
|
tasklet_hi_schedule(&ct->receive_tasklet);
|
||||||
|
|
||||||
if (unlikely(ct_deadlocked(ct)))
|
if (unlikely(ct_deadlocked(ct)))
|
||||||
return -EPIPE;
|
return -EPIPE;
|
||||||
else
|
else
|
||||||
|
|
Загрузка…
Ссылка в новой задаче