Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a969e163 authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher
Browse files

drm/amd/powerplay: add powerplay valid check to avoid null point. (v2)



In case CONFIG_DRM_AMD_POWERPLAY is defined and amdgpu.powerplay=0.
some functions in powrplay can also be called by DAL. and the input parameter is *adev.
if just check point not NULL was not enough and will lead to NULL point error.

V2: AGD: rebase on upstream

Signed-off-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c15c8d70
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -30,6 +30,12 @@
#include "power_state.h"
#include "eventmanager.h"

#define PP_CHECK(handle)						\
	do {								\
		if ((handle) == NULL || (handle)->pp_valid != PP_VALID)	\
			return -EINVAL;					\
	} while (0)

static int pp_early_init(void *handle)
{
	return 0;
@@ -537,6 +543,8 @@ static int amd_pp_instance_init(struct amd_pp_init *pp_init,
	if (handle == NULL)
		return -ENOMEM;

	handle->pp_valid = PP_VALID;

	ret = smum_init(pp_init, handle);
	if (ret)
		goto fail_smum;
@@ -611,8 +619,7 @@ int amd_powerplay_display_configuration_change(void *handle, const void *input)
	struct pp_hwmgr  *hwmgr;
	const struct amd_pp_display_configuration *display_config = input;

	if (handle == NULL)
		return -EINVAL;
	PP_CHECK((struct pp_instance *)handle);

	hwmgr = ((struct pp_instance *)handle)->hwmgr;

@@ -625,7 +632,9 @@ int amd_powerplay_get_display_power_level(void *handle,
{
	struct pp_hwmgr  *hwmgr;

	if (handle == NULL || output == NULL)
	PP_CHECK((struct pp_instance *)handle);

	if (output == NULL)
		return -EINVAL;

	hwmgr = ((struct pp_instance *)handle)->hwmgr;
+3 −0
Original line number Diff line number Diff line
@@ -27,7 +27,10 @@
#include "hwmgr.h"
#include "eventmgr.h"

#define PP_VALID  0x1F1F1F1F

struct pp_instance {
	uint32_t pp_valid;
	struct pp_smumgr *smu_mgr;
	struct pp_hwmgr *hwmgr;
	struct pp_eventmgr *eventmgr;