mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
drm/amdgpu: check df_funcs and its callback pointers
in case they are not avaiable in early phase Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> Reviewed-by: Le Ma <Le.Ma@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
4ac955baa9
commit
cace4bff75
@@ -233,6 +233,10 @@ static void amdgpu_perf_start(struct perf_event *event, int flags)
|
||||
if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED)))
|
||||
return;
|
||||
|
||||
if ((!pe->adev->df.funcs) ||
|
||||
(!pe->adev->df.funcs->pmc_start))
|
||||
return;
|
||||
|
||||
WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE));
|
||||
hwc->state = 0;
|
||||
|
||||
@@ -268,6 +272,10 @@ static void amdgpu_perf_read(struct perf_event *event)
|
||||
pmu);
|
||||
u64 count, prev;
|
||||
|
||||
if ((!pe->adev->df.funcs) ||
|
||||
(!pe->adev->df.funcs->pmc_get_count))
|
||||
return;
|
||||
|
||||
do {
|
||||
prev = local64_read(&hwc->prev_count);
|
||||
|
||||
@@ -297,6 +305,10 @@ static void amdgpu_perf_stop(struct perf_event *event, int flags)
|
||||
if (hwc->state & PERF_HES_UPTODATE)
|
||||
return;
|
||||
|
||||
if ((!pe->adev->df.funcs) ||
|
||||
(!pe->adev->df.funcs->pmc_stop))
|
||||
return;
|
||||
|
||||
switch (hwc->config_base) {
|
||||
case AMDGPU_PMU_EVENT_CONFIG_TYPE_DF:
|
||||
case AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI:
|
||||
@@ -326,6 +338,10 @@ static int amdgpu_perf_add(struct perf_event *event, int flags)
|
||||
struct amdgpu_pmu_entry,
|
||||
pmu);
|
||||
|
||||
if ((!pe->adev->df.funcs) ||
|
||||
(!pe->adev->df.funcs->pmc_start))
|
||||
return -EINVAL;
|
||||
|
||||
switch (pe->pmu_perf_type) {
|
||||
case AMDGPU_PMU_PERF_TYPE_DF:
|
||||
hwc->config_base = AMDGPU_PMU_EVENT_CONFIG_TYPE_DF;
|
||||
@@ -371,6 +387,9 @@ static void amdgpu_perf_del(struct perf_event *event, int flags)
|
||||
struct amdgpu_pmu_entry *pe = container_of(event->pmu,
|
||||
struct amdgpu_pmu_entry,
|
||||
pmu);
|
||||
if ((!pe->adev->df.funcs) ||
|
||||
(!pe->adev->df.funcs->pmc_stop))
|
||||
return;
|
||||
|
||||
amdgpu_perf_stop(event, PERF_EF_UPDATE);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user