All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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: link
Be 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.