mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-17 23:40:29 +01:00
radv/amdgpu: add support quering the last GPUVM fault
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23238>
This commit is contained in:
parent
bdc62108be
commit
5eb8b3e9b1
2 changed files with 33 additions and 0 deletions
|
|
@ -226,6 +226,12 @@ enum {
|
|||
RADV_BO_PRIORITY_CS = 31,
|
||||
};
|
||||
|
||||
struct radv_winsys_gpuvm_fault_info {
|
||||
uint64_t addr;
|
||||
uint32_t status;
|
||||
uint32_t vmhub;
|
||||
};
|
||||
|
||||
struct radeon_winsys {
|
||||
void (*destroy)(struct radeon_winsys *ws);
|
||||
|
||||
|
|
@ -237,6 +243,8 @@ struct radeon_winsys {
|
|||
|
||||
const char *(*get_chip_name)(struct radeon_winsys *ws);
|
||||
|
||||
bool (*query_gpuvm_fault)(struct radeon_winsys *ws, struct radv_winsys_gpuvm_fault_info *fault_info);
|
||||
|
||||
VkResult (*buffer_create)(struct radeon_winsys *ws, uint64_t size, unsigned alignment, enum radeon_bo_domain domain,
|
||||
enum radeon_bo_flag flags, unsigned priority, uint64_t address,
|
||||
struct radeon_winsys_bo **out_bo);
|
||||
|
|
|
|||
|
|
@ -148,6 +148,30 @@ radv_amdgpu_winsys_get_chip_name(struct radeon_winsys *rws)
|
|||
return amdgpu_get_marketing_name(dev);
|
||||
}
|
||||
|
||||
static bool
|
||||
radv_amdgpu_winsys_query_gpuvm_fault(struct radeon_winsys *rws, struct radv_winsys_gpuvm_fault_info *fault_info)
|
||||
{
|
||||
struct radv_amdgpu_winsys *ws = (struct radv_amdgpu_winsys *)rws;
|
||||
struct drm_amdgpu_info_gpuvm_fault gpuvm_fault = {0};
|
||||
int r;
|
||||
|
||||
r = amdgpu_query_info(ws->dev, AMDGPU_INFO_GPUVM_FAULT, sizeof(gpuvm_fault), &gpuvm_fault);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "radv/amdgpu: Failed to query the last GPUVM fault (%d).\n", r);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* When the GPUVM fault status is 0, no faults happened. */
|
||||
if (!gpuvm_fault.status)
|
||||
return false;
|
||||
|
||||
fault_info->addr = gpuvm_fault.addr;
|
||||
fault_info->status = gpuvm_fault.status;
|
||||
fault_info->vmhub = gpuvm_fault.vmhub;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static simple_mtx_t winsys_creation_mutex = SIMPLE_MTX_INITIALIZER;
|
||||
static struct hash_table *winsyses = NULL;
|
||||
|
||||
|
|
@ -294,6 +318,7 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags,
|
|||
ws->base.query_value = radv_amdgpu_winsys_query_value;
|
||||
ws->base.read_registers = radv_amdgpu_winsys_read_registers;
|
||||
ws->base.get_chip_name = radv_amdgpu_winsys_get_chip_name;
|
||||
ws->base.query_gpuvm_fault = radv_amdgpu_winsys_query_gpuvm_fault;
|
||||
ws->base.destroy = radv_amdgpu_winsys_destroy;
|
||||
ws->base.get_fd = radv_amdgpu_winsys_get_fd;
|
||||
ws->base.get_sync_types = radv_amdgpu_winsys_get_sync_types;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue