diff options
| author | Eric Nelson <eric.nelson@boundarydevices.com> | 2014-06-21 10:52:48 -0700 |
|---|---|---|
| committer | Otavio Salvador <otavio@ossystems.com.br> | 2014-06-25 13:29:04 -0300 |
| commit | 3f5c97a4c524a2fb9a4510e6e15f500a20871d67 (patch) | |
| tree | 28533105fda828ce4b338c90d7b74741a5f52233 | |
| parent | 605c8d7d843c96166cd4608316940f8da536a392 (diff) | |
| download | meta-freescale-3f5c97a4c524a2fb9a4510e6e15f500a20871d67.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-- | meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch | 83 | ||||
| -rw-r--r-- | meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb | 2 |
2 files changed, 85 insertions, 0 deletions
diff --git a/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch b/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch new file mode 100644 index 000000000..348a5360d --- /dev/null +++ b/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu/0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | From 3f3e374391ddc5e605f604e5bcdf95e29b1bcc39 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Eric Nelson <eric.nelson@boundarydevices.com> | ||
| 3 | Date: Fri, 20 Jun 2014 19:42:38 -0700 | ||
| 4 | Subject: [PATCH] IOGetVirtMem returns -1 (MAP_FAILED) on failure | ||
| 5 | |||
| 6 | Upstream-Status: Pending | ||
| 7 | |||
| 8 | Signed-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 | |||
| 15 | diff --git a/vpu/vpu_io.c b/vpu/vpu_io.c | ||
| 16 | index 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); | ||
| 28 | diff --git a/vpu/vpu_io.h b/vpu/vpu_io.h | ||
| 29 | index 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); | ||
| 41 | diff --git a/vpu/vpu_lib.c b/vpu/vpu_lib.c | ||
| 42 | index 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 | -- | ||
| 82 | 1.9.1 | ||
| 83 | |||
diff --git a/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb b/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb index ce07766a9..7ed9590ce 100644 --- a/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb +++ b/meta-fsl-arm/recipes-bsp/imx-vpu/imx-vpu_3.10.17-1.0.0.bb | |||
| @@ -7,4 +7,6 @@ PE = "1" | |||
| 7 | SRC_URI[md5sum] = "71ea1b803864101ebf88a1bab45514d2" | 7 | SRC_URI[md5sum] = "71ea1b803864101ebf88a1bab45514d2" |
| 8 | SRC_URI[sha256sum] = "cd8a7bd50ff3274db76a331cc6622d3ba4bb7c790ce778f303e49187df2dfd72" | 8 | SRC_URI[sha256sum] = "cd8a7bd50ff3274db76a331cc6622d3ba4bb7c790ce778f303e49187df2dfd72" |
| 9 | 9 | ||
| 10 | SRC_URI_append = " file://0001-IOGetVirtMem-returns-1-MAP_FAILED-on-failure.patch" | ||
| 11 | |||
| 10 | COMPATIBLE_MACHINE = "(mx6)" | 12 | COMPATIBLE_MACHINE = "(mx6)" |
