From: Mukesh Ojha <quic_mojha@quicinc.com> To: <corbet@lwn.net>, <agross@kernel.org>, <andersson@kernel.org>, <konrad.dybcio@linaro.org>, <robh+dt@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>, <keescook@chromium.org>, <tony.luck@intel.com>, <gpiccoli@igalia.com>, <mathieu.poirier@linaro.org>, <vigneshr@ti.com>, <nm@ti.com>, <matthias.bgg@gmail.com>, <kgene@kernel.org>, <alim.akhtar@samsung.com>, <bmasney@redhat.com> Cc: <linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-arm-msm@vger.kernel.org>, <linux-hardening@vger.kernel.org>, <linux-remoteproc@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>, <linux-samsung-soc@vger.kernel.org>, <kernel@quicinc.com>, Mukesh Ojha <quic_mojha@quicinc.com> Subject: [Patch v6 12/12] soc: qcom: register ramoops region with APSS minidump Date: Sat, 25 Nov 2023 03:49:55 +0530 [thread overview] Message-ID: <1700864395-1479-13-git-send-email-quic_mojha@quicinc.com> (raw) In-Reply-To: <1700864395-1479-1-git-send-email-quic_mojha@quicinc.com> Register ramoops region with APSS minidump so that these region gets captured on system crash. Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com> --- drivers/soc/qcom/qcom_minidump.c | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/drivers/soc/qcom/qcom_minidump.c b/drivers/soc/qcom/qcom_minidump.c index c0f76a51d0e8..9a39b68903fb 100644 --- a/drivers/soc/qcom/qcom_minidump.c +++ b/drivers/soc/qcom/qcom_minidump.c @@ -18,8 +18,10 @@ #include <linux/mutex.h> #include <linux/platform_device.h> #include <linux/printk.h> +#include <linux/pstore_ram.h> #include <linux/soc/qcom/smem.h> #include <linux/string.h> +#include <linux/workqueue.h> #include <soc/qcom/qcom_minidump.h> #include "qcom_minidump_internal.h" @@ -56,12 +58,20 @@ struct minidump_elfhdr { * @dev: Minidump backend device * @apss_data: APSS driver data * @md_lock: Lock to protect access to APSS minidump table + * @work: Minidump work for any required execution in process context. */ struct minidump { struct minidump_elfhdr elf; struct device *dev; struct minidump_ss_data *apss_data; struct mutex md_lock; + struct work_struct work; +}; + +static LIST_HEAD(apss_md_rlist); +struct md_region_list { + struct qcom_minidump_region md_region; + struct list_head list; }; /* @@ -530,6 +540,52 @@ static int qcom_apss_md_table_init(struct minidump *md, return 0; } +static int ramoops_region_md_register(const char *name, int id, void *vaddr, + phys_addr_t paddr, size_t size) +{ + struct qcom_minidump_region *md_region; + struct md_region_list *mdr_list; + int ret; + + mdr_list = kzalloc(sizeof(*mdr_list), GFP_KERNEL); + if (!mdr_list) + return -ENOMEM; + + md_region = &mdr_list->md_region; + scnprintf(md_region->name, sizeof(md_region->name), "K%s%d", name, id); + md_region->virt_addr = vaddr; + md_region->phys_addr = paddr; + md_region->size = size; + ret = qcom_minidump_region_register(md_region); + if (ret < 0) { + pr_err("failed to register region in minidump: err: %d\n", ret); + return ret; + } + + list_add(&mdr_list->list, &apss_md_rlist); + + return 0; +} + +static void ramoops_register_md_callback(struct work_struct *work) +{ + register_ramoops_ready_notifier(ramoops_region_md_register); +} + +static void qcom_ramoops_minidump_unregister(void) +{ + struct md_region_list *mdr_list; + struct md_region_list *tmp; + + list_for_each_entry_safe(mdr_list, tmp, &apss_md_rlist, list) { + struct qcom_minidump_region *region; + + region = &mdr_list->md_region; + qcom_minidump_region_unregister(region); + list_del(&mdr_list->list); + } +} + static void qcom_apss_md_table_exit(struct minidump_ss_data *mdss_data) { memset(mdss_data->md_ss_toc, cpu_to_le32(0), sizeof(*mdss_data->md_ss_toc)); @@ -575,6 +631,9 @@ static int qcom_apss_minidump_probe(struct platform_device *pdev) platform_set_drvdata(pdev, md); + INIT_WORK(&md->work, ramoops_register_md_callback); + schedule_work(&md->work); + return ret; } @@ -582,6 +641,9 @@ static void qcom_apss_minidump_remove(struct platform_device *pdev) { struct minidump *md = platform_get_drvdata(pdev); + flush_work(&md->work); + qcom_ramoops_minidump_unregister(); + unregister_ramoops_ready_notifier(ramoops_region_md_register); qcom_apss_md_table_exit(md->apss_data); } -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Mukesh Ojha <quic_mojha@quicinc.com> To: <corbet@lwn.net>, <agross@kernel.org>, <andersson@kernel.org>, <konrad.dybcio@linaro.org>, <robh+dt@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>, <keescook@chromium.org>, <tony.luck@intel.com>, <gpiccoli@igalia.com>, <mathieu.poirier@linaro.org>, <vigneshr@ti.com>, <nm@ti.com>, <matthias.bgg@gmail.com>, <kgene@kernel.org>, <alim.akhtar@samsung.com>, <bmasney@redhat.com> Cc: <linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-arm-msm@vger.kernel.org>, <linux-hardening@vger.kernel.org>, <linux-remoteproc@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <linux-mediatek@lists.infradead.org>, <linux-samsung-soc@vger.kernel.org>, <kernel@quicinc.com>, Mukesh Ojha <quic_mojha@quicinc.com> Subject: [Patch v6 12/12] soc: qcom: register ramoops region with APSS minidump Date: Sat, 25 Nov 2023 03:49:55 +0530 [thread overview] Message-ID: <1700864395-1479-13-git-send-email-quic_mojha@quicinc.com> (raw) In-Reply-To: <1700864395-1479-1-git-send-email-quic_mojha@quicinc.com> Register ramoops region with APSS minidump so that these region gets captured on system crash. Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com> --- drivers/soc/qcom/qcom_minidump.c | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/drivers/soc/qcom/qcom_minidump.c b/drivers/soc/qcom/qcom_minidump.c index c0f76a51d0e8..9a39b68903fb 100644 --- a/drivers/soc/qcom/qcom_minidump.c +++ b/drivers/soc/qcom/qcom_minidump.c @@ -18,8 +18,10 @@ #include <linux/mutex.h> #include <linux/platform_device.h> #include <linux/printk.h> +#include <linux/pstore_ram.h> #include <linux/soc/qcom/smem.h> #include <linux/string.h> +#include <linux/workqueue.h> #include <soc/qcom/qcom_minidump.h> #include "qcom_minidump_internal.h" @@ -56,12 +58,20 @@ struct minidump_elfhdr { * @dev: Minidump backend device * @apss_data: APSS driver data * @md_lock: Lock to protect access to APSS minidump table + * @work: Minidump work for any required execution in process context. */ struct minidump { struct minidump_elfhdr elf; struct device *dev; struct minidump_ss_data *apss_data; struct mutex md_lock; + struct work_struct work; +}; + +static LIST_HEAD(apss_md_rlist); +struct md_region_list { + struct qcom_minidump_region md_region; + struct list_head list; }; /* @@ -530,6 +540,52 @@ static int qcom_apss_md_table_init(struct minidump *md, return 0; } +static int ramoops_region_md_register(const char *name, int id, void *vaddr, + phys_addr_t paddr, size_t size) +{ + struct qcom_minidump_region *md_region; + struct md_region_list *mdr_list; + int ret; + + mdr_list = kzalloc(sizeof(*mdr_list), GFP_KERNEL); + if (!mdr_list) + return -ENOMEM; + + md_region = &mdr_list->md_region; + scnprintf(md_region->name, sizeof(md_region->name), "K%s%d", name, id); + md_region->virt_addr = vaddr; + md_region->phys_addr = paddr; + md_region->size = size; + ret = qcom_minidump_region_register(md_region); + if (ret < 0) { + pr_err("failed to register region in minidump: err: %d\n", ret); + return ret; + } + + list_add(&mdr_list->list, &apss_md_rlist); + + return 0; +} + +static void ramoops_register_md_callback(struct work_struct *work) +{ + register_ramoops_ready_notifier(ramoops_region_md_register); +} + +static void qcom_ramoops_minidump_unregister(void) +{ + struct md_region_list *mdr_list; + struct md_region_list *tmp; + + list_for_each_entry_safe(mdr_list, tmp, &apss_md_rlist, list) { + struct qcom_minidump_region *region; + + region = &mdr_list->md_region; + qcom_minidump_region_unregister(region); + list_del(&mdr_list->list); + } +} + static void qcom_apss_md_table_exit(struct minidump_ss_data *mdss_data) { memset(mdss_data->md_ss_toc, cpu_to_le32(0), sizeof(*mdss_data->md_ss_toc)); @@ -575,6 +631,9 @@ static int qcom_apss_minidump_probe(struct platform_device *pdev) platform_set_drvdata(pdev, md); + INIT_WORK(&md->work, ramoops_register_md_callback); + schedule_work(&md->work); + return ret; } @@ -582,6 +641,9 @@ static void qcom_apss_minidump_remove(struct platform_device *pdev) { struct minidump *md = platform_get_drvdata(pdev); + flush_work(&md->work); + qcom_ramoops_minidump_unregister(); + unregister_ramoops_ready_notifier(ramoops_region_md_register); qcom_apss_md_table_exit(md->apss_data); } -- 2.7.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-11-24 22:22 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-24 22:19 [Patch v6 00/12] Add Qualcomm Minidump driver related support Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 01/12] firmware: qcom_scm: Refactor code to support multiple dload mode Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 02/12] firmware/qcom: qcom_scm: Add multiple download mode support Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 03/12] docs: qcom: Add qualcomm minidump guide Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-27 5:38 ` Bagas Sanjaya 2023-11-27 5:38 ` Bagas Sanjaya 2023-11-28 13:15 ` Bryan O'Donoghue 2023-11-28 13:15 ` Bryan O'Donoghue 2023-12-11 13:20 ` Mukesh Ojha 2023-12-11 13:20 ` Mukesh Ojha 2023-12-25 13:55 ` RESEND: " Ruipeng Qi 2023-12-25 13:55 ` Ruipeng Qi 2024-01-03 15:27 ` Mukesh Ojha 2024-01-03 15:27 ` Mukesh Ojha 2024-01-08 15:34 ` Ruipeng Qi 2024-01-08 15:34 ` Ruipeng Qi 2024-01-09 8:27 ` Mukesh Ojha 2024-01-09 8:27 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 04/12] soc: qcom: Add qcom_rproc_minidump module Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 05/12] remoteproc: qcom_q6v5_pas: Use qcom_rproc_minidump() Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 06/12] remoteproc: qcom: Remove minidump related data from qcom_common.c Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 07/12] init: export linux_banner data variable Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 08/12] soc: qcom: Add Qualcomm APSS minidump kernel driver Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 09/12] MAINTAINERS: Add entry for minidump related files Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-24 22:19 ` [Patch v6 10/12] pstore/ram: Add dynamic ramoops region support through commandline Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-27 11:34 ` Pavan Kondeti 2023-11-27 11:34 ` Pavan Kondeti 2023-11-28 10:32 ` Mukesh Ojha 2023-11-28 10:32 ` Mukesh Ojha 2023-11-28 16:03 ` Pavan Kondeti 2023-11-28 16:03 ` Pavan Kondeti 2023-11-24 22:19 ` [Patch v6 11/12] pstore/ram: Add ramoops ready notifier support Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha 2023-11-27 10:10 ` Pavan Kondeti 2023-11-27 10:10 ` Pavan Kondeti 2023-11-28 11:10 ` Mukesh Ojha 2023-11-28 11:10 ` Mukesh Ojha 2023-11-24 22:19 ` Mukesh Ojha [this message] 2023-11-24 22:19 ` [Patch v6 12/12] soc: qcom: register ramoops region with APSS minidump Mukesh Ojha
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1700864395-1479-13-git-send-email-quic_mojha@quicinc.com \ --to=quic_mojha@quicinc.com \ --cc=agross@kernel.org \ --cc=alim.akhtar@samsung.com \ --cc=andersson@kernel.org \ --cc=bmasney@redhat.com \ --cc=conor+dt@kernel.org \ --cc=corbet@lwn.net \ --cc=gpiccoli@igalia.com \ --cc=keescook@chromium.org \ --cc=kernel@quicinc.com \ --cc=kgene@kernel.org \ --cc=konrad.dybcio@linaro.org \ --cc=krzysztof.kozlowski+dt@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-hardening@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=mathieu.poirier@linaro.org \ --cc=matthias.bgg@gmail.com \ --cc=nm@ti.com \ --cc=robh+dt@kernel.org \ --cc=tony.luck@intel.com \ --cc=vigneshr@ti.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.