From: Danilo Krummrich <dakr@redhat.com>
To: airlied@gmail.com, daniel@ffwll.ch, tzimmermann@suse.de,
	mripard@kernel.org, corbet@lwn.net, christian.koenig@amd.com,
	bskeggs@redhat.com, Liam.Howlett@oracle.com,
	matthew.brost@intel.com, boris.brezillon@collabora.com,
	alexdeucher@gmail.com, ogabbay@kernel.org, bagasdotme@gmail.com,
	willy@infradead.org, jason@jlekstrand.net
Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
	linux-doc@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, Danilo Krummrich <dakr@redhat.com>
Subject: [PATCH drm-next v3 12/15] drm/nouveau: chan: provide nouveau_channel_kill()
Date: Tue,  4 Apr 2023 03:27:38 +0200	[thread overview]
Message-ID: <20230404012741.116502-13-dakr@redhat.com> (raw)
In-Reply-To: <20230404012741.116502-1-dakr@redhat.com>
The new VM_BIND UAPI implementation introduced in subsequent commits
will allow asynchronous jobs processing push buffers and emitting fences.
If a job times out, we need a way to recover from this situation. For
now, simply kill the channel to unblock all hung up jobs and signal
userspace that the device is dead on the next EXEC or VM_BIND ioctl.
Signed-off-by: Danilo Krummrich <dakr@redhat.com>
---
 drivers/gpu/drm/nouveau/nouveau_chan.c | 14 +++++++++++---
 drivers/gpu/drm/nouveau/nouveau_chan.h |  1 +
 2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c
index f47c0363683c..a975f8b0e0e5 100644
--- a/drivers/gpu/drm/nouveau/nouveau_chan.c
+++ b/drivers/gpu/drm/nouveau/nouveau_chan.c
@@ -40,6 +40,14 @@ MODULE_PARM_DESC(vram_pushbuf, "Create DMA push buffers in VRAM");
 int nouveau_vram_pushbuf;
 module_param_named(vram_pushbuf, nouveau_vram_pushbuf, int, 0400);
 
+void
+nouveau_channel_kill(struct nouveau_channel *chan)
+{
+	atomic_set(&chan->killed, 1);
+	if (chan->fence)
+		nouveau_fence_context_kill(chan->fence, -ENODEV);
+}
+
 static int
 nouveau_channel_killed(struct nvif_event *event, void *repv, u32 repc)
 {
@@ -47,9 +55,9 @@ nouveau_channel_killed(struct nvif_event *event, void *repv, u32 repc)
 	struct nouveau_cli *cli = (void *)chan->user.client;
 
 	NV_PRINTK(warn, cli, "channel %d killed!\n", chan->chid);
-	atomic_set(&chan->killed, 1);
-	if (chan->fence)
-		nouveau_fence_context_kill(chan->fence, -ENODEV);
+
+	if (unlikely(!atomic_read(&chan->killed)))
+		nouveau_channel_kill(chan);
 
 	return NVIF_EVENT_DROP;
 }
diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.h b/drivers/gpu/drm/nouveau/nouveau_chan.h
index e06a8ffed31a..e483f4a254da 100644
--- a/drivers/gpu/drm/nouveau/nouveau_chan.h
+++ b/drivers/gpu/drm/nouveau/nouveau_chan.h
@@ -65,6 +65,7 @@ int  nouveau_channel_new(struct nouveau_drm *, struct nvif_device *, bool priv,
 			 u32 vram, u32 gart, struct nouveau_channel **);
 void nouveau_channel_del(struct nouveau_channel **);
 int  nouveau_channel_idle(struct nouveau_channel *);
+void nouveau_channel_kill(struct nouveau_channel *);
 
 extern int nouveau_vram_pushbuf;
 
-- 
2.39.2
next prev parent reply	other threads:[~2023-04-04  1:30 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-04  1:27 [PATCH drm-next v3 00/15] [RFC] DRM GPUVA Manager & Nouveau VM_BIND UAPI Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 01/15] drm: execution context for GEM buffers v3 Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 02/15] drm_exec: fix double dma_resv unlock Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 03/15] maple_tree: split up MA_STATE() macro Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 04/15] drm: manager to keep track of GPUs VA mappings Danilo Krummrich
2023-04-04  5:29   ` kernel test robot
2023-04-21 10:46   ` Boris Brezillon
2023-04-28 10:18   ` Boris Brezillon
2023-04-04  1:27 ` [PATCH drm-next v3 05/15] drm: debugfs: provide infrastructure to dump a DRM GPU VA space Danilo Krummrich
2023-04-04  4:05   ` kernel test robot
2023-04-04  8:36   ` kernel test robot
2023-04-04  1:27 ` [PATCH drm-next v3 06/15] drm/nouveau: new VM_BIND uapi interfaces Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 07/15] drm/nouveau: get vmm via nouveau_cli_vmm() Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 08/15] drm/nouveau: bo: initialize GEM GPU VA interface Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 09/15] drm/nouveau: move usercopy helpers to nouveau_drv.h Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 10/15] drm/nouveau: fence: separate fence alloc and emit Danilo Krummrich
2023-04-04  7:55   ` kernel test robot
2023-04-04  1:27 ` [PATCH drm-next v3 11/15] drm/nouveau: fence: fail to emit when fence context is killed Danilo Krummrich
2023-04-04  1:27 ` Danilo Krummrich [this message]
2023-04-04  1:27 ` [PATCH drm-next v3 13/15] drm/nouveau: nvkm/vmm: implement raw ops to manage uvmm Danilo Krummrich
2023-04-04  5:50   ` kernel test robot
2023-04-04  1:27 ` [PATCH drm-next v3 14/15] drm/nouveau: implement new VM_BIND uAPI Danilo Krummrich
2023-04-04  1:27 ` [PATCH drm-next v3 15/15] drm/nouveau: debugfs: implement DRM GPU VA debugfs Danilo Krummrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox
  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):
  git send-email \
    --in-reply-to=20230404012741.116502-13-dakr@redhat.com \
    --to=dakr@redhat.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=airlied@gmail.com \
    --cc=alexdeucher@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=boris.brezillon@collabora.com \
    --cc=bskeggs@redhat.com \
    --cc=christian.koenig@amd.com \
    --cc=corbet@lwn.net \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jason@jlekstrand.net \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matthew.brost@intel.com \
    --cc=mripard@kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=ogabbay@kernel.org \
    --cc=tzimmermann@suse.de \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY
  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
  Be sure your reply has a Subject: header at the top and a blank line
  before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).