diff options
author | Mohit Aggarwal <maggarwa@codeaurora.org> | 2017-05-05 21:01:41 +0530 |
---|---|---|
committer | Mohit Aggarwal <maggarwa@codeaurora.org> | 2017-05-08 11:55:40 +0530 |
commit | 2b612d1b72d33cc050d262d97435e96f7c41b410 (patch) | |
tree | 3df82da258da0e5c8c0aa63ab3c114ec23becb92 | |
parent | 9416e47b01b79bdde69200f10ffa0992dc407ec2 (diff) |
memshare: Add guard bytes to avoid access issues
Currently, TZ is performing merging of resource groups
due to which NOC error is happening during access of
memory allocated to diag. This patch fixes the issue
by adding guard bytes so that merging of resource
groups will not happen.
CRs-Fixed: 2026525
Change-Id: I9829e5a07aef723c4261aa16dd5274cfeb1a75a3
Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
-rw-r--r-- | drivers/soc/qcom/memshare/msm_memshare.c | 11 | ||||
-rw-r--r-- | drivers/soc/qcom/memshare/msm_memshare.h | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/drivers/soc/qcom/memshare/msm_memshare.c b/drivers/soc/qcom/memshare/msm_memshare.c index b8417513ca55..c11114528d2a 100644 --- a/drivers/soc/qcom/memshare/msm_memshare.c +++ b/drivers/soc/qcom/memshare/msm_memshare.c @@ -498,6 +498,7 @@ static int handle_alloc_generic_req(void *req_h, void *req, void *conn_h) struct mem_alloc_generic_resp_msg_v01 *alloc_resp; int rc, resp = 0; int client_id; + uint32_t size = 0; alloc_req = (struct mem_alloc_generic_req_msg_v01 *)req; pr_debug("memshare: alloc request client id: %d proc _id: %d\n", @@ -528,7 +529,11 @@ static int handle_alloc_generic_req(void *req_h, void *req, void *conn_h) __func__, memblock[client_id].client_id, memblock[client_id].free_memory); if (!memblock[client_id].alloted) { - rc = memshare_alloc(memsh_drv->dev, alloc_req->num_bytes, + if (alloc_req->client_id == 1 && alloc_req->num_bytes > 0) + size = alloc_req->num_bytes + MEMSHARE_GUARD_BYTES; + else + size = alloc_req->num_bytes; + rc = memshare_alloc(memsh_drv->dev, size, &memblock[client_id]); if (rc) { pr_err("In %s,Unable to allocate memory for requested client\n", @@ -963,8 +968,10 @@ static int memshare_child_probe(struct platform_device *pdev) * Memshare allocation for guaranteed clients */ if (memblock[num_clients].guarantee) { + if (client_id == 1 && size > 0) + size += MEMSHARE_GUARD_BYTES; rc = memshare_alloc(memsh_child->dev, - memblock[num_clients].size, + size, &memblock[num_clients]); if (rc) { pr_err("In %s, Unable to allocate memory for guaranteed clients, rc: %d\n", diff --git a/drivers/soc/qcom/memshare/msm_memshare.h b/drivers/soc/qcom/memshare/msm_memshare.h index 398907532977..c7123fb1314b 100644 --- a/drivers/soc/qcom/memshare/msm_memshare.h +++ b/drivers/soc/qcom/memshare/msm_memshare.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -24,6 +24,7 @@ #define GPS 0 #define CHECK 0 #define FREE 1 +#define MEMSHARE_GUARD_BYTES (4*1024) struct mem_blocks { /* Client Id information */ |