From c66d002838b19e5d5b733f75bc81832c51482410 Mon Sep 17 00:00:00 2001 From: You-Sheng Yang Date: Wed, 17 Apr 2019 10:02:37 +0800 Subject: [PATCH] drm/amdgpu: dump amdgpu_wb usage BugLink: https://bugs.launchpad.net/somerville/+bug/1824453 --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index c90346191e5ac..112996fa818f2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1162,6 +1162,7 @@ struct amdgpu_wb { volatile uint32_t *wb; uint64_t gpu_addr; u32 num_wb; /* Number of wb slots actually reserved for amdgpu. */ + u32 free_wb; /* Number of wb slots actually reserved for amdgpu. */ unsigned long used[DIV_ROUND_UP(AMDGPU_MAX_WB, BITS_PER_LONG)]; }; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 1e3461ec43919..92efa0b53a7e7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -522,7 +522,7 @@ static int amdgpu_wb_init(struct amdgpu_device *adev) return r; } - adev->wb.num_wb = AMDGPU_MAX_WB; + adev->wb.num_wb = adev->wb.free_wb = AMDGPU_MAX_WB; memset(&adev->wb.used, 0, sizeof(adev->wb.used)); /* clear wb memory */ @@ -547,7 +547,9 @@ int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb) if (offset < adev->wb.num_wb) { __set_bit(offset, adev->wb.used); + adev->wb.free_wb -= 1; *wb = offset << 3; /* convert to dw offset */ + dev_warn(adev->dev, "amdgpu_wb_get(), wb=%u free_wb=%u\n", *wb, adev->wb.free_wb); return 0; } else { return -EINVAL; @@ -564,8 +566,12 @@ int amdgpu_wb_get(struct amdgpu_device *adev, u32 *wb) */ void amdgpu_wb_free(struct amdgpu_device *adev, u32 wb) { - if (wb < adev->wb.num_wb) + if (wb < adev->wb.num_wb) { __clear_bit(wb >> 3, adev->wb.used); + adev->wb.free_wb += 1; + dev_warn(adev->dev, "amdgpu_wb_free(), wb=%u free_wb=%u\n", wb, adev->wb.free_wb); + } else + dev_warn(adev->dev, "amdgpu_wb_free(), invalid wb=%u\n", wb); } /** -- 2.20.1