mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-18 13:21:25 +00:00
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. Reviewed-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Danilo Krummrich <dakr@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230804182406.5222-10-dakr@redhat.com
74 lines
1.4 KiB
C
74 lines
1.4 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
#ifndef __NOUVEAU_CHAN_H__
|
|
#define __NOUVEAU_CHAN_H__
|
|
#include <nvif/object.h>
|
|
#include <nvif/event.h>
|
|
#include <nvif/push.h>
|
|
struct nvif_device;
|
|
|
|
struct nouveau_channel {
|
|
struct {
|
|
struct nvif_push _push;
|
|
struct nvif_push *push;
|
|
} chan;
|
|
|
|
struct nvif_device *device;
|
|
struct nouveau_drm *drm;
|
|
struct nouveau_vmm *vmm;
|
|
|
|
struct nvif_mem mem_userd;
|
|
struct nvif_object *userd;
|
|
|
|
int runlist;
|
|
int chid;
|
|
u64 inst;
|
|
u32 token;
|
|
|
|
struct nvif_object vram;
|
|
struct nvif_object gart;
|
|
struct nvif_object nvsw;
|
|
|
|
struct {
|
|
struct nouveau_bo *buffer;
|
|
struct nouveau_vma *vma;
|
|
struct nvif_object ctxdma;
|
|
u64 addr;
|
|
} push;
|
|
|
|
/* TODO: this will be reworked in the near future */
|
|
bool accel_done;
|
|
void *fence;
|
|
struct {
|
|
int max;
|
|
int free;
|
|
int cur;
|
|
int put;
|
|
int ib_base;
|
|
int ib_max;
|
|
int ib_free;
|
|
int ib_put;
|
|
} dma;
|
|
u32 user_get_hi;
|
|
u32 user_get;
|
|
u32 user_put;
|
|
|
|
struct nvif_object user;
|
|
struct nvif_object blit;
|
|
|
|
struct nvif_event kill;
|
|
atomic_t killed;
|
|
};
|
|
|
|
int nouveau_channels_init(struct nouveau_drm *);
|
|
void nouveau_channels_fini(struct nouveau_drm *);
|
|
|
|
int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *, bool priv, u64 runm,
|
|
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;
|
|
|
|
#endif
|