From b6d428f6a8227d8b3221988e959dcf7c770c1f46 Mon Sep 17 00:00:00 2001 From: Cong Zhang Date: Fri, 19 Aug 2022 18:02:38 +0800 Subject: [PATCH] soc: qcom: Rollback when failed to register new region Remove region from local minidump table when failed to register new region with RM call. Change-Id: I85bbf62e90cd423be7d3475a5f6526062b22c8c9 Signed-off-by: Cong Zhang --- drivers/soc/qcom/msm_minidump.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/soc/qcom/msm_minidump.c b/drivers/soc/qcom/msm_minidump.c index 478ed10b1ff6..19cccca614c7 100644 --- a/drivers/soc/qcom/msm_minidump.c +++ b/drivers/soc/qcom/msm_minidump.c @@ -366,12 +366,19 @@ static void md_rm_add_work(struct md_region *entry) slot_num = gh_rm_minidump_register_range(entry->phys_addr, entry->size, entry->name, strlen(entry->name)); + spin_lock_irqsave(&mdt_lock, flags); if (slot_num < 0) { + memmove(&minidump_rm_table->entry[entry_num], + &minidump_rm_table->entry[entry_num + 1], + ((num_regions - entry_num - 1) * + sizeof(struct md_rm_region))); + memset(&minidump_rm_table->entry[num_regions - 1], 0, + sizeof(struct md_rm_region)); + num_regions--; pr_err("Failed to register minidump entry:%s ret:%d\n", entry->name, slot_num); - return; + goto out; } - spin_lock_irqsave(&mdt_lock, flags); if (strcmp(entry->name, minidump_rm_table->entry[entry_num].name)) { printk_deferred( "Add entry:%s failed, minidump table is corrupt\n",