summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Nelson <eric.nelson@boundarydevices.com>2014-06-21 10:52:48 -0700
committerOtavio Salvador <otavio@ossystems.com.br>2014-06-25 14:21:11 -0300
commitb3cf9ce918cd4fcbc5c39ade47d384414ea590ed (patch)
tree34179c5b95d9bff13926b13945c7fad198bc13ca
parentf5bf277a5a5fba2c3b64ed7d2dbec1903d96386b (diff)
downloadmeta-fsl-arm-b3cf9ce918cd4fcbc5c39ade47d384414ea590ed.tar.gz
imx-vpu: fix checks of IOGetVirtMem() return value
The IOGetVirtMem() routine returns the address of a memory block or -1 (MAP_FAILED) to indicate an error. Many callers of this routine tested the return value for <= 0 to detect failure, and at least with a 3G/1G memory split configured in the kernel, a negative number (!= -1) is a valid (successful) return value. Without this patch, the IOSystemInit() will often detect failure incorrectly. Change-Id: I8b20ae5f74608307cbb810168024e8863599dbdb Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
-rw-r--r--recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch83
-rw-r--r--recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb2
2 files changed, 85 insertions, 0 deletions
diff --git a/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch b/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch
new file mode 100644
index 0000000..348a536
--- /dev/null
+++ b/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch
@@ -0,0 +1,83 @@
1From 3f3e374391ddc5e605f604e5bcdf95e29b1bcc39 Mon Sep 17 00:00:00 2001
2From: Eric Nelson <eric.nelson@boundarydevices.com>
3Date: Fri, 20 Jun 2014 19:42:38 -0700
4Subject: [PATCH] IOGetVirtMem returns -1 (MAP_FAILED) on failure
5
6Upstream-Status: Pending
7
8Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
9---
10 vpu/vpu_io.c | 2 +-
11 vpu/vpu_io.h | 2 ++
12 vpu/vpu_lib.c | 8 ++++----
13 3 files changed, 7 insertions(+), 5 deletions(-)
14
15diff --git a/vpu/vpu_io.c b/vpu/vpu_io.c
16index 8cbb571..14759da 100644
17--- a/vpu/vpu_io.c
18+++ b/vpu/vpu_io.c
19@@ -265,7 +265,7 @@ int IOSystemInit(void *callback)
20 goto err;
21 }
22
23- if (IOGetVirtMem(&bit_work_addr) <= 0)
24+ if (IOGetVirtMem(&bit_work_addr) == -1)
25 goto err;
26 #endif
27 UnlockVpu(vpu_semap);
28diff --git a/vpu/vpu_io.h b/vpu/vpu_io.h
29index 392e04a..1e6340d 100644
30--- a/vpu/vpu_io.h
31+++ b/vpu/vpu_io.h
32@@ -64,6 +64,8 @@ int IOSystemInit(void *callback);
33 int IOSystemShutdown(void);
34 int IOGetPhyMem(vpu_mem_desc * buff);
35 int IOFreePhyMem(vpu_mem_desc * buff);
36+
37+/* returns -1 ((int)MAP_FAILED) on failure */
38 int IOGetVirtMem(vpu_mem_desc * buff);
39 int IOFreeVirtMem(vpu_mem_desc * buff);
40 int IOGetVShareMem(int size);
41diff --git a/vpu/vpu_lib.c b/vpu/vpu_lib.c
42index 1fb731b..7a7f42d 100644
43--- a/vpu/vpu_lib.c
44+++ b/vpu/vpu_lib.c
45@@ -1764,7 +1764,7 @@ RetCode vpu_EncStartOneFrame(EncHandle handle, EncParam * param)
46 err_msg("Unable to obtain physical mem\n");
47 return RETCODE_FAILURE;
48 }
49- if (IOGetVirtMem(&pEncInfo->picParaBaseMem) <= 0) {
50+ if (IOGetVirtMem(&pEncInfo->picParaBaseMem) == -1) {
51 IOFreePhyMem(&pEncInfo->picParaBaseMem);
52 pEncInfo->picParaBaseMem.phy_addr = 0;
53 err_msg("Unable to obtain virtual mem\n");
54@@ -2982,7 +2982,7 @@ RetCode vpu_DecGetInitialInfo(DecHandle handle, DecInitialInfo * info)
55 UnlockVpu(vpu_semap);
56 return RETCODE_FAILURE;
57 }
58- if (IOGetVirtMem(&pDecInfo->userDataBufMem) <= 0) {
59+ if (IOGetVirtMem(&pDecInfo->userDataBufMem) == -1) {
60 IOFreePhyMem(&pDecInfo->userDataBufMem);
61 pDecInfo->userDataBufMem.phy_addr = 0;
62 err_msg("Unable to obtain virtual mem\n");
63@@ -4017,7 +4017,7 @@ RetCode vpu_DecStartOneFrame(DecHandle handle, DecParam * param)
64 UnlockVpu(vpu_semap);
65 return RETCODE_FAILURE;
66 }
67- if (IOGetVirtMem(&pDecInfo->picParaBaseMem) <= 0) {
68+ if (IOGetVirtMem(&pDecInfo->picParaBaseMem) == -1) {
69 IOFreePhyMem(&pDecInfo->picParaBaseMem);
70 pDecInfo->picParaBaseMem.phy_addr = 0;
71 err_msg("Unable to obtain virtual mem\n");
72@@ -4057,7 +4057,7 @@ RetCode vpu_DecStartOneFrame(DecHandle handle, DecParam * param)
73 UnlockVpu(vpu_semap);
74 return RETCODE_FAILURE;
75 }
76- if (IOGetVirtMem(&pDecInfo->userDataBufMem) <= 0) {
77+ if (IOGetVirtMem(&pDecInfo->userDataBufMem) == -1) {
78 IOFreePhyMem(&pDecInfo->userDataBufMem);
79 pDecInfo->userDataBufMem.phy_addr = 0;
80 err_msg("Unable to obtain virtual mem\n");
81--
821.9.1
83
diff --git a/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb b/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb
index ce07766..7ed9590 100644
--- a/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb
+++ b/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb
@@ -7,4 +7,6 @@ PE = "1"
7SRC_URI[md5sum] = "71ea1b803864101ebf88a1bab45514d2" 7SRC_URI[md5sum] = "71ea1b803864101ebf88a1bab45514d2"
8SRC_URI[sha256sum] = "cd8a7bd50ff3274db76a331cc6622d3ba4bb7c790ce778f303e49187df2dfd72" 8SRC_URI[sha256sum] = "cd8a7bd50ff3274db76a331cc6622d3ba4bb7c790ce778f303e49187df2dfd72"
9 9
10SRC_URI_append = " file://0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch"
11
10COMPATIBLE_MACHINE = "(mx6)" 12COMPATIBLE_MACHINE = "(mx6)"