linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Mukesh Ojha <quic_mojha@quicinc.com>
Cc: 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,
	tony.luck@intel.com, gpiccoli@igalia.com,
	mathieu.poirier@linaro.org, catalin.marinas@arm.com,
	will@kernel.org, linus.walleij@linaro.org,
	andy.shevchenko@gmail.com, vigneshr@ti.com, nm@ti.com,
	matthias.bgg@gmail.com, kgene@kernel.org,
	alim.akhtar@samsung.com, bmasney@redhat.com,
	quic_tsoni@quicinc.com, 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-gpio@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, kernel@quicinc.com
Subject: Re: [REBASE PATCH v5 11/17] qcom_minidump: Register ramoops region with minidump
Date: Wed, 13 Sep 2023 16:30:04 -0700	[thread overview]
Message-ID: <202309131624.0371D7E@keescook> (raw)
In-Reply-To: <1694429639-21484-12-git-send-email-quic_mojha@quicinc.com>

On Mon, Sep 11, 2023 at 04:23:53PM +0530, Mukesh Ojha wrote:
> Register all the pstore frontend with minidump, so that they can
> be dumped as default Linux minidump region to be collected on
> SoC where minidump is enabled.
> 
> Helper functions is written in separate file and built along with
> the minidump driver, since it is client of minidump and also call
> it at appropriate place from minidump probe so that they always
> get registered.
> 
> While at it also rename the out minidump module object name during
> build as qcom_apss_minidump which basically depicts as Qualcomm
> Application processor subsystem minidump.
> 
> Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
> ---
>  drivers/soc/qcom/Kconfig                 |  1 +
>  drivers/soc/qcom/Makefile                |  3 +-
>  drivers/soc/qcom/qcom_minidump.c         |  4 ++
>  drivers/soc/qcom/qcom_ramoops_minidump.c | 88 ++++++++++++++++++++++++++++++++
>  drivers/soc/qcom/qcom_ramoops_minidump.h | 10 ++++
>  5 files changed, 105 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/soc/qcom/qcom_ramoops_minidump.c
>  create mode 100644 drivers/soc/qcom/qcom_ramoops_minidump.h
> 
> diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig
> index 0ac7afc2c67d..9f1a1e128fef 100644
> --- a/drivers/soc/qcom/Kconfig
> +++ b/drivers/soc/qcom/Kconfig
> @@ -306,6 +306,7 @@ config QCOM_MINIDUMP
>  	tristate "QCOM APSS Minidump driver"
>  	depends on ARCH_QCOM || COMPILE_TEST
>  	depends on QCOM_SMEM
> +	depends on PSTORE
>  	help
>  	  This config enables linux core infrastructure for Application
>  	  processor subsystem (APSS) minidump collection i.e, it enables
> diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile
> index 4b5f72f78d3c..69df41aba7a9 100644
> --- a/drivers/soc/qcom/Makefile
> +++ b/drivers/soc/qcom/Makefile
> @@ -33,4 +33,5 @@ obj-$(CONFIG_QCOM_ICC_BWMON)	+= icc-bwmon.o
>  qcom_ice-objs			+= ice.o
>  obj-$(CONFIG_QCOM_INLINE_CRYPTO_ENGINE)	+= qcom_ice.o
>  obj-$(CONFIG_QCOM_RPROC_MINIDUMP)	+= qcom_rproc_minidump.o
> -obj-$(CONFIG_QCOM_MINIDUMP)		+= qcom_minidump.o
> +obj-$(CONFIG_QCOM_MINIDUMP)		+= qcom_apss_minidump.o
> +qcom_apss_minidump-objs			+= qcom_minidump.o qcom_ramoops_minidump.o
> diff --git a/drivers/soc/qcom/qcom_minidump.c b/drivers/soc/qcom/qcom_minidump.c
> index 4ce36f154e89..7930a80b9100 100644
> --- a/drivers/soc/qcom/qcom_minidump.c
> +++ b/drivers/soc/qcom/qcom_minidump.c
> @@ -23,6 +23,7 @@
>  #include <soc/qcom/qcom_minidump.h>
>  
>  #include "qcom_minidump_internal.h"
> +#include "qcom_ramoops_minidump.h"
>  
>  /**
>   * struct minidump_ss_data - Minidump subsystem private data
> @@ -688,6 +689,8 @@ static int qcom_apss_minidump_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> +	qcom_ramoops_minidump_register(md->dev);
> +
>  	mutex_lock(&md_plist.plock);
>  	platform_set_drvdata(pdev, md);
>  	qcom_apss_register_pending_regions(md);
> @@ -701,6 +704,7 @@ static int qcom_apss_minidump_remove(struct platform_device *pdev)
>  	struct minidump *md = platform_get_drvdata(pdev);
>  	struct minidump_ss_data *mdss_data;
>  
> +	qcom_ramoops_minidump_unregister();
>  	mdss_data = md->apss_data;
>  	memset(mdss_data->md_ss_toc, cpu_to_le32(0), sizeof(struct minidump_subsystem));
>  	md = NULL;
> diff --git a/drivers/soc/qcom/qcom_ramoops_minidump.c b/drivers/soc/qcom/qcom_ramoops_minidump.c
> new file mode 100644
> index 000000000000..eb97310e3858
> --- /dev/null
> +++ b/drivers/soc/qcom/qcom_ramoops_minidump.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/device.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/pstore.h>
> +#include <linux/slab.h>
> +#include <soc/qcom/qcom_minidump.h>
> +
> +#include "qcom_ramoops_minidump.h"
> +
> +static LIST_HEAD(ramoops_region_list);
> +
> +struct md_region_list {
> +	struct qcom_minidump_region md_region;
> +	struct list_head list;
> +};
> +
> +static int qcom_ramoops_region_register(struct device *dev, int type)
> +{
> +	struct qcom_minidump_region *md_region;
> +	struct md_region_list *mdr_list;
> +	struct pstore_record record;
> +	unsigned int max_dump_cnt;
> +	phys_addr_t phys;
> +	const char *name;
> +	void *virt;
> +	size_t size;
> +	int ret;
> +
> +	record.type = type;
> +	record.id = 0;
> +	max_dump_cnt = 0;
> +	name = pstore_type_to_name(record.type);
> +	do {
> +		ret = pstore_region_defined(&record, &virt, &phys, &size, &max_dump_cnt);

I really don't want this happening: you're building your own pstore_record
(which has a common initializer that isn't used here) and manually
scraping the ramoops regions.

It looks to me like you just want a way to talk all the records in
pstore and then export their location to minidump. The record walker
needs to be in the pstore core, and likely should be shared with
fs/pstore/inode.c which does the same thing.

Then, in this code, you can just do something like:

	for (record = pstore_get_record(NULL); record; record = pstore_get_record(record)) {
		if (ramoops_get_record_details(record, &virt, &phys) < 0)
			continue
		...
		md_region->virt_addr = virt;
		md_region->phys_addr = phys;
		md_region->size = record->size;

		ret = qcom_minidump_region_register(md_region);
		...
	}

Probably some way to check the backend is ramoops is needed too.

-- 
Kees Cook

  reply	other threads:[~2023-09-13 23:30 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-11 10:53 [REBASE PATCH v5 00/17] Add Qualcomm Minidump kernel driver related support Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 01/17] docs: qcom: Add qualcomm minidump guide Mukesh Ojha
2023-09-11 11:02   ` Krzysztof Kozlowski
2023-09-13  9:25   ` Bagas Sanjaya
2023-09-13 15:20     ` Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 02/17] soc: qcom: Add qcom_rproc_minidump module Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 03/17] remoteproc: qcom_q6v5_pas: Use qcom_rproc_minidump() Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 04/17] remoteproc: qcom: Remove minidump related data from qcom_common.c Mukesh Ojha
2023-10-06 15:08   ` Mukesh Ojha
2023-10-11 17:48     ` Mathieu Poirier
2023-09-11 10:53 ` [REBASE PATCH v5 05/17] init: export linux_banner data variable Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 06/17] soc: qcom: Add Qualcomm APSS minidump kernel driver Mukesh Ojha
2023-09-11 11:03   ` Krzysztof Kozlowski
2023-09-11 10:53 ` [REBASE PATCH v5 07/17] soc: qcom: minidump: Add pending region registration Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 08/17] arm64: mm: Add dynamic ramoops region support through command line Mukesh Ojha
2023-09-12 10:18   ` Will Deacon
2023-09-13  7:02     ` Mukesh Ojha
2023-09-13 10:25       ` Will Deacon
2023-09-13 23:17     ` Kees Cook
2023-10-05 11:22       ` Mukesh Ojha
2023-10-05 11:44         ` Pavan Kondeti
2023-10-05 15:42           ` Mukesh Ojha
2023-10-05 15:51             ` Pavan Kondeti
2023-09-11 10:53 ` [REBASE PATCH v5 09/17] pstore/ram: Use dynamic ramoops reserve resource Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 10/17] pstore: Add pstore_region_defined() helper and export it Mukesh Ojha
2023-09-13 23:24   ` Kees Cook
2023-10-09 11:59     ` Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 11/17] qcom_minidump: Register ramoops region with minidump Mukesh Ojha
2023-09-13 23:30   ` Kees Cook [this message]
2023-09-13 23:42     ` Kees Cook
2023-09-11 10:53 ` [REBASE PATCH v5 12/17] MAINTAINERS: Add entry for minidump related files Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 13/17] firmware: qcom_scm: provide a read-modify-write function Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 14/17] pinctrl: qcom: Use qcom_scm_io_update_field() Mukesh Ojha
2023-09-12  8:23   ` Linus Walleij
2023-09-11 10:53 ` [REBASE PATCH v5 15/17] firmware: scm: Modify only the download bits in TCSR register Mukesh Ojha
2023-09-11 15:07   ` Kathiravan Thirumoorthy
2023-09-12  9:09     ` Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 16/17] firmware: qcom_scm: Refactor code to support multiple download mode Mukesh Ojha
2023-09-11 10:53 ` [REBASE PATCH v5 17/17] firmware: qcom_scm: Add multiple download mode support 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=202309131624.0371D7E@keescook \
    --to=keescook@chromium.org \
    --cc=agross@kernel.org \
    --cc=alim.akhtar@samsung.com \
    --cc=andersson@kernel.org \
    --cc=andy.shevchenko@gmail.com \
    --cc=bmasney@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=conor+dt@kernel.org \
    --cc=corbet@lwn.net \
    --cc=gpiccoli@igalia.com \
    --cc=kernel@quicinc.com \
    --cc=kgene@kernel.org \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-gpio@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=quic_mojha@quicinc.com \
    --cc=quic_tsoni@quicinc.com \
    --cc=robh+dt@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=vigneshr@ti.com \
    --cc=will@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).