From patchwork Mon Feb 17 10:16:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977556 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EF31BC021A0 for ; Mon, 17 Feb 2025 10:53:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/6BYtQ0vagWpucItzriIw7qjC34OuqzM5CfNcTita1Q=; b=WYzN/Hs4O2EnNpWLXu/5/OTLge tLBGyTsnSGqybTww5/G5PZwQy7fHhy4azuG3houumkvkRj0Pq6jF6vAAvTaoxBF5Qj7MaKebzjPq5 gALcUO0sQEGxy3fiOXrIIrfJBAQxs0ggGG4UMW269WQGYHEZyidh7CNRgWIN4FyCiI0jOhLZjpSuZ OLSnmTQi5Nn8hmGRaZkOdgDGe2l5mLBnJ94Z3Xe0ILAjOy5+rZTuMLg/qpE4JZGv8jLbZlb2jpA2H 3nuq9jHzbIfnkho0ECIxPufxdCY0+zcdt5Li8USpn6/Fsm6UogBMrnrE3sjJyOwBf1o8XmeXkHdXA aFk6rkfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjykn-00000004B0b-2SkH; Mon, 17 Feb 2025 10:53:33 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCC-000000045IB-1ZND for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:49 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-5e0373c7f55so3150001a12.0 for ; Mon, 17 Feb 2025 02:17:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787467; x=1740392267; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/6BYtQ0vagWpucItzriIw7qjC34OuqzM5CfNcTita1Q=; b=tsGEKHVNGfBW9M7FsCimBjT4Y1EPkxm22ceHh/0Oc1MWytVNtspCrmGzJGHPqEzvH9 NghkyulL9qLERu9oRyURAGxBDODLE353DXu7n/MSetcGJoYb7pRelh63mwXhHdKYHQz3 bhsbBVC9h2gVI+z+8FOM+r6Mrpboal9Jz1eOtfyRYnZjSAzHScEcPC+Yxz5onve2si0+ AXMYwaWjAwqleNF3ZB9u5Lh+6jlmKtsHajTPWX8vx0ClHen6E/eRfRygjzwp6Xk6RUTJ Oftyfs+B5vJWH6urYujKSsrWs0PYiJduFR3u9UJ3/XTgSBQPYpesg+yuBmTV+aRD/l7I F25w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787467; x=1740392267; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/6BYtQ0vagWpucItzriIw7qjC34OuqzM5CfNcTita1Q=; b=piy/CeUNtN4+zdALYR4OzAC8aIMlnfGoVjWilS2Q/agz4UG97EncruyvrB63/QaOX4 hUcIikNS5AWQ7KczLXZSJwFo38xkD4GWrdnoECq8aRjavYvgHp2aScC2rxLoPlafIowd 9s+Lj00yjJOcPumGPU+0+sReVcn0DgSATGzyl85XzmmJbh0JOcuQH6CG+X3pHIYGeJhC GJ5xnxLFVOeIRokh0RFhCaKLchJksHLnjjLtFEyE9aQP1Jj3ojREdWx+VvMzrJqG1ja3 CBiC01rCFi4TAe/NmrCl7vesdMLokVC3fdiYdnUQUoQZis14HCuoIPFZsiSkVFHTTS9b vpWg== X-Forwarded-Encrypted: i=1; AJvYcCXXpb0AOe59xGmSyAUwmhjlMUwPFUxShqYt1LuVdtRlpfcovmvlgIrVeo+vZeUgsM6AK0obY5ppTfkaQFP/6wqR@lists.infradead.org X-Gm-Message-State: AOJu0Yzg2QtAyFCGBXgbB3ffCJMDzBEYRyQLV85jnudvqI51ljGWpVB1 abKkJytLvUm5vFqrllyUtmT4FR4djzMchmn4CJ2dBDAbpswOX7xKoJtr+bAMTGk= X-Gm-Gg: ASbGncs0zpy7BYo0wc+qaWLlyIR5YyVB7MV2skWX7nSYpeUh/dxObwjij8d3ZJCHwBK 2KAgZPhDbIIDXSF8wVneiW6SgYQOa1svCMlrCeQPBV86joHxuX7d0xVejuqToxy0bdxBZ8RJNSm 3lqgj8gVdSOcDTf7AGreeMInUQncYDEmAnHUwnZfBwdNZLW6D8wgV6u4WagZcVtHc8hWOMzs2JM 46mH75RxBjISEx+nSOR3drojs2das9Cgd9s43qH7EenMXze3yYmrAXiImAoCIapYW2wlcgyYH/W 7Z8k18BhrT38Ha8uFQ+XgPW/ X-Google-Smtp-Source: AGHT+IFgDnivD1OBw8RBeqZ1T3wvlR/UtXkBn7pRJ5OfcJBMf9SgRGM/cdk3Igb/07dwRLGbAITBVQ== X-Received: by 2002:a17:907:1c85:b0:abb:6ea6:161 with SMTP id a640c23a62f3a-abb70e4e28cmr925547666b.56.1739787466832; Mon, 17 Feb 2025 02:17:46 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:46 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 01/10] pstore/zone: move pstore_device_info into zone header Date: Mon, 17 Feb 2025 12:16:57 +0200 Message-ID: <20250217101706.2104498-2-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021748_410219_EB4783EA X-CRM114-Status: GOOD ( 12.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Struct pstore_device_info is used in pstore/zone, and it's not really connected to anything related to pstore/blk. To further improve on the pstore zone and allow other types of drivers to connect, it is logical to have this struct into pstore_zone.h file. Signed-off-by: Eugen Hristev --- include/linux/pstore_blk.h | 14 -------------- include/linux/pstore_zone.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/linux/pstore_blk.h b/include/linux/pstore_blk.h index 924ca07aafbd..d0c8fb40c46c 100644 --- a/include/linux/pstore_blk.h +++ b/include/linux/pstore_blk.h @@ -7,20 +7,6 @@ #include #include -/** - * struct pstore_device_info - back-end pstore/blk driver structure. - * - * @flags: Refer to macro starting with PSTORE_FLAGS defined in - * linux/pstore.h. It means what front-ends this device support. - * Zero means all backends for compatible. - * @zone: The struct pstore_zone_info details. - * - */ -struct pstore_device_info { - unsigned int flags; - struct pstore_zone_info zone; -}; - int register_pstore_device(struct pstore_device_info *dev); void unregister_pstore_device(struct pstore_device_info *dev); diff --git a/include/linux/pstore_zone.h b/include/linux/pstore_zone.h index 1e35eaa33e5e..284364234162 100644 --- a/include/linux/pstore_zone.h +++ b/include/linux/pstore_zone.h @@ -54,6 +54,20 @@ struct pstore_zone_info { pstore_zone_write_op panic_write; }; +/** + * struct pstore_device_info - back-end pstore device driver structure. + * + * @flags: Refer to macro starting with PSTORE_FLAGS defined in + * linux/pstore.h. It means what front-ends this device support. + * Zero means all backends for compatible. + * @zone: The struct pstore_zone_info details. + * + */ +struct pstore_device_info { + unsigned int flags; + struct pstore_zone_info zone; +}; + extern int register_pstore_zone(struct pstore_zone_info *info); extern void unregister_pstore_zone(struct pstore_zone_info *info); From patchwork Mon Feb 17 10:16:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977559 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0DCD2C021A0 for ; Mon, 17 Feb 2025 10:53:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=UO0IV1Fa2w4jRN2VF1J5DC4vESX9Rcd9+LGQ+k/6XZk=; b=w7R0fhTPA3TPxYL3X8EqPR9rCl uSIjMiVQ5NJYUD+5hO6u0yHdk6sLo7obuh0SkBDouMbc9hN2Qd7pliYsFg75S2VQs2dHK5VqPvviM cLXbd4ZAqBFEBMZnC3oJtGEx2fQjPkCOLkEE5UuSnt+WB9UWVeVrhKW3MfsNLxS3Q3YoDt98rr6Ea wShLEVAbmUgp6cDt99azGroKm4ftnW6e8OXEtGXPeBGHVLNeDNiRfAYEEHIt8BfnzUly4mhn8YNeC saYNxMGd24rsIY4A+Xg/IiHqyeznVmucUvtETp5CmCz9Dd10hD6mTcjer/DR9qt4ZUQDJ511WqXwe AvFvI9vQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjyko-00000004B2f-2nyg; Mon, 17 Feb 2025 10:53:34 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCE-000000045JA-0GBb for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:51 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-abb7f539c35so336989566b.1 for ; Mon, 17 Feb 2025 02:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787468; x=1740392268; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UO0IV1Fa2w4jRN2VF1J5DC4vESX9Rcd9+LGQ+k/6XZk=; b=WjQPYArHukflNQai9917hn12UK+qUExaF/POMrOH+Yswhu+5CSy90WsTcc9RTSX2fi gbe0l/CsVpc2tn9CG3UJ+OFAgrVS+W4NKr7SEmMjSC+Mksqr6BHHoYo1CQwLLQmWraPg EFvvbmOJ3XO5LKKaOLrrGO9OY/cdv3wMQgGE0v73TpstcSgcnsIZdlAMvPv94/7ypF2M oTW0LI/kFKMQXPi/xnDGfAnBmxAHmSnq4bnvu5N7a4qoI2UAD2swrK+BUFv+Oe6pcKf3 rBpc9WNYGKi51cf35eVYw0Ed8oZPvdAGn5iVJUF4lTvms4LKOu2lq9StcAold0nwqkIo aePA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787468; x=1740392268; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UO0IV1Fa2w4jRN2VF1J5DC4vESX9Rcd9+LGQ+k/6XZk=; b=MvqNIT+8fWyHtOPcOhqOTwhm/6HBn67mupzBHi+IYWiSaIkiJ6Da10DsX+A19MD1Tp 8TUBwaAwmNQ+fWW3R3UEEM2hQQ6DJeo7xJ5YzJyGHfR5AI9BVZ3Kay3fC6Csb1GpRIUY ftNlmxwIJ55QscTlNaPLZYBooxclxt3R+cq6TYC03KYfv4JzTOS9zRgQtgF3RVq+emvY qV9IOCLw1ix+FT53UavEvhC2BzpFGO28JsfhKuUpFPn4e6lyO+yzx4Y2flzkphwQWrbz 6RIkbBFTctFODYtTCUaB7+/04YxQSywXViUu0o7xCV5iDCT/h7SZM/qVRkqn2QrHAq0d Be1w== X-Forwarded-Encrypted: i=1; AJvYcCW2INVFVjZMnOSsdBy4iMEfWlv0X9rcphoAejT/DB3amZAj6F6q8Ci5yQbI+hS0jGxm0QDMJHH7h8JaZvqZL8VW@lists.infradead.org X-Gm-Message-State: AOJu0YyCao0eG2kDKLa8qDaOBAvU+GNazSlGv35Cnb9h5RYRN4K6DPkO FMrA4dCvC4PFNAGug6O/LVZ8NrOy0vtoUqlhVNBmfMd/0+NzI9pxjn50zAYyXeM= X-Gm-Gg: ASbGncv5thz+UEHvQQC7tYqejTGY8G2TYKjOgo0uGCPjf/lNuC8AO9B1WteuyTMAyNF 3fAO7BaS1D8uYBLeGcXd/ils1BxJMIebe/L0IRs9S6wXxLgA8A2vkZqOJghXkspskBchOkd1Zfe Kx+pF4wZ5fHS07YeVqQk8tXu7REER168xn+tGftlXpEJCL3VdpyQWAN4qwcIS7K8Hs/HuEI5cfu 5g8mRxYiEeSM3xH+zbUvvES4+P6sSPn7j01HdI4kmSGphetK0Wvr7loBqRa012kTs47F5B+hnTZ uxUY1IzINhBOwSr6kyNLpvcH X-Google-Smtp-Source: AGHT+IFeqQRmHtufh/hnET9/WDBmQ08tktpUPlNNW2f16K2ts13CoRF9gAnCjQkfdJKdSGt+WA/5Ug== X-Received: by 2002:a17:906:3290:b0:ab7:d179:2496 with SMTP id a640c23a62f3a-abb70a791dcmr775286966b.6.1739787468349; Mon, 17 Feb 2025 02:17:48 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:48 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 02/10] pstore/smem: add new pstore/smem type of pstore Date: Mon, 17 Feb 2025 12:16:58 +0200 Message-ID: <20250217101706.2104498-3-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021750_107226_A7811F20 X-CRM114-Status: GOOD ( 21.32 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add shared memory type of pstore. Signed-off-by: Eugen Hristev --- fs/pstore/Kconfig | 13 ++++ fs/pstore/Makefile | 3 + fs/pstore/smem.c | 115 ++++++++++++++++++++++++++++++++++++ include/linux/pstore_smem.h | 9 +++ 4 files changed, 140 insertions(+) create mode 100644 fs/pstore/smem.c create mode 100644 include/linux/pstore_smem.h diff --git a/fs/pstore/Kconfig b/fs/pstore/Kconfig index 3acc38600cd1..84f87edf9b8f 100644 --- a/fs/pstore/Kconfig +++ b/fs/pstore/Kconfig @@ -81,6 +81,19 @@ config PSTORE_RAM For more information, see Documentation/admin-guide/ramoops.rst. +config PSTORE_SMEM + tristate "Log panic/oops to a shared memory buffer" + depends on PSTORE + select PSTORE_ZONE + help + This enables panic and oops messages to be logged to memory + that is shared between different hardware blocks in the system. + This shared memory can be a static ram, a part of dynamic RAM, + a dedicated cache or memory area specific for crash dumps, + or even a memory on an attached device. + + if unsure, say N. + config PSTORE_ZONE tristate depends on PSTORE diff --git a/fs/pstore/Makefile b/fs/pstore/Makefile index c270467aeece..f2a314ca03a0 100644 --- a/fs/pstore/Makefile +++ b/fs/pstore/Makefile @@ -18,3 +18,6 @@ obj-$(CONFIG_PSTORE_ZONE) += pstore_zone.o pstore_blk-objs += blk.o obj-$(CONFIG_PSTORE_BLK) += pstore_blk.o + +pstore_smem-objs += smem.o +obj-$(CONFIG_PSTORE_SMEM) += pstore_smem.o diff --git a/fs/pstore/smem.c b/fs/pstore/smem.c new file mode 100644 index 000000000000..9eedd7df5446 --- /dev/null +++ b/fs/pstore/smem.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Implements pstore backend driver for shared memory devices, + * using the pstore/zone API. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * All globals must only be accessed under the pstore_smem_lock + * during the register/unregister functions. + */ +static DEFINE_MUTEX(pstore_smem_lock); +static struct pstore_device_info *pstore_device_info; + +static int __register_pstore_device(struct pstore_device_info *dev) +{ + int ret; + + lockdep_assert_held(&pstore_smem_lock); + + if (!dev) { + pr_err("NULL device info\n"); + return -EINVAL; + } + if (!dev->zone.total_size) { + pr_err("zero sized device\n"); + return -EINVAL; + } + if (!dev->zone.read) { + pr_err("no read handler for device\n"); + return -EINVAL; + } + if (!dev->zone.write) { + pr_err("no write handler for device\n"); + return -EINVAL; + } + + /* someone already registered before */ + if (pstore_device_info) + return -EBUSY; + + /* zero means not limit on which backends to attempt to store. */ + if (!dev->flags) + dev->flags = UINT_MAX; + + /* Initialize required zone ownership details. */ + dev->zone.name = KBUILD_MODNAME; + dev->zone.owner = THIS_MODULE; + + ret = register_pstore_zone(&dev->zone); + if (ret == 0) + pstore_device_info = dev; + + return ret; +} +/** + * register_pstore_smem_device() - register smem device to pstore + * + * @dev: smem device information + * + * Return: + * * 0 - OK + * * Others - some error. + */ +int register_pstore_smem_device(struct pstore_device_info *dev) +{ + int ret; + + mutex_lock(&pstore_smem_lock); + ret = __register_pstore_device(dev); + mutex_unlock(&pstore_smem_lock); + + return ret; +} +EXPORT_SYMBOL_GPL(register_pstore_smem_device); + +static void __unregister_pstore_device(struct pstore_device_info *dev) +{ + lockdep_assert_held(&pstore_smem_lock); + if (pstore_device_info && pstore_device_info == dev) { + unregister_pstore_zone(&dev->zone); + pstore_device_info = NULL; + } +} + +/** + * unregister_pstore_smem_device() - unregister smem device from pstore + * + * @dev: smem device information + */ +void unregister_pstore_smem_device(struct pstore_device_info *dev) +{ + mutex_lock(&pstore_smem_lock); + __unregister_pstore_device(dev); + mutex_unlock(&pstore_smem_lock); +} +EXPORT_SYMBOL_GPL(unregister_pstore_smem_device); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Eugen Hristev "); +MODULE_DESCRIPTION("pstore backend for smem devices"); diff --git a/include/linux/pstore_smem.h b/include/linux/pstore_smem.h new file mode 100644 index 000000000000..f0ad23e117c4 --- /dev/null +++ b/include/linux/pstore_smem.h @@ -0,0 +1,9 @@ +#ifndef PSTORE_SMEM_H +#define PSTORE_SMEM_H + +#include + +int register_pstore_smem_device(struct pstore_device_info *dev); +void unregister_pstore_smem_device(struct pstore_device_info *dev); + +#endif From patchwork Mon Feb 17 10:16:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977558 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 03764C021A0 for ; Mon, 17 Feb 2025 10:53:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wXzcU5MFpNvV+1Iapr36hDkhqv8Rk3kBwf8g/lXGurs=; b=nSvkME6SE5678/9B0IWUR0lPxX fjClANrGPH1/8zCxCH7d4LlOB03VmYsxI+CddFJMF7uDqlPXFoa75ZIgr7QiFOXzZjTtXHc/uSvN8 GCFK660iP62aoOiDcJMAKEWym7SMcSM0hfdlaDGdCfslv/t2RjXi/7SBwBnOIjdtj2P/qlObP3kQu TOgbM6EImvQMH/mT8/RUv2CjJOolPwf9AJoNczaQ09NMO+F8XQC9jzRskiImdTOdL6+xzEkzjy+7r IohG7VdrncTa2CCPMpT8oUHml7XoZvZ3MN7XOiLcYt1ZZrr5OejkykrPjjGbxul/rn9znLgpG08/e Wx/b5hsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjykp-00000004B4U-3BaG; Mon, 17 Feb 2025 10:53:35 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCF-000000045Jo-3KsO for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:52 +0000 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-abb90c20baeso145509466b.1 for ; Mon, 17 Feb 2025 02:17:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787470; x=1740392270; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wXzcU5MFpNvV+1Iapr36hDkhqv8Rk3kBwf8g/lXGurs=; b=tOyZMi1m9IyMn25fgPKQxKeRPX23W+/Er/y48gspSPYnOXaV3yBINKyujnq92ow684 VtEJ03YCm1PzxnHKiy/rJobu5HZDiYmZjPTcUkEjFyrC4w6WQ89FjpuL2vu3jVgvT4UY ZN+gc5yzgqxuN8BzkR3MWE31UeD+dRSHf5/BawembCBUW5V7xLDID4pyQ9wU0cJQrZTA /p9+YnOy+o8P4AWAjCaG3Mf6c0+n/sQ0EQ53Qyn2AB9FiOSBecEtqQawdF2ZgaD09bEO NRA3eCx7jxhEOtTI0Q2WLtkMzIe22erTLFat7855H1/XcLSwyvSytK8sQphFx0ViBAHM GWxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787470; x=1740392270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wXzcU5MFpNvV+1Iapr36hDkhqv8Rk3kBwf8g/lXGurs=; b=MSBBw31D2G62jThZlSeOH8ykLsiXjulRzvZsRkaOl9TGm8xEmOvheCI4XtouOPg5CM wXqvGh4oFG3TuTSxGBy9jRRSQLJ31qxguzWxf0uV8AYKWFwLNm+NPOC7/fmUPYeMR/p6 vVewo71u8FIWS0Lqp9BOusXrSEBTGucW76rFO1+NQQfE5nRej7ZFIvfoCmotT65V25fU glRCRDVK2jD94SvhRSz3KTrrtVl8U89G0QN2GxIXG0oox041lfh+WDnurzKaGvgjlc63 F9LR6JSh5SYRD4jy6hIIEHEQdpRfyfnLgxLqXRbfrO81U6q0fpOcmnbinMOTQefMSzXB chrA== X-Forwarded-Encrypted: i=1; AJvYcCXQCFWdHDQ7rTAKJu7fD3tfbJpFNZp+4VXbc7fi8Fcgc03rwunnnmChymoGYc/Eq/uNdflPiIV0nEntKvwHi7HH@lists.infradead.org X-Gm-Message-State: AOJu0YzQlwbTPfLyouFHFPLgj1pQz4W18JKLiyA1gpmZf3iA9CEUT1BI 6mph2aqNPJLPEUd+3Klh8tCHXVjYBjsG7JUB2BwxWQ4hfc4aW1hgKR7AsidxCHQ= X-Gm-Gg: ASbGnctIm9wnHXPYpPAhcB/STtR2MRz1bUfwgoNijjJc4ASUs3Psqj3KPiGPjzqul3i /tAR79N+NMqHJedzxA0cRyP3sndQ0Htbm/aJz4fi2E4JEZlwI32KD14+RG/ATPaBnxoT7Q5nqgJ IynoMUHi5R3KqDNABldGowAGwdO6tuXEEQYGLKR7/0PUlfOaKDF/ngnmAVEI/qSV5/SSUQkEUb9 CnoPy9nlpCiJu+Db4Nr4GehaUfbC8QZTHx1DWbwxMxAU1RbniDskI+UuDomvv58bbnw7sl6emTJ Mb3x3cQKcf5a1feDjaDcQBAa X-Google-Smtp-Source: AGHT+IFlpcMLdWWAy879FRRX8kAbYx+cTtUPfK71e6uWIwxDjhZr04LaUoJwILHRa7T4Dh47h6Jv7g== X-Received: by 2002:a17:907:d27:b0:aba:5f40:7f2e with SMTP id a640c23a62f3a-abb70d95048mr848206466b.45.1739787470024; Mon, 17 Feb 2025 02:17:50 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:49 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 03/10] pstore/zone: introduce directly mapped zones Date: Mon, 17 Feb 2025 12:16:59 +0200 Message-ID: <20250217101706.2104498-4-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021751_835998_EFCC37D2 X-CRM114-Status: GOOD ( 22.68 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Directly mapped zones have a different semantic from usual pstore zones. Such zones use a pointer to data in their buffer struct, instead of keeping the buffer locally. The data pointer and size is then passed to the backend for further use. Having a different semantics, backends supporting only these do not offer read/write ops, and only new register_dmr and unregister_dmr ops. Ofcourse, a backend could support both classic zones and directly mapped. Directly mapped zones have the advantage of not being passed through in the event of a crashed, but rather at registration time. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 1 + fs/pstore/smem.c | 6 ++--- fs/pstore/zone.c | 45 ++++++++++++++++++++++++++++--------- include/linux/pstore.h | 4 ++++ include/linux/pstore_zone.h | 3 +++ 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index f56b066ab80c..e20e60b88727 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -51,6 +51,7 @@ static const char * const pstore_type_names[] = { "powerpc-common", "pmsg", "powerpc-opal", + "directly-mapped", }; static int pstore_new_entry; diff --git a/fs/pstore/smem.c b/fs/pstore/smem.c index 9eedd7df5446..684ecc20cae5 100644 --- a/fs/pstore/smem.c +++ b/fs/pstore/smem.c @@ -36,15 +36,15 @@ static int __register_pstore_device(struct pstore_device_info *dev) pr_err("NULL device info\n"); return -EINVAL; } - if (!dev->zone.total_size) { + if (!dev->zone.total_size && !dev->zone.dmapped_cnt) { pr_err("zero sized device\n"); return -EINVAL; } - if (!dev->zone.read) { + if (!dev->zone.read && !dev->zone.dmapped_cnt) { pr_err("no read handler for device\n"); return -EINVAL; } - if (!dev->zone.write) { + if (!dev->zone.write && !dev->zone.dmapped_cnt) { pr_err("no write handler for device\n"); return -EINVAL; } diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c index 5fa2fa2e7aa7..affa4370208c 100644 --- a/fs/pstore/zone.c +++ b/fs/pstore/zone.c @@ -113,6 +113,7 @@ struct psz_context { struct pstore_zone *ppsz; struct pstore_zone *cpsz; struct pstore_zone **fpszs; + struct pstore_zone **dmszs; unsigned int kmsg_max_cnt; unsigned int kmsg_read_cnt; unsigned int kmsg_write_cnt; @@ -120,6 +121,7 @@ struct psz_context { unsigned int console_read_cnt; unsigned int ftrace_max_cnt; unsigned int ftrace_read_cnt; + unsigned int dmapped_max_cnt; /* * These counters should be calculated during recovery. * It records the oops/panic times after crashes rather than boots. @@ -1148,6 +1150,8 @@ static void psz_free_all_zones(struct psz_context *cxt) psz_free_zone(&cxt->cpsz); if (cxt->fpszs) psz_free_zones(&cxt->fpszs, &cxt->ftrace_max_cnt); + if (cxt->dmszs) + psz_free_zones(&cxt->dmszs, &cxt->dmapped_max_cnt); } static struct pstore_zone *psz_init_zone(enum pstore_type_id type, @@ -1160,9 +1164,9 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, if (!size) return NULL; - if (*off + size > info->total_size) { - pr_err("no room for %s (0x%zx@0x%llx over 0x%lx)\n", - name, size, *off, info->total_size); + if (*off + size > info->total_size && type != PSTORE_TYPE_DMAPPED) { + pr_err("no room for %s type %d (0x%zx@0x%llx over 0x%lx)\n", + name, type, size, *off, info->total_size); return ERR_PTR(-ENOMEM); } @@ -1170,7 +1174,8 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, if (!zone) return ERR_PTR(-ENOMEM); - zone->buffer = kmalloc(size, GFP_KERNEL); + zone->buffer = kmalloc(type == PSTORE_TYPE_DMAPPED ? + sizeof(struct psz_buffer) : size, GFP_KERNEL); if (!zone->buffer) { kfree(zone); return ERR_PTR(-ENOMEM); @@ -1179,7 +1184,10 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, zone->off = *off; zone->name = name; zone->type = type; - zone->buffer_size = size - sizeof(struct psz_buffer); + if (zone->type == PSTORE_TYPE_DMAPPED) + zone->buffer_size = 0; + else + zone->buffer_size = size - sizeof(struct psz_buffer); zone->buffer->sig = type ^ PSZ_SIG; zone->oldbuf = NULL; atomic_set(&zone->dirty, 0); @@ -1188,8 +1196,9 @@ static struct pstore_zone *psz_init_zone(enum pstore_type_id type, *off += size; - pr_debug("pszone %s: off 0x%llx, %zu header, %zu data\n", zone->name, - zone->off, sizeof(*zone->buffer), zone->buffer_size); + pr_debug("pszone %s: off 0x%llx, %zu header, %zu data %s\n", zone->name, + zone->off, sizeof(*zone->buffer), zone->buffer_size, + zone->type == PSTORE_TYPE_DMAPPED ? " dmapped " : ""); return zone; } @@ -1206,7 +1215,7 @@ static struct pstore_zone **psz_init_zones(enum pstore_type_id type, if (!total_size || !record_size) return NULL; - if (*off + total_size > info->total_size) { + if (*off + total_size > info->total_size && type != PSTORE_TYPE_DMAPPED) { pr_err("no room for zones %s (0x%zx@0x%llx over 0x%lx)\n", name, total_size, *off, info->total_size); return ERR_PTR(-ENOMEM); @@ -1245,6 +1254,15 @@ static int psz_alloc_zones(struct psz_context *cxt) int err; size_t off_size = 0; + cxt->dmszs = psz_init_zones(PSTORE_TYPE_DMAPPED, &off, + info->dmapped_cnt, + 1, &cxt->dmapped_max_cnt); + if (IS_ERR(cxt->dmszs)) { + err = PTR_ERR(cxt->dmszs); + cxt->dmszs = NULL; + goto free_out; + } + off_size += info->pmsg_size; cxt->ppsz = psz_init_zone(PSTORE_TYPE_PMSG, &off, info->pmsg_size); if (IS_ERR(cxt->ppsz)) { @@ -1302,7 +1320,7 @@ int register_pstore_zone(struct pstore_zone_info *info) int err = -EINVAL; struct psz_context *cxt = &pstore_zone_cxt; - if (info->total_size < 4096) { + if (info->total_size < 4096 && !info->dmapped_cnt) { pr_warn("total_size must be >= 4096\n"); return -EINVAL; } @@ -1312,7 +1330,7 @@ int register_pstore_zone(struct pstore_zone_info *info) } if (!info->kmsg_size && !info->pmsg_size && !info->console_size && - !info->ftrace_size) { + !info->ftrace_size && !info->dmapped_cnt) { pr_warn("at least one record size must be non-zero\n"); return -EINVAL; } @@ -1345,7 +1363,7 @@ int register_pstore_zone(struct pstore_zone_info *info) * if no @read, pstore may mount failed. * if no @write, pstore do not support to remove record file. */ - if (!info->read || !info->write) { + if (!info->dmapped_cnt && (!info->read || !info->write)) { pr_err("no valid general read/write interface\n"); return -EINVAL; } @@ -1365,6 +1383,7 @@ int register_pstore_zone(struct pstore_zone_info *info) pr_debug("\tpmsg size : %ld Bytes\n", info->pmsg_size); pr_debug("\tconsole size : %ld Bytes\n", info->console_size); pr_debug("\tftrace size : %ld Bytes\n", info->ftrace_size); + pr_debug("\tdmapped areas : %ld\n", info->dmapped_cnt); err = psz_alloc_zones(cxt); if (err) { @@ -1406,6 +1425,10 @@ int register_pstore_zone(struct pstore_zone_info *info) cxt->pstore.flags |= PSTORE_FLAGS_FTRACE; pr_cont(" ftrace"); } + if (info->dmapped_cnt) { + cxt->pstore.flags |= PSTORE_FLAGS_DMAPPED; + pr_cont(" dmapped"); + } pr_cont("\n"); err = pstore_register(&cxt->pstore); diff --git a/include/linux/pstore.h b/include/linux/pstore.h index fed601053c51..8360d94c96b6 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h @@ -39,6 +39,7 @@ enum pstore_type_id { PSTORE_TYPE_PMSG = 7, PSTORE_TYPE_PPC_OPAL = 8, + PSTORE_TYPE_DMAPPED = 9, /* End of the list */ PSTORE_TYPE_MAX }; @@ -199,6 +200,8 @@ struct pstore_info { int (*write_user)(struct pstore_record *record, const char __user *buf); int (*erase)(struct pstore_record *record); + int (*register_dmr)(struct pstore_record *record); + int (*unregister_dmr)(struct pstore_record *record); }; /* Supported frontends */ @@ -206,6 +209,7 @@ struct pstore_info { #define PSTORE_FLAGS_CONSOLE BIT(1) #define PSTORE_FLAGS_FTRACE BIT(2) #define PSTORE_FLAGS_PMSG BIT(3) +#define PSTORE_FLAGS_DMAPPED BIT(4) extern int pstore_register(struct pstore_info *); extern void pstore_unregister(struct pstore_info *); diff --git a/include/linux/pstore_zone.h b/include/linux/pstore_zone.h index 284364234162..a74d0cc75577 100644 --- a/include/linux/pstore_zone.h +++ b/include/linux/pstore_zone.h @@ -48,10 +48,13 @@ struct pstore_zone_info { unsigned long pmsg_size; unsigned long console_size; unsigned long ftrace_size; + unsigned long dmapped_cnt; pstore_zone_read_op read; pstore_zone_write_op write; pstore_zone_erase_op erase; pstore_zone_write_op panic_write; + int (*register_dmr)(char *, int, void *, size_t); + int (*unregister_dmr)(void *, size_t); }; /** From patchwork Mon Feb 17 10:17:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977560 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A2393C0219E for ; Mon, 17 Feb 2025 10:53:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=QifBQ/xg2RCUDrB4vfDq4gu1LJ6B/77pKMAfIESueUs=; b=bHia+q/VjQmM0RsXQlkvUeJMTi Cp+o5gHW2Z54SKCrIfXvedTuhIh8CYk6x+Py0B/FF+GHV8dxrp5XW4or7KH4LfIfYxLUY4WKzJspP S9E7dkvKB88NdvIw98HQX+D/C2YKgVioTQQVt+TeOV8dpIHa6wKhpcTdu1zdBNiXg5dbfQS5MQVmR 9wJ0E5Yd75b11KkNMUi94TACvhTKbyGiLh8gArHVYjpNXJ4KWnRFym3eLzrseGyqzFUbz/zfGf7zG JGWZOdhVEzCnmPmcGCywrxIuWbJ3n6sA1TdIA/VJHucZ1Fi0jWTxoURU5LEYvFW1+1EpM2CcWWXC/ 61vKO9xw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjykr-00000004B6z-12X9; Mon, 17 Feb 2025 10:53:37 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCH-000000045KK-18YG for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:54 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-38f1e8efe82so4566782f8f.0 for ; Mon, 17 Feb 2025 02:17:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787472; x=1740392272; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QifBQ/xg2RCUDrB4vfDq4gu1LJ6B/77pKMAfIESueUs=; b=nsaWnVMuQl0ISIK+zOrKWM8QMmHK2OqNHGv6JxwvAPM/LzhkWs2GQKuIfYRUcYjxaS sdq3CAM/SgQjrv6RWpCMx/HzhxzeqQ+F36/hkMXj3swQGZ/3GKKMdIVBmPBzGUYLnBh+ RXhpfkhuGucQPK+ZBP7t05fC3ZuW0HfiCckqxuszfbS/vugIe5xynna+zl+9dKM96R0W PcKnaYVA7valuOMEaHtgTHwse9p2UvIceeIuZRmI6/MicS2igR5YbRizVha1eNuCfv5a HDHkTzmIT/28cvXyDW5DHir7Sw/yAXi3CEcjH6Q0esbUrYc2N6rxk1spHAamM6O7gaSc 0bQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787472; x=1740392272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QifBQ/xg2RCUDrB4vfDq4gu1LJ6B/77pKMAfIESueUs=; b=JPVU0+0sC7O404ga+kq3HAqnh3xiiaRsCcddEaP6wtiChQPNSCeljjZDFErABI/Tkh 3MIKXclKkDvcy6/hmpL0CcUaGO8nualahD3nakJHz1jXhAbT195kGyPD4nWys4bFiMtJ ZPwUk5zg2BjVzgEJTwWv2a+7VK3lzitF4Kli7wDdjdW1aAWdlLgft00FPwa1e4uMLC9y C7S45CA5Veg65eNGkmcmWM0bPpiGOa/jN+0MxVXc/Kn3gphd8WgzAH9ZM0cJTNLvVBCy pFhWnt4HYe65kkMxC60rVoPOEI55uzmhcfEzhzaXXjE7YxTHr93yATk/uHoTpPO1KWUX 2BNw== X-Forwarded-Encrypted: i=1; AJvYcCUXcyIGqASPtSHhwFn8JAjZNtQpKQOfTMPu9gqyL6DIyYtIfkabCOEcu4XjpDPEC5R9AOUBDdqtQLyJ246ktCTQ@lists.infradead.org X-Gm-Message-State: AOJu0YwLV5H/W8lt0zoRHKrNd7ZmoKGhmyhUShlTEHA/kRDT3xSA41li 9NPe5yZGRBQeR42P/eIbOst1jZAjoqaMMgJ813f/kf53E2rfaqUtpB53bbYyYzY= X-Gm-Gg: ASbGnctyH4ZLXwDhgFxFlhkDRP4cJ+l/hqAJgYddK42CN84whH6BudET4+F5bl5CwNA v1HPrq6+FYjl78eVIKrK0kVm9HZ+3nTYO8r1sglZyUbC8rvI/74nWhn8ROkj5DZDjG7RsWbvrBa l/XYqWhvjybDfGd4Ft6ZVC5OUbgv5R35xdCMwOuXPSF0DMC25Rqywhy5URmS8smUiOtG9RmYYqT 31YwekYfZTJ0nx1D1YD15RbUBrXOHb2LlBcSP/FxXZb3ctq7h0Zj0VttKKresb/1I/3sfkAbXp/ RH2FIIeWrqj4vqxdV7PRzjsF X-Google-Smtp-Source: AGHT+IHXaznwSyo3YbfYL/R4+3M72WRvyCNEfigOhBxj8g1XzyEDxhWvwflhOeb8uHLrPz5EryyeQA== X-Received: by 2002:a5d:5f4a:0:b0:38f:4244:68cb with SMTP id ffacd0b85a97d-38f42446bfbmr3184326f8f.12.1739787471737; Mon, 17 Feb 2025 02:17:51 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:51 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 04/10] qcom: smem: add pstore smem backend Date: Mon, 17 Feb 2025 12:17:00 +0200 Message-ID: <20250217101706.2104498-5-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021753_341484_56BCD2D1 X-CRM114-Status: GOOD ( 26.52 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add support for pstore smem backend in the qcom smem driver. This backend resorts to minidump regions behind the scenes. Co-developed-by: Mukesh Ojha Signed-off-by: Eugen Hristev --- drivers/soc/qcom/Kconfig | 9 + drivers/soc/qcom/Makefile | 6 +- drivers/soc/qcom/smem_md.c | 306 +++++++++++++++++++++++++++++++++ drivers/soc/qcom/smem_pstore.c | 112 ++++++++++++ include/linux/soc/qcom/smem.h | 43 +++++ 5 files changed, 474 insertions(+), 2 deletions(-) create mode 100644 drivers/soc/qcom/smem_md.c create mode 100644 drivers/soc/qcom/smem_pstore.c diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 58e63cf0036b..e1c71f713c05 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -180,6 +180,15 @@ config QCOM_SMEM The driver provides an interface to items in a heap shared among all processors in a Qualcomm platform. +config QCOM_SMEM_PSTORE + bool "Qualcomm Shared Memory(SMEM) Pstore backend" + depends on QCOM_SMEM + select PSTORE + select PSTORE_SMEM + help + Say y here to enable the shared memory driver to register itself + as a pstore backend. + config QCOM_SMD_RPM tristate "Qualcomm Resource Power Manager (RPM) over SMD" depends on ARCH_QCOM || COMPILE_TEST diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile index acbca2ab5cc2..304b031ed70e 100644 --- a/drivers/soc/qcom/Makefile +++ b/drivers/soc/qcom/Makefile @@ -23,8 +23,10 @@ obj-$(CONFIG_QCOM_RPMH) += qcom_rpmh.o qcom_rpmh-y += rpmh-rsc.o qcom_rpmh-y += rpmh.o obj-$(CONFIG_QCOM_SMD_RPM) += rpm-proc.o smd-rpm.o -obj-$(CONFIG_QCOM_SMEM) += smem.o -obj-$(CONFIG_QCOM_SMEM_STATE) += smem_state.o +obj-$(CONFIG_QCOM_SMEM) += qcom_smem.o +qcom_smem-y += smem.o +qcom_smem-$(CONFIG_QCOM_SMEM_PSTORE) += smem_pstore.o smem_md.o +obj-$(CONFIG_QCOM_SMEM_STATE) += smem_state.o CFLAGS_smp2p.o := -I$(src) obj-$(CONFIG_QCOM_SMP2P) += smp2p.o obj-$(CONFIG_QCOM_SMSM) += smsm.o diff --git a/drivers/soc/qcom/smem_md.c b/drivers/soc/qcom/smem_md.c new file mode 100644 index 000000000000..2b665ecc5695 --- /dev/null +++ b/drivers/soc/qcom/smem_md.c @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_NUM_ENTRIES 201 +#define MAX_STRTBL_SIZE (MAX_NUM_ENTRIES * MAX_REGION_NAME_LENGTH) + +#define MAX_NUM_OF_SS 10 +#define MAX_REGION_NAME_LENGTH 16 +#define SBL_MINIDUMP_SMEM_ID 602 +#define MINIDUMP_REGION_VALID ('V' << 24 | 'A' << 16 | 'L' << 8 | 'I' << 0) +#define MINIDUMP_SS_ENCR_DONE ('D' << 24 | 'O' << 16 | 'N' << 8 | 'E' << 0) +#define MINIDUMP_SS_ENABLED ('E' << 24 | 'N' << 16 | 'B' << 8 | 'L' << 0) +#define MINIDUMP_REGION_INVALID ('I' << 24 | 'N' << 16 | 'V' << 8 | 'A' << 0) +#define MINIDUMP_REGION_INIT ('I' << 24 | 'N' << 16 | 'I' << 8 | 'T' << 0) +#define MINIDUMP_REGION_NOINIT 0 + +#define MINIDUMP_SS_ENCR_REQ (0 << 24 | 'Y' << 16 | 'E' << 8 | 'S' << 0) +#define MINIDUMP_SS_ENCR_NOTREQ (0 << 24 | 0 << 16 | 'N' << 8 | 'R' << 0) +#define MINIDUMP_SS_ENCR_START ('S' << 24 | 'T' << 16 | 'R' << 8 | 'T' << 0) + +#define MINIDUMP_APSS_DESC 0 + +/** + * struct minidump - Minidump driver data information + * @apss_data: APSS driver data + * @md_lock: Lock to protect access to APSS minidump table + */ +struct minidump { + struct device *dev; + struct minidump_ss_data *apss_data; + struct mutex md_lock; +}; + +/** + * struct minidump_region - Minidump region + * @name : Name of the region to be dumped + * @seq_num: : Use to differentiate regions with same name. + * @valid : This entry to be dumped (if set to 1) + * @address : Physical address of region to be dumped + * @size : Size of the region + */ +struct minidump_region { + char name[MAX_REGION_NAME_LENGTH]; + __le32 seq_num; + __le32 valid; + __le64 address; + __le64 size; +}; + +/** + * struct minidump_subsystem - Subsystem's SMEM Table of content + * @status : Subsystem toc init status + * @enabled : if set to 1, this region would be copied during coredump + * @encryption_status: Encryption status for this subsystem + * @encryption_required : Decides to encrypt the subsystem regions or not + * @region_count : Number of regions added in this subsystem toc + * @regions_baseptr : regions base pointer of the subsystem + */ +struct minidump_subsystem { + __le32 status; + __le32 enabled; + __le32 encryption_status; + __le32 encryption_required; + __le32 region_count; + __le64 regions_baseptr; +}; + +/** + * struct minidump_global_toc - Global Table of Content + * @status : Global Minidump init status + * @md_revision : Minidump revision + * @enabled : Minidump enable status + * @subsystems : Array of subsystems toc + */ +struct minidump_global_toc { + __le32 status; + __le32 md_revision; + __le32 enabled; + struct minidump_subsystem subsystems[MAX_NUM_OF_SS]; +}; +/** + * struct minidump_ss_data - Minidump subsystem private data + * @md_ss_toc: Application Subsystem TOC pointer + * @md_regions: Application Subsystem region base pointer + */ +struct minidump_ss_data { + struct minidump_subsystem *md_ss_toc; + struct minidump_region *md_regions; +}; + +static struct minidump *md; + +static void qcom_md_add_region(const struct qcom_minidump_region *region) +{ + struct minidump_subsystem *mdss_toc = md->apss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int region_cnt; + + region_cnt = le32_to_cpu(mdss_toc->region_count); + mdr = &md->apss_data->md_regions[region_cnt]; + strscpy(mdr->name, region->name, sizeof(mdr->name)); + mdr->address = cpu_to_le64(region->phys_addr); + mdr->size = cpu_to_le64(region->size); + mdr->valid = cpu_to_le32(MINIDUMP_REGION_VALID); + region_cnt++; + mdss_toc->region_count = cpu_to_le32(region_cnt); +} + +static int qcom_md_get_region_index(struct minidump_ss_data *mdss_data, + const struct qcom_minidump_region *region) +{ + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int i; + unsigned int count; + + count = le32_to_cpu(mdss_toc->region_count); + for (i = 0; i < count; i++) { + mdr = &mdss_data->md_regions[i]; + if (!strcmp(mdr->name, region->name)) + return i; + } + + return -ENOENT; +} + +static int qcom_md_region_unregister(const struct qcom_minidump_region *region) +{ + struct minidump_ss_data *mdss_data = md->apss_data; + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + struct minidump_region *mdr; + unsigned int region_cnt; + unsigned int idx; + int ret; + + ret = qcom_md_get_region_index(mdss_data, region); + if (ret < 0) { + dev_err(md->dev, "%s region is not present\n", region->name); + return ret; + } + + idx = ret; + mdr = &mdss_data->md_regions[0]; + region_cnt = le32_to_cpu(mdss_toc->region_count); + /* + * Left shift all the regions exist after this removed region + * index by 1 to fill the gap and zero out the last region + * present at the end. + */ + memmove(&mdr[idx], &mdr[idx + 1], (region_cnt - idx - 1) * sizeof(*mdr)); + memset(&mdr[region_cnt - 1], 0, sizeof(*mdr)); + region_cnt--; + mdss_toc->region_count = cpu_to_le32(region_cnt); + + return 0; +} + +static int qcom_md_region_register(const struct qcom_minidump_region *region) +{ + struct minidump_ss_data *mdss_data = md->apss_data; + struct minidump_subsystem *mdss_toc = mdss_data->md_ss_toc; + unsigned int num_region; + int ret; + + ret = qcom_md_get_region_index(mdss_data, region); + if (ret >= 0) { + dev_info(md->dev, "%s region is already registered\n", region->name); + return -EEXIST; + } + + /* Check if there is a room for a new entry */ + num_region = le32_to_cpu(mdss_toc->region_count); + if (num_region >= MAX_NUM_ENTRIES) { + dev_err(md->dev, "maximum region limit %u reached\n", num_region); + return -ENOSPC; + } + + qcom_md_add_region(region); + + return 0; +} + +static bool qcom_minidump_valid_region(const struct qcom_minidump_region *region) +{ + return region && + strnlen(region->name, MINIDUMP_MAX_NAME_LENGTH) < MINIDUMP_MAX_NAME_LENGTH && + region->virt_addr && + region->size && + IS_ALIGNED(region->size, 4); +} + +/** + * qcom_minidump_region_register() - Register region in APSS Minidump table. + * @region: minidump region. + * + * Return: On success, it returns 0 and negative error value on failure. + */ +int qcom_minidump_region_register(const struct qcom_minidump_region *region) +{ + int ret; + + if (!qcom_minidump_valid_region(region)) + return -EINVAL; + + mutex_lock(&md->md_lock); + ret = qcom_md_region_register(region); + + mutex_unlock(&md->md_lock); + return ret; +} + +/** + * qcom_minidump_region_unregister() - Unregister region from APSS Minidump table. + * @region: minidump region. + * + * Return: On success, it returns 0 and negative error value on failure. + */ +int qcom_minidump_region_unregister(const struct qcom_minidump_region *region) +{ + int ret; + + if (!qcom_minidump_valid_region(region)) + return -EINVAL; + + mutex_lock(&md->md_lock); + ret = qcom_md_region_unregister(region); + + mutex_unlock(&md->md_lock); + return ret; +} + + +static int qcom_apss_md_table_init(struct minidump_subsystem *mdss_toc) +{ + struct minidump_ss_data *mdss_data; + + mdss_data = devm_kzalloc(md->dev, sizeof(*mdss_data), GFP_KERNEL); + if (!mdss_data) + return -ENOMEM; + + mdss_data->md_ss_toc = mdss_toc; + mdss_data->md_regions = devm_kcalloc(md->dev, MAX_NUM_ENTRIES, + sizeof(*mdss_data->md_regions), + GFP_KERNEL); + if (!mdss_data->md_regions) + return -ENOMEM; + + mdss_toc = mdss_data->md_ss_toc; + mdss_toc->regions_baseptr = cpu_to_le64(virt_to_phys(mdss_data->md_regions)); + mdss_toc->enabled = cpu_to_le32(MINIDUMP_SS_ENABLED); + mdss_toc->status = cpu_to_le32(1); + mdss_toc->region_count = cpu_to_le32(0); + + /* Tell bootloader not to encrypt the regions of this subsystem */ + mdss_toc->encryption_status = cpu_to_le32(MINIDUMP_SS_ENCR_DONE); + mdss_toc->encryption_required = cpu_to_le32(MINIDUMP_SS_ENCR_NOTREQ); + + md->apss_data = mdss_data; + + return 0; +} + +int qcom_smem_md_init(struct device *dev) +{ + struct minidump_global_toc *mdgtoc; + size_t size; + int ret; + + md = devm_kzalloc(dev, sizeof(*md), GFP_KERNEL); + + md->dev = dev; + + mdgtoc = qcom_smem_get(QCOM_SMEM_HOST_ANY, SBL_MINIDUMP_SMEM_ID, &size); + if (IS_ERR(mdgtoc)) { + ret = PTR_ERR(mdgtoc); + dev_err(md->dev, "Couldn't find minidump smem item %d\n", ret); + } + + if (size < sizeof(*mdgtoc) || !mdgtoc->status) { + ret = -EINVAL; + dev_err(md->dev, "minidump table is not initialized %d\n", ret); + } + + mutex_init(&md->md_lock); + + ret = qcom_apss_md_table_init(&mdgtoc->subsystems[MINIDUMP_APSS_DESC]); + if (ret) + dev_err(md->dev, "apss minidump initialization failed %d\n", ret); + return ret; +} diff --git a/drivers/soc/qcom/smem_pstore.c b/drivers/soc/qcom/smem_pstore.c new file mode 100644 index 000000000000..a322a320e435 --- /dev/null +++ b/drivers/soc/qcom/smem_pstore.c @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static LIST_HEAD(apss_md_rlist); +struct md_region_list { + struct qcom_minidump_region md_region; + struct list_head list; +}; + +static struct qcom_smem_pstore_context { + struct pstore_device_info dev; +} oops_ctx; + +static int register_smem_region(const char *name, int id, void *vaddr, + phys_addr_t paddr, size_t size) +{ + struct qcom_minidump_region *md_region; + int ret; + + struct md_region_list *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%d%.8s", id, name); + 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 int unregister_smem_region(void *vaddr, + phys_addr_t paddr, size_t size) +{ + int ret = -ENOENT; + 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; + if (region->virt_addr == vaddr) { + ret = qcom_minidump_region_unregister(region); + list_del(&mdr_list->list); + goto unregister_smem_region_exit; + } + } + +unregister_smem_region_exit: + pr_err("failed to unregister region in minidump: err: %d\n", ret); + + return ret; +} + +static int qcom_smem_register_dmr(char *name, int id, void *area, size_t size) +{ + return register_smem_region(name, id, area, virt_to_phys(area), size); +} + +static int qcom_smem_unregister_dmr(void *area, size_t size) +{ + return unregister_smem_region(area, virt_to_phys(area), size); +} + +int qcom_register_pstore_smem(struct device *dev) +{ + int ret; + + struct qcom_smem_pstore_context *ctx = &oops_ctx; + + ctx->dev.flags = PSTORE_FLAGS_DMAPPED; + ctx->dev.zone.register_dmr = qcom_smem_register_dmr; + ctx->dev.zone.unregister_dmr = qcom_smem_unregister_dmr; + ctx->dev.zone.dmapped_cnt = 2; + + ret = register_pstore_smem_device(&ctx->dev); + if (ret) + dev_warn(dev, "Could not register pstore smem device."); + + return 0; +} + +void qcom_unregister_pstore_smem(void) +{ + struct qcom_smem_pstore_context *ctx = &oops_ctx; + + unregister_pstore_smem_device(&ctx->dev); +} diff --git a/include/linux/soc/qcom/smem.h b/include/linux/soc/qcom/smem.h index f946e3beca21..376822f13a4f 100644 --- a/include/linux/soc/qcom/smem.h +++ b/include/linux/soc/qcom/smem.h @@ -17,4 +17,47 @@ int qcom_smem_get_feature_code(u32 *code); int qcom_smem_bust_hwspin_lock_by_host(unsigned int host); +#ifdef CONFIG_QCOM_SMEM_PSTORE +int qcom_register_pstore_smem(struct device *dev); +void qcom_unregister_pstore_smem(void); + +#define MINIDUMP_MAX_NAME_LENGTH 12 + +/** + * struct qcom_minidump_region - Minidump region information + * + * @name: Minidump region name + * @virt_addr: Virtual address of the entry. + * @phys_addr: Physical address of the entry to dump. + * @size: Number of bytes to dump from @address location, + * and it should be 4 byte aligned. + */ +struct qcom_minidump_region { + char name[MINIDUMP_MAX_NAME_LENGTH]; + void *virt_addr; + phys_addr_t phys_addr; + size_t size; +}; + +int qcom_minidump_region_unregister(const struct qcom_minidump_region *region); +int qcom_minidump_region_register(const struct qcom_minidump_region *region); + +int qcom_smem_md_init(struct device *dev); + +#else + +static inline int qcom_register_pstore_smem(struct device *dev) +{ + return 0; +} + +static inline void qcom_unregister_pstore_smem(void) +{ +} + +static inline int qcom_smem_md_init(struct device *dev) +{ + return 0; +} +#endif #endif From patchwork Mon Feb 17 10:17:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977561 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 24231C021A1 for ; Mon, 17 Feb 2025 10:53:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=o2yIlVyyOPbQ4NJXMaimxxzGIHYKCdR1oZZmLPUjNQg=; b=hrWGtnqH4QH9Z8F6ltmP1AIzz1 j7n0BDL1Oi+1tG5eqRGrPmOoxD8Av64D6UxvVYeCTvnXI59vVUrZ+y24m9b4ltz7GZ6G0HI7euzlI KjjWQE5stFaKRAPqHpXWzoyG7S5SnSU9U2LnwEmCeCP5gWJStycuvIQK9QX+ROrxpzyWfOePR3311 JmyPk7lmEKNFYrdkEYVhKbRD6Hg8t76LIxpngT/ZALN2N4K0IoXYavaq8fhqB3q3AwBdsriyOJgtU D4H7XaQI2gbvSALm9FOskvRiV1OQsPhKQWR589cyvyfdYJySbkEng1+VnlU3EpWiXE2UeIiczVcZA 3Bkt4Crg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjykt-00000004BAO-0Czc; Mon, 17 Feb 2025 10:53:39 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCJ-000000045Kq-0YT9 for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:56 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-5ded6c31344so4709015a12.1 for ; Mon, 17 Feb 2025 02:17:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787473; x=1740392273; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=o2yIlVyyOPbQ4NJXMaimxxzGIHYKCdR1oZZmLPUjNQg=; b=gBMvE7sXCWDvADV9v99mmFyrKsINgedV15RaS7Ff7aesfmxMe3BCx4lObREl5Waz93 HzYv7wC9Br1gAOygsVWSA0CvDS8qMMjIGKZYae7/c8mYgQR+kyPBtk+j+KcIA5ADFp2o U9dXoAaDke7cHsO64SUIuxwW1i7mmAN99ZyuNEu5/Z9vWzS1mV2yXDBnj3g3d/hFbg1o bNySKHI+a1UxctqcQEFPagESpkNAUlYDDzA+pf/bLbbjLF7FT2FOGc9qmaJ4a+OwNTac QPzAJCEaERdsgKKyEphXnPW6odhqdHfOoI+ikhZkdp+en+iaT+s5yzxu2JVP3ouPu67O tiuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787473; x=1740392273; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o2yIlVyyOPbQ4NJXMaimxxzGIHYKCdR1oZZmLPUjNQg=; b=QYvQMdmHE/u8f2keC3fs5X+j+Aw3RlnnTVByjnC4U0GU5Gg/Hv1Vv7FSslss56xnCG /tMUrzBkjumhYeYmOfD2CbEY2yxLFgvMe2CWouvOhd4cXz3tWHC/yHgAHXrU84g6YN9i ePVvdFA2FV5v4zKWvLlJNJ8alOkY7/9F1LJRe58HupYxrm5NaKRSIjNpVeBXGGGN9gNg aVjVmK4udDaH+dnwfBwR8t5/E3VRPAgSaph17I+bfSyl6v5E5kX9uGVj7uOJN4m1On9v aOt6kDWxgFAneLGukJqnzF1iaM8wXWBGB3/GhhxxHqt+57Cp9tejW+qmw96eQDJ3h5ig CLUA== X-Forwarded-Encrypted: i=1; AJvYcCVHPn8i4ETVSG02DJYOuoi2psFkkbat4uEaGbp0TpDMhC13JG5fcR+7Vzcfv4YqGiGgmrkP5cx2VbpGKLzv9ZM6@lists.infradead.org X-Gm-Message-State: AOJu0YxKLl0zHAphEGBoVC8fw4ul5093ShYAyhe2nzttZv9tveh8so+b Y+EbTrHRx6XtwmupMMGR56HhZOwGjlGI3EG8hZ1FnNRDII3ilbutM1750PIXAD0= X-Gm-Gg: ASbGncv7d2og8C97rHXeh9uwljcSZNVn3q5bHzEt+zGnNRQHun//G06ot/M/BHeXEVE SihY/25FFunIyk9hs7ly82/09/j7VtqdFg4+qdRuuEX8mUzwQw4ZwWAqh/apUzqWLJLIRyVZ0RE OFtgeQL/HwlQvYFZ8DjJUzpAogh2Vl+k32cdzqDkxEfLcGP9qfjeA5IrHvvu7Bn5u9bI8/2VtE6 RvWW8S+BSVhwObkC0HZNRfg20QCgKqbbdemV7r7GZQwe0rIyPrN64eYTK01dzYMOjpa5j1jI7cI 5JwK154VMxuJMUVl14zWW4Io X-Google-Smtp-Source: AGHT+IGpx0/whONuJWGo4HwkqVqYsCJmEUhrUJNrzL9FCk0mF7dow3SMs9U25x2XZBwWQZmzKpeEtw== X-Received: by 2002:a05:6402:5107:b0:5dc:ea7e:8c56 with SMTP id 4fb4d7f45d1cf-5e036139d68mr21109346a12.22.1739787473355; Mon, 17 Feb 2025 02:17:53 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:53 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 05/10] pstore: implement core area registration Date: Mon, 17 Feb 2025 12:17:01 +0200 Message-ID: <20250217101706.2104498-6-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021755_173136_0401D629 X-CRM114-Status: GOOD ( 16.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Implement core area registration mechanism. Implement directly mapped zone corespoding to core areas. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 67 ++++++++++++++++++++++++++++++++++++ fs/pstore/zone.c | 77 ++++++++++++++++++++++++++++++++++++++++++ include/linux/pstore.h | 16 +++++++++ 3 files changed, 160 insertions(+) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index e20e60b88727..32448d9dd316 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -68,6 +68,7 @@ static DECLARE_WORK(pstore_work, pstore_dowork); * the filesystem mount/unmount routines. */ static DEFINE_MUTEX(psinfo_lock); +static DEFINE_MUTEX(ps_dmr_lock); struct pstore_info *psinfo; static char *backend; @@ -99,6 +100,12 @@ MODULE_PARM_DESC(kmsg_bytes, "amount of kernel log to snapshot (in bytes)"); static void *compress_workspace; +static LIST_HEAD(rec_list); +struct rec_list_t { + struct pstore_record rec; + struct list_head list; +}; + /* * Compression is only used for dmesg output, which consists of low-entropy * ASCII text, and so we can assume worst-case 60%. @@ -271,6 +278,66 @@ void pstore_record_init(struct pstore_record *record, record->time = ns_to_timespec64(ktime_get_real_fast_ns()); } +int pstore_register_core_area(const char *handle, void *area, size_t size) +{ + struct rec_list_t *rec_element = kzalloc(sizeof (*rec_element), GFP_KERNEL); + struct pstore_record *record = &rec_element->rec; + int ret; + + if (!psinfo || !psinfo->register_dmr) { + pr_err("No pstore available ! Bailing out.\n"); + return -EAGAIN; + } + + pstore_record_init(record, psinfo); + record->type = PSTORE_TYPE_DMAPPED; + record->buf = area; + record->size = size; + + if (handle) { + record->priv = kmalloc(8, GFP_KERNEL); + strncpy(record->priv, handle, 8); + } + + mutex_lock(&ps_dmr_lock); + + ret = psinfo->register_dmr(record); + if (!ret) + list_add(&rec_element->list, &rec_list); + + mutex_unlock(&ps_dmr_lock); + return ret; +} +EXPORT_SYMBOL_GPL(pstore_register_core_area); + +int pstore_unregister_core_area(const char *handle, void *area, size_t size) +{ + struct rec_list_t *rec_element, *tmp; + int ret; + + if (!psinfo || !psinfo->unregister_dmr) + return -EAGAIN; + + mutex_lock(&ps_dmr_lock); + list_for_each_entry_safe(rec_element, tmp, &rec_list, list) { + struct pstore_record *record; + + record = &rec_element->rec; + + if (record->buf == area) { + ret = psinfo->unregister_dmr(record); + list_del(&rec_element->list); + mutex_unlock(&ps_dmr_lock); + return 0; + } + } + + mutex_unlock(&ps_dmr_lock); + return 0; + +} +EXPORT_SYMBOL_GPL(pstore_unregister_core_area); + /* * callback from kmsg_dump. Save as much as we can (up to kmsg_bytes) from the * end of the buffer. diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c index affa4370208c..f9e2dc4252ea 100644 --- a/fs/pstore/zone.c +++ b/fs/pstore/zone.c @@ -35,6 +35,7 @@ struct psz_buffer { uint32_t sig; atomic_t datalen; atomic_t start; + void *data_ptr; uint8_t data[]; }; @@ -822,6 +823,38 @@ static int notrace psz_kmsg_write(struct psz_context *cxt, return 0; } +static int notrace psz_register_dmr_record(struct pstore_zone *zone, + struct pstore_record *record) +{ + struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info; + int ret; + + if (!info->register_dmr) + return -ENOTSUPP; + + zone->buffer->data_ptr = record->buf; + atomic_set(&zone->buffer->datalen, record->size); + + ret = info->register_dmr(record->priv, record->id, record->buf, + record->size); + if (!ret) + atomic_set(&zone->dirty, true); + return ret; +} + +static int psz_unregister_dmr_zone(struct pstore_zone *zone) +{ + struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info; + if (!info->unregister_dmr) + return -ENOTSUPP; + + info->unregister_dmr(zone->buffer->data_ptr, + atomic_read(&zone->buffer->datalen)); + + atomic_set(&zone->dirty, false); + return 0; +} + static int notrace psz_record_write(struct pstore_zone *zone, struct pstore_record *record) { @@ -906,6 +939,48 @@ static int notrace psz_pstore_write(struct pstore_record *record) } } +static int pstore_unregister_dmr(struct pstore_record *record) +{ + struct psz_context *cxt = record->psi->data; + int c = 0; + + if (!cxt->dmszs) + return -ENODEV; + + while (c < cxt->dmapped_max_cnt) { + if (!atomic_read(&cxt->dmszs[c]->dirty)) + continue; + + if (cxt->dmszs[c]->buffer->data_ptr == record->buf) + return psz_unregister_dmr_zone(cxt->dmszs[c]); + c++; + } + + return -ENOENT; +} + +static int pstore_register_dmr(struct pstore_record *record) +{ + struct psz_context *cxt = record->psi->data; + int c = 0; + + if (!cxt->dmszs) + return -ENODEV; + + while (c < cxt->dmapped_max_cnt) { + if (!atomic_read(&cxt->dmszs[c]->dirty)) + break; + c++; + } + + if (c == cxt->dmapped_max_cnt) + return -ENOSPC; + + record->id = c; + + return psz_register_dmr_record(cxt->dmszs[c], record); +} + static struct pstore_zone *psz_read_next_zone(struct psz_context *cxt) { struct pstore_zone *zone = NULL; @@ -1110,6 +1185,8 @@ static struct psz_context pstore_zone_cxt = { .read = psz_pstore_read, .write = psz_pstore_write, .erase = psz_pstore_erase, + .register_dmr = pstore_register_dmr, + .unregister_dmr = pstore_unregister_dmr, }, }; diff --git a/include/linux/pstore.h b/include/linux/pstore.h index 8360d94c96b6..85f3f964b268 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h @@ -290,4 +290,20 @@ pstore_ftrace_write_timestamp(struct pstore_ftrace_record *rec, u64 val) } #endif +#ifdef CONFIG_PSTORE +int pstore_register_core_area(const char *handle, void *area, size_t size); +int pstore_unregister_core_area(const char *handle, void *area, size_t size); +#else +static inline int pstore_register_core_area(const char *handle, void *area, + size_t size) +{ + return 0; +} +static inline int pstore_unregister_core_area(const char *handle, void *area, + size_t size) +{ + return 0; +} +#endif + #endif /*_LINUX_PSTORE_H*/ From patchwork Mon Feb 17 10:17:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977563 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F1635C021A0 for ; Mon, 17 Feb 2025 10:53:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=pjqSIaqjo22M/fJ6WrzBYInBLUW49xWtc11H9nbdufw=; b=CgO/8eR2oUxJCtkAeqe3rYUSIo J4+DgmnF606iAELowzcKKYsS3qnWyNODoni+zLnWYSJae8D8KjKvPbpnX1RS61Rast7HBHjjQD64h bK9zXPb4GWg+zmAVo7tuPZIS4qp8BlnzFZVGBK6dlg9a98x0iEHWT+tzR6IILtx5a3GeFWZVg+jOX yuecpooOm9Jb5142F2vI0o+YyOARUz8suhwk2w61LzJxfJ27V8ep6uoz/J2+7E0JE285nLFP2v5zt EXeEYwG4wrkoFenQub1fDVwaNjb2ucnwmr0h3bMpAIQMkmLhUgHNtdOaP+9aZU6TReINxX4XdrzQI jNYHdieA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjyku-00000004BCz-3U3I; Mon, 17 Feb 2025 10:53:40 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCK-000000045LZ-2lsw for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:57 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-abb81285d33so280395066b.0 for ; Mon, 17 Feb 2025 02:17:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787475; x=1740392275; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pjqSIaqjo22M/fJ6WrzBYInBLUW49xWtc11H9nbdufw=; b=xwcycu9ZTrHAfGD3vzLsHN/BeO3D96X6CpNclngFBNnI4giMnFH6MNsJhhY1ua55YK JonAXDQK+yWlV+3f16p/8bIsGtx+K5czIBkU2Fou7jzqroxC6xcqlyUWdhejJo0/g6lQ 2bdyOKRKWI6f6/rcQ074PZ1Kt0UEXYU9N/5v3DG/HeXIqsmHYlKqReBhJpnXOXEnJyAe Y50+b6oyOtBXPGH8IdTUxoZRwUc9MYM8CG/1Y+wlVAP9bF5JHd02o/YANPeY5TChIvAz pcaCbqtOlcRO/1eCiNQGP0nPuIGBdL6o5fL/ITdId9vmL5xCyWPF42J7BEbbcM7RXyvp n9sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787475; x=1740392275; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pjqSIaqjo22M/fJ6WrzBYInBLUW49xWtc11H9nbdufw=; b=c9qdPsopxCKHjWd2GPpxle+WbbNLMl21nja5Yvx/plV0ptfB6TqyWxXst31/hi6t+b 6RfLJCsTWuSIymNglZzdK2FFeoZKm7xU9HKCdvx0JAsqDHzUtaMm2tfKl7YbzaL4YHzn fUUBUvzd0avCPQADwDh9Gw2jrdFJVFCE9ANF/GY8g418yKxC07amt+8J53AhKLfS0Zeh AfF71H9tUc2P1O/h0ZCgl9Xm7T1ayKi1aprAtOlYdmewcLNDGirXEd2cQZWPUYPa1lEB 7IPxIIt+JFCy+F1TamA2E43ITqnsH1mPVdVe4uATh2ub6pvFHtoOyJGE6WV9DFh/KgxJ IsBg== X-Forwarded-Encrypted: i=1; AJvYcCXdJfF/pYgl2m+PpL5fbKTMDoxqU1vt+IlaCY3Itd0v7ehqjta7BlMxPz0yhazuMcCutFun1BXgRQXX9uXCwe8e@lists.infradead.org X-Gm-Message-State: AOJu0Yyipo5TsUeU6Tyt1kOAoFyOENTIbPVDgTrtl1OBZxKOByUqhyxF wKqaS1fjSL+XWLyi+TAbx3HK2Dc0U7hk9+0FRCoIby3GA/Qs298LfoZXisC0stk= X-Gm-Gg: ASbGncvsRbUHTIeaNoNx7wCJaWk1pzIYZK06gfoUfy0LXdGdnZmTu05fZgp/4JrRGqz n0pkYnxWIvAHnZFSLOMYl6vczc1CczQBOW0HWOptFAKYj+Z5WnZvUid8YNWv3N8txKy1sxDvxI+ SSdN8xrQ3T7zFfKK8cUcrbl8seh9/YLFApFP455bpX1EHz9FIzht3I6XrKg9cj+A4PT9zI1l4Zs J8UI/uzeOrLKCLjBvG50sL4iDmbRe5SuO9AW/+PnrudT/+IzS1vEOLwF6rN7NOamANwzCvi8a/v o87jA3PBynM8d4ILwmJSxRzZ X-Google-Smtp-Source: AGHT+IFlDyIupv/Dc3O4C3y1gwzt/272w46jucKO95aSvrTTvzjMkzKCPNIWu+2421TQveFqhl50lg== X-Received: by 2002:a17:907:26ce:b0:ab7:b878:e8bc with SMTP id a640c23a62f3a-abb70de288cmr1064938866b.38.1739787474939; Mon, 17 Feb 2025 02:17:54 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:54 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 06/10] qcom: smem: enable smem pstore backend Date: Mon, 17 Feb 2025 12:17:02 +0200 Message-ID: <20250217101706.2104498-7-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021756_696863_0106499E X-CRM114-Status: GOOD ( 10.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Enable smem pstore backend that registers regions into the minidump table. Signed-off-by: Eugen Hristev --- drivers/soc/qcom/smem.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/soc/qcom/smem.c b/drivers/soc/qcom/smem.c index 592819701809..f4d2646fcc0b 100644 --- a/drivers/soc/qcom/smem.c +++ b/drivers/soc/qcom/smem.c @@ -1236,11 +1236,21 @@ static int qcom_smem_probe(struct platform_device *pdev) if (IS_ERR(smem->socinfo)) dev_dbg(&pdev->dev, "failed to register socinfo device\n"); + ret = qcom_smem_md_init(&pdev->dev); + if (ret) + dev_info(&pdev->dev, "smem minidump backend init failed\n"); + + ret = qcom_register_pstore_smem(&pdev->dev); + if (ret) + dev_info(&pdev->dev, "smem pstore backend registration failed\n"); + return 0; } static void qcom_smem_remove(struct platform_device *pdev) { + qcom_unregister_pstore_smem(); + platform_device_unregister(__smem->socinfo); hwspin_lock_free(__smem->hwlock); From patchwork Mon Feb 17 10:17:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977562 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1DDB8C021A9 for ; Mon, 17 Feb 2025 10:53:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ldGwrx2cT3RoWK8xQPpncYSf7C74wmzaVDctYgnNzT8=; b=XUMKptWfAZq6mLzYNw+6Gbu4CN aiFYsp9L8sntHYBci1vJPfkOJy6zeQ8DINkTo3e9KupUSc64LltLKXTn3knzypIhw6l2RuaOiQlzP RFm9FJSWgf5rkWZMd/iyBWqp0yohQL30oFAqIU/8PQ8K6b9Zbw4i7RH5WJlUAXkruYMoSADoU/w5t CgvPyH2sjQPmv1BxjvVWC7xLbVxCsStx3EklxKXaznMVsMYbzMEp3iCzPk2yEgfAiGUWbkvcwguE8 Eg0fIwwHRW/VHKhvLAYgiORigYDZPfeTC7VXlnSKsIqMgIkSNY7NrrU2F18Ry8hmKl52RIqvcxIl8 w93V/Qhg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjykw-00000004BFy-1EFg; Mon, 17 Feb 2025 10:53:42 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCM-000000045MY-0oVM for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:17:59 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-5e04c044224so1910909a12.0 for ; Mon, 17 Feb 2025 02:17:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787477; x=1740392277; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ldGwrx2cT3RoWK8xQPpncYSf7C74wmzaVDctYgnNzT8=; b=Tq90Pi05kKtT+KFFH/C7M0edervs84aupubM7/lScoLYf2PPaU9fZscL+rYUx6gr2W VVYKBQ0WbBkMDzJlPSdsTVcto13jKgt5FewZJfPHc6nmavrX4uhmiDp8fMWhR+yeU0xu r38f97uwaPTMrwtHI6dUlmy1T8eLFRUXrPEqPJqgw0AZXuxDzx45i4TkOHKie8B0Xsmc PjIWPe43dihUKqKeK93rjOt85udwPkfgWa0cvwG0afqA7ULglZ6VpWjhnNwk9SExY9tA 5mrw6yJWyK1cAkD3yydLclMFOdA6JJ6KSPnx3GtY7u820L5UqNZOy3EFE/5vjALivN/F 4aYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787477; x=1740392277; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ldGwrx2cT3RoWK8xQPpncYSf7C74wmzaVDctYgnNzT8=; b=TMIMP3vv2LBty2ep9Oc7Q9i4wVAi8ke6JPjIypEY2jV8AmkibxFGaDPIef2Zf7YCRM oE/8F+z7UAe40Ytq+zDHWeUGnKA6BajRTOAUteLl338KKVF7ZdKj7Je2ZHwIVr337Ig1 /UV2gAUQCalhgav5spZMgXdsHnAzJmBMiiVDcqdh8oTvZemLH7zwzR9NfoojwvTlJ6Ju bbMGFbKy03tLzGAbpHesei28OUFKlBFhNDQ1I+svGkU0flA44zbXiafpmB1xXil2FKBe D2Fjz/3OVyZxk+dB3viIgoxmnXQkL1LA9s3cskrWu+xndNDPxijfVcoM9ViWMsy31rxd g9og== X-Forwarded-Encrypted: i=1; AJvYcCWpRJ0ktUUCrA+9/1iDAbiGRRwzpSWMOPve7MrBp++bbmSCYtHtY7bwL8hgJjN7/AnpZ3K0cBSw3AvmCj6V0sen@lists.infradead.org X-Gm-Message-State: AOJu0YxBLIPhHFBLrwROKTOk+O9pmAFEeBgUXQBQmqgy5FkQ3EDC1v7F LLqukM43p0BTePsGTIvDASm3diZW4HXJndc04SQY7UhtVZvJnLTaaV/J6GSryDE= X-Gm-Gg: ASbGncvaSClwLEN+kkM5kcukVtrwP5yt9bUE153JXLL+dz7DYNWw0WqkgoOQ7RJ12t8 GiyK7BGTqhH3zWWQUBH859McvjIGFdB7r6DeCfOWUL0qtlPQXUExoIXM8DntNbhasetXMyrcS9z p2OscV5BJX0I3rWYiu+cv/CG1WN5Rg1kjGtqdBFTWKbgzNiBRwJyNTQw3xHeVEud7808jpFHZ0j VrOOhdT//XE64Qh6pTO+o1VU73+IFQ9ig6eO8OIYMMRGF/DhFwQjD9Ftu20snolYBrBe5pCVW95 JbTiDQhfIQRwMmc/WdrYptur X-Google-Smtp-Source: AGHT+IGLJ6wBq1Q2Otx2cXUsLqwI686ZT/K4uXqflhPHhYRM3ByDKMZpdTFQUXVBYhqRHLkwN7a7fQ== X-Received: by 2002:a17:907:78b:b0:ab7:c115:68fd with SMTP id a640c23a62f3a-abb70e61a23mr916824766b.53.1739787476706; Mon, 17 Feb 2025 02:17:56 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:56 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 07/10] printk: export symbols for buffer address and length functions Date: Mon, 17 Feb 2025 12:17:03 +0200 Message-ID: <20250217101706.2104498-8-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021758_228813_8036D2E7 X-CRM114-Status: UNSURE ( 9.58 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org log_buf_addr_get() and log_buf_len_get() can be reused in another module, export the symbols. Signed-off-by: Eugen Hristev --- kernel/printk/printk.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 07668433644b..022947f9b61d 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -588,12 +588,14 @@ char *log_buf_addr_get(void) { return log_buf; } +EXPORT_SYMBOL_GPL(log_buf_addr_get); /* Return log buffer size */ u32 log_buf_len_get(void) { return log_buf_len; } +EXPORT_SYMBOL_GPL(log_buf_len_get); /* * Define how much of the log buffer we could take at maximum. The value From patchwork Mon Feb 17 10:17:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977564 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 704E8C0219E for ; Mon, 17 Feb 2025 10:53:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6Td102jvjcyxJvAztEsXWW/VUH0CMT8UhqkeVVK6uLU=; b=ZHlf7FCF9ZtQ/V/7HeuFezUIU8 4DokmJVUSv64/wNNbbe3J+TEVvY83zYXbt4ungjhhPs3iIYvNh32sxAlS/sM53qvQyAKFyErZvMSD q/yMDa7+2DT6YLGQRwBX3jHboRp3+UTJ5YXbEgfk9Jy3rz+GVau5eyrYq0b7Vl71TslQiSYIQ4/xc sriTJyUfzQwRg8X4MAHiFQpRbTaTEAhveRSbaomBC4ChKATkSilvDeAeivS9V7ZC2WGuCfDibQb+6 0FUYQVclqWzHeXK5SomCdvm5EASPYxSwbni0qzA6txxy8J5nTgtpP3xPJtzxYrmIR1FiUb6SNlc0S 8R7gT0Mw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjyky-00000004BJx-0SQQ; Mon, 17 Feb 2025 10:53:44 +0000 Received: from mail-ej1-x630.google.com ([2a00:1450:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCN-000000045NF-47in for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:18:01 +0000 Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-abb8e405640so160943966b.0 for ; Mon, 17 Feb 2025 02:17:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787478; x=1740392278; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6Td102jvjcyxJvAztEsXWW/VUH0CMT8UhqkeVVK6uLU=; b=Vqlh8rqtbj196p2BPBJX08E3cxmkhQ+Y16oxL3+Xay2l9sIJRgvdufQOyhHUQoYSgi sNrVMU4qLBcwH4fhbZZgiHWReqz/QekUdsA4tBZzQgtYwBnYmB2Gy+Ng2ewIwejgqWnf /AkxfB86ituszcPHAthhNnOz0sCkEVWvLqb6vcUUon130TUxon53AZNaI3aS9uSZGIru zRRvn4lbT8SqGtym0pp54tZlrsmN/2zIOQCBxLXntLewylqPETDd8jtzsgI6nnOk/A9m N88cXMeFFrke2M/5FyKplXT9r68dFdi7K5dp/GikTG3oOAx1ZWPrttQUjJQhsw2pMrl9 H3qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787478; x=1740392278; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6Td102jvjcyxJvAztEsXWW/VUH0CMT8UhqkeVVK6uLU=; b=MEWbFIjJVRDF49yGH+w8kK1PTZp7B/O6zFCuSHrROLmnkqB0V2Ugj7EMhgtR4gYu5k k4RVY3mH/7ya2nUmjrQMO3uN4enRsaP6CfboddpqYwSgeAu3e9LKZ+t6Nl1CoVaD35XA l+c/hk26W2kgiX8FPfrSeT1awEFIrnKMeXMY8liFXeRuH3xz0LY6kYiVq5mu9big+Ubz hxnleZPFiQHursDyAjKMvxE3JZgeSAg8Z/PuSzUd1e29pFsfgYOQRqHe0kR9bjk5YvUG KPmbGSN2uHWczXAOd2nr6/hS9RJGjXCuGo9tFgtWjSNzHL4is2+zFhaO2ujv7O/eSCbC eRGQ== X-Forwarded-Encrypted: i=1; AJvYcCUc3Avbsd59VtEpeHxne/cCxLm0T71JR8bkolziRev5KDObskV1fqD3kKw40KwBoc/lH5Tb180dUrunb8yexKHy@lists.infradead.org X-Gm-Message-State: AOJu0YwokHTHokS411uf75MT8fL9X3qDWy6GAXGhEi9biQS+pRwNBMdi s7CLkOibbS9uQeKqYaeaYJmGIHfFMBTTXm/nE409kPqSuJTMahaEE/mk2svuyWY= X-Gm-Gg: ASbGncvDHJPnEwX1rO7+BcYQ0kDqXwxGc8giQG3Twv+XSBXOGx3wiwHVwbvgrBiQFdG DSB2J7dk013Y05dkoOFeQfi471hle8azagLYdroTPYVRD/NaWloB4nOFV/jk8mudytSq9l41bM9 i9dv392Lw1/BLNHEaI/JS26FASk7/7rcwhEAEbqBD+yRd922OOvmZMj5DygiVp9RR0u/+V9KhKW tFeWTFGDT1TfgOiCrrmqnaYFiwCV3Ix7Zl0BPeO1LfqaCnVXGo77JPXmy4QcHTFUGokJb121gYo llkvSACNdlXIC4UzhxnRpJ2v X-Google-Smtp-Source: AGHT+IHY65P+Xz4TNjemyphPqqQ9+ru/mohlrB5vFIKJf/R1MNkDOblIAzwWX9YVxAvz0IWpeGk+4w== X-Received: by 2002:a17:907:7752:b0:aa6:79fa:b47d with SMTP id a640c23a62f3a-abb7091cedcmr752835166b.1.1739787478322; Mon, 17 Feb 2025 02:17:58 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:57 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 08/10] pstore: register kmsg into directly mapped zones if available Date: Mon, 17 Feb 2025 12:17:04 +0200 Message-ID: <20250217101706.2104498-9-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021800_025049_3D511373 X-CRM114-Status: UNSURE ( 9.12 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org If dmapped zones are available, register the log buffer into one zone. Signed-off-by: Eugen Hristev --- fs/pstore/platform.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 32448d9dd316..9a5c1d6d5031 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -452,11 +452,22 @@ static void pstore_register_kmsg(void) kmsg_dump_register(&pstore_dumper); } +static int pstore_register_kmsg_dmapped(void) +{ + return pstore_register_core_area("dmesg", log_buf_addr_get(), + log_buf_len_get()); +} + static void pstore_unregister_kmsg(void) { kmsg_dump_unregister(&pstore_dumper); } +static int pstore_unregister_kmsg_dmapped(void) +{ + return pstore_unregister_core_area("dmesg", log_buf_addr_get(), + log_buf_len_get()); +} #ifdef CONFIG_PSTORE_CONSOLE static void pstore_console_write(struct console *con, const char *s, unsigned c) { @@ -582,6 +593,9 @@ int pstore_register(struct pstore_info *psi) pstore_dumper.max_reason = psinfo->max_reason; pstore_register_kmsg(); } + if (psi->flags & PSTORE_FLAGS_DMAPPED) + if (pstore_register_kmsg_dmapped()) + pr_warn("Registering kmsg as dmapped failed.\n"); if (psi->flags & PSTORE_FLAGS_CONSOLE) pstore_register_console(); if (psi->flags & PSTORE_FLAGS_FTRACE) @@ -628,6 +642,8 @@ void pstore_unregister(struct pstore_info *psi) pstore_unregister_console(); if (psi->flags & PSTORE_FLAGS_DMESG) pstore_unregister_kmsg(); + if (psi->flags & PSTORE_FLAGS_DMAPPED) + pstore_unregister_kmsg_dmapped(); /* Stop timer and make sure all work has finished. */ del_timer_sync(&pstore_timer); From patchwork Mon Feb 17 10:17:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977565 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3809AC021A0 for ; Mon, 17 Feb 2025 10:54:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=S3eOW8UrFuxRaUp3//DxYdvLP38s+Fnhi3jsogW/ejs=; b=1Eu4zAV3/Nt5zwBL3zk4ZkGL/J L+Ww7V3LXrsOyFNAF1YUiHEJ8BcU0lno6g7Picp5gDAFWiErwzXvoLueRJx71/+JqwJzGC5AKCBsG tdqNaFna3BahUsV1EFmZbY7GJY2mnktTwc92RpuN1BXXpKzqB+fyb7hC8Qoia8nQx10ZiJMqHOiVw PuvOFtQ0pTvNLR3V6DyU7GtDvnwUW6g2nie0uTAWW4y7phjzZDGlECRp0toADYck+qfg8TVw/aJnQ n0x47i3cHkG5EYqjHf9ZYRWKFrzOS5MYk8i+++UekDqFWleMhBgrmI0c1dzrM/Yp0RRBRpPW3jmF8 zrWsAFmg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjyl0-00000004BOd-2b2v; Mon, 17 Feb 2025 10:53:46 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCP-000000045Nw-1BSF for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:18:02 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-aaf0f1adef8so838880266b.3 for ; Mon, 17 Feb 2025 02:18:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787480; x=1740392280; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S3eOW8UrFuxRaUp3//DxYdvLP38s+Fnhi3jsogW/ejs=; b=z0jv4Dg4Qrv7nTslNYQiLWrOLVGOLIIC3YnZ9TaXV3HiGkRPorAEnSjNi2DZ0KL0bg tByuCFgCglAyzyu0z46jmeoiu79xTnBOUjZYCg4VIL8N9C89hvpBlyjn8gpU4R1Jau1B K3Y/z0MFC3kK3UKHb2mHO7HRdoZqLjvBE7ychGFJBa3p9lbNShJgHEnXVW8Hss5EUei9 H8q+6uUFevECHDT960Pzu6s0aZ2D9Axb+j7UNqWtZpu2eWVmhdMJN66HopkoLu0qp+8P sV0b8QIfDcnWBa92nqM2YsrXCsoiZa2nAcVP8K9jan8wiehpD5kZpfz5kDWzK+i1iNSF v7ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787480; x=1740392280; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S3eOW8UrFuxRaUp3//DxYdvLP38s+Fnhi3jsogW/ejs=; b=AxkWm6bwB8Q1bNGrGMEL1c2ZC//jkwnlbgVCKgWmOK6ktFG7mcvOdOyFf+L0y4writ jASFXGvXPQpBYCgHLanY8i8yVzoqGYlxyHTkmDCqU8H9LJqR87j0gYzB16yYRwVTqphg NdNzfTkp1apUHciC1Y4EQ8xQ/9dyE4x99VaNUnIXz2NsPf7VrxKBUU3vZp/eX7YT2r7s VYahJEo4SeCGQUNASdrH4gkv9zHqU5R5FETsrqIpal/Ah4/xmRI3YosVNyTFnbd4NzYx 4cBb0nc5bgCV/XrL7qHIu8U5W+PoChoPjDaRAc1eFc7T2F+fBfoMiPfZMguqUsyeum/o xuog== X-Forwarded-Encrypted: i=1; AJvYcCVlsms/9t477VKaVKjV/4SjchdEKVKdRAMPmPG9wNMN/S/c8ogEfEgMVA5SplLavEcm13YJzdSBK9JynJUNfChp@lists.infradead.org X-Gm-Message-State: AOJu0YxpPKDrYqzkrvJhMmLJZw5heTEO3zuexhl8gI/hHcG/t2XT/RDz W2qOrr1nkbAPMW2sMuBJChu23HM3zDh/Qc5ad3/iSX48iIbV53/LyHQwK1scuO0= X-Gm-Gg: ASbGncsJOHZJ+VHODWJCIeQapyOcmtfYSdvs3/Zp4P8GCexRs2vFPfxV1mzCALaDo+R wPAZnFQqejy9k6BBxFQxFhXd+XRxUuzGiQtAH+Prhm3UOohIa4/ipvW04SAerkfRnUYcqHhQASL IzVnG0Qj4WGBdpCw2zVkoSNuGuW3mGKadKreBJwPVgdAvfqkUpsn8Fxi0sIjqo7iKyKAHDEkVzh 1hs4IvB34hTzXaKPAgF/LACtQ19FagXccXNOM2nYMCXdMvPUE6j27ZcocskqZHX2z1rm080A4OH A4mChl3I6xEG0oAMxkZSxEku X-Google-Smtp-Source: AGHT+IFMyTV+7dHiqvFGQ0qFOxy54cnyzBe3bzzybDkILWKhJuv8kUgpRDn4pTMEScsdo+ewcWeQ8g== X-Received: by 2002:a17:907:7f27:b0:ab2:da92:d0bc with SMTP id a640c23a62f3a-abb70c01ecemr899083166b.3.1739787479826; Mon, 17 Feb 2025 02:17:59 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:17:59 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 09/10] devcoredump: add devcd_{un}register_core_area API Date: Mon, 17 Feb 2025 12:17:05 +0200 Message-ID: <20250217101706.2104498-10-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021801_318469_BE570934 X-CRM114-Status: GOOD ( 10.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add API for registering device core area for saving into pstore. Signed-off-by: Eugen Hristev --- drivers/base/devcoredump.c | 13 +++++++++++++ include/linux/devcoredump.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c index 2a0e0b2fdb98..2cf17b148c5a 100644 --- a/drivers/base/devcoredump.c +++ b/drivers/base/devcoredump.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -76,6 +77,18 @@ static struct devcd_entry *dev_to_devcd(struct device *dev) return container_of(dev, struct devcd_entry, devcd_dev); } +int devcd_register_core_area(struct device *dev, void *area, size_t size) +{ + return pstore_register_core_area(dev->driver->name, area, size); +} +EXPORT_SYMBOL_GPL(devcd_register_core_area); + +int devcd_unregister_core_area(struct device *dev, void *area, size_t size) +{ + return pstore_unregister_core_area(dev->driver->name, area, size); +} +EXPORT_SYMBOL_GPL(devcd_unregister_core_area); + static void devcd_dev_release(struct device *dev) { struct devcd_entry *devcd = dev_to_devcd(dev); diff --git a/include/linux/devcoredump.h b/include/linux/devcoredump.h index 377892604ff4..9d80e4ac91ff 100644 --- a/include/linux/devcoredump.h +++ b/include/linux/devcoredump.h @@ -69,6 +69,9 @@ void dev_coredumpsg(struct device *dev, struct scatterlist *table, size_t datalen, gfp_t gfp); void dev_coredump_put(struct device *dev); + +int devcd_register_core_area(struct device *, void *, size_t); +int devcd_unregister_core_area(struct device *, void *, size_t); #else static inline void dev_coredumpv(struct device *dev, void *data, size_t datalen, gfp_t gfp) From patchwork Mon Feb 17 10:17:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eugen Hristev X-Patchwork-Id: 13977566 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 65ED7C021A1 for ; Mon, 17 Feb 2025 10:54:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=bOx/QjhnUzr5iZf43d5r89IsS2FOdAlXvdjY2fxKvfY=; b=NOCfg3cA2AniQDK4pwvzTGD4ZI wryz4KvC6eXbzkijubTGas+0XlQ9hfs5ym/KErMElcQqcTDhhJ8LkGUI1emqEehUMQ7R1GE7k6XWP 539oAp/9E75HF8BZPHZeMXEA8cU/h0FxURDdgS8PUHrgSiLPDs8nY5k6PMuhDaIRWgJMnJ2AQISL2 XTBwICJ66+i7h+YBBXfDndflyttUg7CJiIzO43lEFmCbFtBrPw5qjzagMh72ZLy/ibxQEtRc81W3t Vg3XPP4d97IrtopRPl4RrFCRF/IxG0YbaOxzrfpt7ItZPBTZVIAtTiiRaHo0XTdPMNCyNGnTvym2A WgSXz3Yg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjyl2-00000004BQx-08kW; Mon, 17 Feb 2025 10:53:50 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjyCQ-000000045OT-47PF for linux-arm-kernel@lists.infradead.org; Mon, 17 Feb 2025 10:18:04 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-ab771575040so1025074266b.1 for ; Mon, 17 Feb 2025 02:18:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739787481; x=1740392281; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bOx/QjhnUzr5iZf43d5r89IsS2FOdAlXvdjY2fxKvfY=; b=e7FbuWG4UTw11fo6MtapgCjHDkH3FcNfuzrl9IJzG/iq/X04gfyDFRhKK36ToOO0M9 jbN9aMIJb6o9iwT69F5Iu2Ovwu7JZLtWBlqzCJ+8eQP6fwc4djfeKNvYlR2WDYf3PBBl MrVqhYtTZW0Xa3wcqg43ix3f0qk3WvjJ9kEDfdL3ComuQ+4zh8RiStnzjrjskUKutAP7 gjrchPfg3eQo1fw8VABNQ9ucTbnJx5p81f16tdUoU0EPXTIqyiXC8nBcvR5cRqITS6yr QNgrQ6SH1j81bCgwcbZU9LKMsJ54zmkBe8HyhRtjtvLdVVjiPnVmQlYcI3ZjOwIiWdyx iR8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739787481; x=1740392281; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bOx/QjhnUzr5iZf43d5r89IsS2FOdAlXvdjY2fxKvfY=; b=D/ndrsinXOlaqTQMK1Bt8zicM5+DH1Vq8Iw/xT9FbvtXmuVYfBPJV/RK/J3SKRX8Ys q5odW0uN5wqQUJXrhpSCfcG9TZUeJNEet+z6bd0Ni7/NInQR4dDdThVilmU6an/3DJ51 0sUVXpqc+rXgk2DrDB7UQ2bWFvklwj+BhHB45t5dnl4Jv2+GHM28yaOS/q7vgvLglGUr EG/3tBzNXwh/jzSzH9EE5Tff4Yp80pJmTLmtQNRAWsdkp/USoYRqR6tTbi4EEItwwBnU Asw5OM3WMf/i4HAuJA7aCYYE1wg7LVG11OVJA6v0nGY22MbnNAaT1u6cJed5DrYn3Yek Xbjg== X-Forwarded-Encrypted: i=1; AJvYcCUrh732Vd7iY2yoT6spdWx9s523jDrTETo+PrXsCHcdJuuaFo01mw8FaLxp6JjMLaI/23Co/ZPS+PrF17X58itA@lists.infradead.org X-Gm-Message-State: AOJu0Yw7qLdg4QyDnJQqzMqyo2kgjhHJV4s1WE+BAiDR2JQb1Tl+LW8c hdBN5MzNYsvDU4SzYDTATXhmQJzvb8ewyUW1ue8we2QcVv8x6p9sgiW421dG/ac= X-Gm-Gg: ASbGncthdc9ZrKpILkPCZpgcBnRLcV3diXmahHd7wu+/iyrwYtO5Pwvhnkv6wK0FX5s qNQI1VQ/Vl/a8XnuCrtMDZ9FRe+mH+CC+DoDBCidfUTmx58by8OnqkNhGylPe/BKrziUOKEmpRP s2IqugZtlbZUfqXMIbkWUdIDQTGNV7sWmQSoyueVkj70Kl9/DREvNAkgW4VkwwE1aZMdwPPDOD8 Ecl7NzmYPoh5BhZ9qk6NtMVzzEFyhtICSh+3wZg8IaNYsaN9shhreZ+dxWE2Xpn/l6vcrgVFv9h xFEwarL7yK8KXwGasPZeRFNt X-Google-Smtp-Source: AGHT+IEyhYoBsYp2nsZUxaNrWoEJIkJcEzeW3uR5U89aJyr/W0mS2FbZhC0xUYWaFE0athJ0Fx91Xg== X-Received: by 2002:a17:906:4fd0:b0:ab6:fe30:f49e with SMTP id a640c23a62f3a-abb70cd5108mr714909166b.28.1739787481314; Mon, 17 Feb 2025 02:18:01 -0800 (PST) Received: from eugen-station.. ([82.76.24.202]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abb8b1767e8sm308583266b.174.2025.02.17.02.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 02:18:01 -0800 (PST) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org, kees@kernel.org Cc: linux-kernel@vger.kernel.org, johannes@sipsolutions.net, gregkh@linuxfoundation.org, rafael@kernel.org, dakr@kernel.org, andersson@kernel.org, konradybcio@kernel.org, tony.luck@intel.com, gpiccoli@igalia.com, pmladek@suse.com, rostedt@goodmis.org, john.ogness@linutronix.de, senozhatsky@chromium.org, quic_mojha@quicinc.com, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Eugen Hristev Subject: [RFC][PATCH 10/10] rng: qcom_rng: EXAMPLE: registering dev structure Date: Mon, 17 Feb 2025 12:17:06 +0200 Message-ID: <20250217101706.2104498-11-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250217101706.2104498-1-eugen.hristev@linaro.org> References: <20250217101706.2104498-1-eugen.hristev@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250217_021803_019169_B87E3EA6 X-CRM114-Status: GOOD ( 12.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Proof of concept on how devcd register core area works. Signed-off-by: Eugen Hristev --- drivers/crypto/qcom-rng.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/crypto/qcom-rng.c b/drivers/crypto/qcom-rng.c index 0685ba122e8a..a1509609f50c 100644 --- a/drivers/crypto/qcom-rng.c +++ b/drivers/crypto/qcom-rng.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -32,11 +33,13 @@ #define QCOM_TRNG_QUALITY 1024 struct qcom_rng { + char start[10]; struct mutex lock; void __iomem *base; struct clk *clk; struct hwrng hwrng; struct qcom_rng_match_data *match_data; + char end[10]; }; struct qcom_rng_ctx { @@ -192,6 +195,10 @@ static int qcom_rng_probe(struct platform_device *pdev) if (IS_ERR(rng->base)) return PTR_ERR(rng->base); + /* Setting some markers to easily recognize them afterwards */ + strcpy(rng->start, "MD_RNG_ST"); + strcpy(rng->end, "MD_RNG_en"); + rng->clk = devm_clk_get_optional(&pdev->dev, "core"); if (IS_ERR(rng->clk)) return PTR_ERR(rng->clk); @@ -218,6 +225,8 @@ static int qcom_rng_probe(struct platform_device *pdev) } } + devcd_register_core_area(&pdev->dev, rng, sizeof(*rng)); + return ret; fail: crypto_unregister_rng(&qcom_rng_alg); @@ -228,6 +237,8 @@ static void qcom_rng_remove(struct platform_device *pdev) { crypto_unregister_rng(&qcom_rng_alg); + devcd_unregister_core_area(&pdev->dev, qcom_rng_dev, + sizeof(*qcom_rng_dev)); qcom_rng_dev = NULL; }