mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 01:57:08 +07:00
drm/nouveau/fifo/gk104-: ACK SCHED_ERROR before attempting CTXSW_TIMEOUT recovery
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
91b9d659ab
commit
03f16f5f27
@ -338,10 +338,17 @@ gk104_fifo_sched_reason[] = {
|
|||||||
static void
|
static void
|
||||||
gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo)
|
gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo)
|
||||||
{
|
{
|
||||||
|
struct nvkm_device *device = fifo->base.engine.subdev.device;
|
||||||
unsigned long flags, engm = 0;
|
unsigned long flags, engm = 0;
|
||||||
u32 engn;
|
u32 engn;
|
||||||
|
|
||||||
|
/* We need to ACK the SCHED_ERROR here, and prevent it reasserting,
|
||||||
|
* as MMU_FAULT cannot be triggered while it's pending.
|
||||||
|
*/
|
||||||
spin_lock_irqsave(&fifo->base.lock, flags);
|
spin_lock_irqsave(&fifo->base.lock, flags);
|
||||||
|
nvkm_mask(device, 0x002140, 0x00000100, 0x00000000);
|
||||||
|
nvkm_wr32(device, 0x002100, 0x00000100);
|
||||||
|
|
||||||
for (engn = 0; engn < fifo->engine_nr; engn++) {
|
for (engn = 0; engn < fifo->engine_nr; engn++) {
|
||||||
struct gk104_fifo_engine_status status;
|
struct gk104_fifo_engine_status status;
|
||||||
|
|
||||||
@ -355,6 +362,7 @@ gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo)
|
|||||||
for_each_set_bit(engn, &engm, fifo->engine_nr)
|
for_each_set_bit(engn, &engm, fifo->engine_nr)
|
||||||
gk104_fifo_recover_engn(fifo, engn);
|
gk104_fifo_recover_engn(fifo, engn);
|
||||||
|
|
||||||
|
nvkm_mask(device, 0x002140, 0x00000100, 0x00000100);
|
||||||
spin_unlock_irqrestore(&fifo->base.lock, flags);
|
spin_unlock_irqrestore(&fifo->base.lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user