[5/6] soc: qcom: smem: fix qcom_smem_set_global_partition()

Message ID 20180410222542.29474-6-elder@linaro.org
State Accepted
Commit 8fa1a21409da6abfe890f66532f9fcd8d2c25a3d
Headers show
Series
  • Untitled series #10575
Related show

Commit Message

Alex Elder April 10, 2018, 10:25 p.m.
If there is at least one entry in the partition table, but no global
entry, the qcom_smem_set_global_partition() should return an error
just like it does if there are no partition table entries.

It turns out the function still returns an error in this case, but
it waits to do so until it has mistakenly treated the last entry in
the table as if it were the global entry found.

Fix the function to return immediately if no global entry is found
in the table.

Signed-off-by: Alex Elder <elder@linaro.org>

---
 drivers/soc/qcom/smem.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

-- 
2.14.1

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Bjorn Andersson April 25, 2018, 4:50 a.m. | #1
On Tue 10 Apr 15:25 PDT 2018, Alex Elder wrote:

> If there is at least one entry in the partition table, but no global

> entry, the qcom_smem_set_global_partition() should return an error

> just like it does if there are no partition table entries.

> 

> It turns out the function still returns an error in this case, but

> it waits to do so until it has mistakenly treated the last entry in

> the table as if it were the global entry found.

> 

> Fix the function to return immediately if no global entry is found

> in the table.

> 

> Signed-off-by: Alex Elder <elder@linaro.org>


Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>


Regards,
Bjorn

> ---

>  drivers/soc/qcom/smem.c | 9 ++++++---

>  1 file changed, 6 insertions(+), 3 deletions(-)

> 

> diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c

> index 0ed263055988..6e42599b70d4 100644

> --- a/drivers/soc/qcom/smem.c

> +++ b/drivers/soc/qcom/smem.c

> @@ -698,9 +698,10 @@ static u32 qcom_smem_get_item_count(struct qcom_smem *smem)

>  static int qcom_smem_set_global_partition(struct qcom_smem *smem)

>  {

>  	struct smem_partition_header *header;

> -	struct smem_ptable_entry *entry = NULL;

> +	struct smem_ptable_entry *entry;

>  	struct smem_ptable *ptable;

>  	u32 host0, host1, size;

> +	bool found = false;

>  	int i;

>  

>  	ptable = qcom_smem_get_ptable(smem);

> @@ -712,11 +713,13 @@ static int qcom_smem_set_global_partition(struct qcom_smem *smem)

>  		host0 = le16_to_cpu(entry->host0);

>  		host1 = le16_to_cpu(entry->host1);

>  

> -		if (host0 == SMEM_GLOBAL_HOST && host0 == host1)

> +		if (host0 == SMEM_GLOBAL_HOST && host0 == host1) {

> +			found = true;

>  			break;

> +		}

>  	}

>  

> -	if (!entry) {

> +	if (!found) {

>  		dev_err(smem->dev, "Missing entry for global partition\n");

>  		return -EINVAL;

>  	}

> -- 

> 2.14.1

> 

> --

> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in

> the body of a message to majordomo@vger.kernel.org

> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c
index 0ed263055988..6e42599b70d4 100644
--- a/drivers/soc/qcom/smem.c
+++ b/drivers/soc/qcom/smem.c
@@ -698,9 +698,10 @@  static u32 qcom_smem_get_item_count(struct qcom_smem *smem)
 static int qcom_smem_set_global_partition(struct qcom_smem *smem)
 {
 	struct smem_partition_header *header;
-	struct smem_ptable_entry *entry = NULL;
+	struct smem_ptable_entry *entry;
 	struct smem_ptable *ptable;
 	u32 host0, host1, size;
+	bool found = false;
 	int i;
 
 	ptable = qcom_smem_get_ptable(smem);
@@ -712,11 +713,13 @@  static int qcom_smem_set_global_partition(struct qcom_smem *smem)
 		host0 = le16_to_cpu(entry->host0);
 		host1 = le16_to_cpu(entry->host1);
 
-		if (host0 == SMEM_GLOBAL_HOST && host0 == host1)
+		if (host0 == SMEM_GLOBAL_HOST && host0 == host1) {
+			found = true;
 			break;
+		}
 	}
 
-	if (!entry) {
+	if (!found) {
 		dev_err(smem->dev, "Missing entry for global partition\n");
 		return -EINVAL;
 	}