lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 8 Nov 2019 11:39:30 +0530
From:   Vinod Koul <vkoul@...nel.org>
To:     Elliot Berman <eberman@...eaurora.org>
Cc:     bjorn.andersson@...aro.org, saiprakash.ranjan@...eaurora.org,
        agross@...nel.org, tsoni@...eaurora.org, sidgup@...eaurora.org,
        psodagud@...eaurora.org, linux-arm-msm@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 06/17] firmware: qcom_scm-64: Add SCM results to
 descriptor

On 04-11-19, 17:27, Elliot Berman wrote:
> Remove knowledge of arm_smccc_res struct from client wrappers so that
> client wrappers only work QCOM SCM data structures. SCM calls may have
> up to 3 arguments, so qcom_scm_call_smccc is responsible now for filling
> those 3 arguments accordingly.
> 
> Signed-off-by: Elliot Berman <eberman@...eaurora.org>
> ---
>  drivers/firmware/qcom_scm-64.c | 105 ++++++++++++++++++-----------------------
>  1 file changed, 45 insertions(+), 60 deletions(-)
> 
> diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c
> index 76412a5..f6536fa 100644
> --- a/drivers/firmware/qcom_scm-64.c
> +++ b/drivers/firmware/qcom_scm-64.c
> @@ -50,6 +50,7 @@ struct qcom_scm_desc {
>  	u32 cmd;
>  	u32 arginfo;
>  	u64 args[MAX_QCOM_SCM_ARGS];
> +	u64 res[MAX_QCOM_SCM_RETS];
>  	u32 owner;
>  };
>  
> @@ -115,8 +116,7 @@ static void qcom_scm_call_do_smccc(const struct qcom_scm_desc *desc,
>  }
>  
>  static int ___qcom_scm_call_smccc(struct device *dev,
> -				  const struct qcom_scm_desc *desc,
> -				  struct arm_smccc_res *res, bool atomic)
> +				  struct qcom_scm_desc *desc, bool atomic)
>  {
>  	int arglen = desc->arginfo & 0xf;
>  	int i;
> @@ -125,6 +125,7 @@ static int ___qcom_scm_call_smccc(struct device *dev,
>  	void *args_virt = NULL;
>  	size_t alloc_len;
>  	gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL;
> +	struct arm_smccc_res res;
>  
>  	if (unlikely(arglen > SMCCC_N_REG_ARGS)) {
>  		alloc_len = SMCCC_N_EXT_ARGS * sizeof(u64);
> @@ -158,15 +159,19 @@ static int ___qcom_scm_call_smccc(struct device *dev,
>  		x5 = args_phys;
>  	}
>  
> -	qcom_scm_call_do_smccc(desc, res, x5, atomic);
> +	qcom_scm_call_do_smccc(desc, &res, x5, atomic);
>  
>  	if (args_virt) {
>  		dma_unmap_single(dev, args_phys, alloc_len, DMA_TO_DEVICE);
>  		kfree(args_virt);
>  	}
>  
> -	if (res->a0 < 0)
> -		return qcom_scm_remap_error(res->a0);
> +	desc->res[0] = res.a1;
> +	desc->res[1] = res.a2;
> +	desc->res[2] = res.a3;

res represents result, so can we rename this here and in qcom_scm_desc
as result, somehow I kept on reading this as res and got confused ;/ or
maybe it is just me!

-- 
~Vinod

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ