From 1ad9f93e8da8245237b01bea23b0a61bd42be9b8 Mon Sep 17 00:00:00 2001 From: Sandrine Bailleux Date: Fri, 22 Apr 2016 13:00:19 +0100 Subject: [PATCH 1/2] Validate psci_cpu_on_start() arguments This patch introduces some debug assertions in the function psci_cpu_on_start() to check the arguments it receives are valid. Change-Id: If4d23c9f668fb46f2d18c5e2ed1929498cc6736b --- services/std_svc/psci/psci_on.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/std_svc/psci/psci_on.c b/services/std_svc/psci/psci_on.c index 200e62225b..9d2295e7e7 100644 --- a/services/std_svc/psci/psci_on.c +++ b/services/std_svc/psci/psci_on.c @@ -74,6 +74,10 @@ int psci_cpu_on_start(u_register_t target_cpu, unsigned int target_idx = plat_core_pos_by_mpidr(target_cpu); aff_info_state_t target_aff_state; + /* Calling function must supply valid input arguments */ + assert((int) target_idx >= 0); + assert(ep != NULL); + /* * This function must only be called on platforms where the * CPU_ON platform hooks have been implemented. From 22b09c1721ca25a93918e2f2b76ffcb5c5e13f1e Mon Sep 17 00:00:00 2001 From: Sandrine Bailleux Date: Mon, 25 Apr 2016 09:28:43 +0100 Subject: [PATCH 2/2] Remove unused argument in psci_cpu_on_start() The "end power level" value passed as the 3rd argument to the psci_cpu_on_start() function is not used so this patch removes it. Change-Id: Icaa68b8c4ecd94507287970455fbff354faaa41e --- services/std_svc/psci/psci_main.c | 7 +------ services/std_svc/psci/psci_on.c | 3 +-- services/std_svc/psci/psci_private.h | 3 +-- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/services/std_svc/psci/psci_main.c b/services/std_svc/psci/psci_main.c index e6cd3a3a4d..68ad5f632e 100644 --- a/services/std_svc/psci/psci_main.c +++ b/services/std_svc/psci/psci_main.c @@ -47,7 +47,6 @@ int psci_cpu_on(u_register_t target_cpu, { int rc; - unsigned int end_pwrlvl; entry_point_info_t ep; /* Determine if the cpu exists of not */ @@ -64,11 +63,7 @@ int psci_cpu_on(u_register_t target_cpu, * To turn this cpu on, specify which power * levels need to be turned on */ - end_pwrlvl = PLAT_MAX_PWR_LVL; - rc = psci_cpu_on_start(target_cpu, - &ep, - end_pwrlvl); - return rc; + return psci_cpu_on_start(target_cpu, &ep); } unsigned int psci_version(void) diff --git a/services/std_svc/psci/psci_on.c b/services/std_svc/psci/psci_on.c index 9d2295e7e7..c8c36cd0f0 100644 --- a/services/std_svc/psci/psci_on.c +++ b/services/std_svc/psci/psci_on.c @@ -67,8 +67,7 @@ static int cpu_on_validate_state(aff_info_state_t aff_state) * platform handler as it can return error. ******************************************************************************/ int psci_cpu_on_start(u_register_t target_cpu, - entry_point_info_t *ep, - unsigned int end_pwrlvl) + entry_point_info_t *ep) { int rc; unsigned int target_idx = plat_core_pos_by_mpidr(target_cpu); diff --git a/services/std_svc/psci/psci_private.h b/services/std_svc/psci/psci_private.h index 4b91ad530b..8a671b39d7 100644 --- a/services/std_svc/psci/psci_private.h +++ b/services/std_svc/psci/psci_private.h @@ -203,8 +203,7 @@ int psci_spd_migrate_info(u_register_t *mpidr); /* Private exported functions from psci_on.c */ int psci_cpu_on_start(unsigned long target_cpu, - entry_point_info_t *ep, - unsigned int end_pwrlvl); + entry_point_info_t *ep); void psci_cpu_on_finish(unsigned int cpu_idx, psci_power_state_t *state_info);