nouveau: add ioctl wrapper to check for dead channels

v2: explicitly set nr_push to 0 as well

Signed-off-by: Karol Herbst <kherbst@redhat.com>
main
Karol Herbst 2021-08-03 19:29:04 +02:00
parent d95b12e7e3
commit 678a32b98f
3 changed files with 21 additions and 0 deletions

View File

@ -12,6 +12,7 @@ nouveau_bufctx_mthd
nouveau_bufctx_new
nouveau_bufctx_refn
nouveau_bufctx_reset
nouveau_check_dead_channel
nouveau_client_del
nouveau_client_new
nouveau_device_del

View File

@ -273,4 +273,8 @@ struct nv04_notify {
uint32_t offset;
uint32_t length;
};
bool
nouveau_check_dead_channel(struct nouveau_drm *, struct nouveau_object *chan);
#endif

View File

@ -782,3 +782,19 @@ nouveau_pushbuf_kick(struct nouveau_pushbuf *push, struct nouveau_object *chan)
pushbuf_flush(push);
return pushbuf_validate(push, false);
}
drm_public bool
nouveau_check_dead_channel(struct nouveau_drm *drm, struct nouveau_object *chan)
{
struct drm_nouveau_gem_pushbuf req = {};
struct nouveau_fifo *fifo = chan->data;
int ret;
req.channel = fifo->channel;
req.nr_push = 0;
ret = drmCommandWriteRead(drm->fd, DRM_NOUVEAU_GEM_PUSHBUF,
&req, sizeof(req));
/* nouveau returns ENODEV once the channel was killed */
return ret == -ENODEV;
}