From 63b0b4e154652897ae8c4dbe6228990d76d57b17 Mon Sep 17 00:00:00 2001 From: Pierre Peiffer Date: Tue, 20 Dec 2011 13:03:53 +0100 Subject: U8500 CM: fix crash when dumping domains info Fix a crash that happens when retrieving certain domains information through debugfs ST-Ericsson FOSS-OUT ID: Trivial ST-Ericsson ID: 405694 ST-Ericsson Linux next: NA Change-Id: Ia6940d1af6c696c00f630d56a9437f7bc7367667 Signed-off-by: Pierre Peiffer Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/43255 Reviewed-by: QABUILD --- drivers/staging/nmf-cm/cm/engine/dsp/src/dsp.c | 2 ++ drivers/staging/nmf-cm/cm_debug.c | 28 +++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/staging/nmf-cm/cm/engine/dsp/src/dsp.c b/drivers/staging/nmf-cm/cm/engine/dsp/src/dsp.c index 7646f6301de..ef11a5265aa 100644 --- a/drivers/staging/nmf-cm/cm/engine/dsp/src/dsp.c +++ b/drivers/staging/nmf-cm/cm/engine/dsp/src/dsp.c @@ -513,6 +513,8 @@ PUBLIC void cm_DSP_GetDspAddress(t_memory_handle memHandle, t_uint32 *pDspAddres PUBLIC t_cm_error cm_DSP_GetDspBaseAddress(t_nmf_core_id coreId, t_dsp_memory_type_id memType, t_cm_system_address *pAddr) { cm_migration_check_state(coreId, STATE_NORMAL); + if (mpcDesc[coreId].allocator[memType] == NULL) + return CM_INVALID_PARAMETER; *pAddr = mpcDesc[coreId].allocator[memType]->baseAddress; return CM_OK; } diff --git a/drivers/staging/nmf-cm/cm_debug.c b/drivers/staging/nmf-cm/cm_debug.c index b894c6b8e4a..ffb067c65d9 100644 --- a/drivers/staging/nmf-cm/cm_debug.c +++ b/drivers/staging/nmf-cm/cm_debug.c @@ -306,9 +306,10 @@ static ssize_t domain_read(struct file *file, char __user *userbuf, "address Size Free Used\n" "---------------------------------------" "-----------------------------------\n"); - if (domain->domain.esramCode.size) { - cm_DSP_GetDspBaseAddress(ARM_CORE_ID, - ESRAM_CODE, &addr); + if (domain->domain.esramCode.size && + cm_DSP_GetDspBaseAddress(ARM_CORE_ID, + ESRAM_CODE, + &addr) == CM_OK) { cm_DSP_GetInternalMemoriesInfo(id, ESRAM_CODE, &dOffset, &dSize); @@ -330,9 +331,10 @@ static ssize_t domain_read(struct file *file, char __user *userbuf, status.global.accumulate_free_memory, status.global.accumulate_used_memory); } - if (domain->domain.esramData.size) { - cm_DSP_GetDspBaseAddress(ARM_CORE_ID, - ESRAM_EXT24, &addr); + if (domain->domain.esramData.size && + cm_DSP_GetDspBaseAddress(ARM_CORE_ID, + ESRAM_EXT24, + &addr) == CM_OK) { cm_DSP_GetInternalMemoriesInfo(id, ESRAM_EXT24, &dOffset, &dSize); @@ -354,9 +356,10 @@ static ssize_t domain_read(struct file *file, char __user *userbuf, status.global.accumulate_free_memory, status.global.accumulate_used_memory); } - if (domain->domain.sdramCode.size) { - cm_DSP_GetDspBaseAddress(ARM_CORE_ID, - SDRAM_CODE, &addr); + if (domain->domain.sdramCode.size && + cm_DSP_GetDspBaseAddress(ARM_CORE_ID, + SDRAM_CODE, + &addr) == CM_OK) { cm_DSP_GetInternalMemoriesInfo(id, SDRAM_CODE, &dOffset, &dSize); @@ -378,9 +381,10 @@ static ssize_t domain_read(struct file *file, char __user *userbuf, status.global.accumulate_free_memory, status.global.accumulate_used_memory); } - if (domain->domain.sdramData.size) { - cm_DSP_GetDspBaseAddress(ARM_CORE_ID, - SDRAM_EXT24, &addr); + if (domain->domain.sdramData.size && + cm_DSP_GetDspBaseAddress(ARM_CORE_ID, + SDRAM_EXT24, + &addr) == CM_OK) { cm_DSP_GetInternalMemoriesInfo(id, SDRAM_EXT24, &dOffset, &dSize); -- cgit v1.2.3