From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F07030C621 for ; Fri, 12 Sep 2025 15:09:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689797; cv=none; b=V24FDi+UTuSPnJLWBS8IU/7HPStyWBM9S/+K6CaMEuRfjBFyoPqdPgDBfBTkZeVXJa2HpZ1QEuFiqMSyF11elmiLHDydN1lIA/Z2DFcgotkGPgFeSl4e8MKY1Agm516piME5c2ssLXSS9JYtGEfoSf4wrt38xQ1DxQjAvthWPEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689797; c=relaxed/simple; bh=vuO2m3M71ygZaDwujP+rNQt318lNBmzfkAJO9dajnFg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZJzBkbdnGCHHMJhngeV3dUXq2if+dBaE+h+/eMLnqDMVzeyrk30aAUXvxoEewtZJi7cOve1NO525a/Jsfrkyc4nEE08UtIefWtqHK63vXBzR7N4hUps5e04nSZ6LbvN8ZVvjgIIafInR32UORNy3dJwEgl6nxDYNUQBmFhBcxVI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=XCR9sitR; arc=none smtp.client-ip=209.85.128.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="XCR9sitR" Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-71d60150590so12848757b3.0 for ; Fri, 12 Sep 2025 08:09:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689794; x=1758294594; darn=vger.kernel.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=gzHigyy7wb6B4Qf5Kb9gVs2tyhtkzh8ngJUDwiJtOEQ=; b=XCR9sitRPs4JwCuc0rW5kAN5QtNyAzap3CHpbIqpkfMi/GQ8+MFD1qqJ4H0/5QNF2K SNxjH4dVRl4A1Da+NbMbF3F6srXILfhAdZogDulhQT9u9WTMRZfdRTRGHIhga0PEwVA7 +NM0yBqClDI0r8q9GTZ3qDERgEQEbzF0alF0+7VVbzKaplFN19GnvEPPEhFB2IdUuzvY i+AWyq0JlB+5/doiUzg7CqTu8IJ1T6w7MA9VKgj4HCMqkjf37rG63CvA+PPJiSz9Qwar dbboLzB6qR6mzNeit2sgN8J9ineKQru+5dTlOHCWEg3/qyymKM6RhKEs+5jC2L3jE4tC tTYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689794; x=1758294594; 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=gzHigyy7wb6B4Qf5Kb9gVs2tyhtkzh8ngJUDwiJtOEQ=; b=dzdPVR23sRx1VgUxFBC3oDcWJ0xi58QxG4a4j0Vg3Sz3ulCNzxr7OHwEFEU5NwucuT RR1eEPRz+vdo0R/BXEisDyOel/X96b3qZajDb0fzy54QwHa+3yenMW1CPhG6tPoIYX7x tAThHYG+noWTI/GebCSGClev2e5JcJ+zhtyjEx8KGhdfBWPtN3kXRBh+rcxkN7FFeKis 6eq2O7b9h/4YbPB9kA3xGYlHUotuK6L8VEX9DzCeVRGdsT0voK/bV52LUGBG/tLkIxM2 BXESbyUiT03HsAjLLSRYYR2b2n3ArqAVDn8TAS8VtcIGDf3MxbLbekTorlyoPWUhNBpt lUuw== X-Forwarded-Encrypted: i=1; AJvYcCVbv6XOz6TLLwEl0MFg0px1OkkwMjgHwWt7kvlj6Me0KCKhbFiCWk/USWBm90Xys6Y42VWJQJI8jcUY3+I=@vger.kernel.org X-Gm-Message-State: AOJu0YyzfxxW8u/WRQ09KTbWlNiT4/9WmnlskD48/xJL1EGU/eUbFpEU xbPTqeCjdvhkh6387+xTq6xkBMUsUkwrNlA2/0KmGG8bU4JZjcvbUwusCmAR1VrvwRE= X-Gm-Gg: ASbGncsqwXaywyWH6X8YKGrKcEv7o97JG0fiZRrRzKzGVB9VQdf8KOvKaC/2B2AeY+o MlgWjn7vLchCI0uh4prLN5z0NyFWGvpEbbgmZ10DORmiFjEalmvm55UGHffrwLarK80XDjn5/IQ upnFC4HPx2tNRapmAZXxSuLgbNGa9dHv94Yn+SY9aQz1vqWkyqJbEdmMJZKv6qCxN43YoC2kB/O y6r3n/L4URf8Pi3Fio0tYlzRcDYGyj2n1Bchhn3SJMY9L7iwwGU45rjexFOGEpG1kLcwjzhDiia T7qyC8IEwXK3Bv7lhTOF7PoQ7mfTDOE7iu1bHbuBjfABnzkYHLNo4M+DgWrE0Ht6D2Vd3OcziGf 9PW/M8iK1uOz0FYtR6a9aYxoF0vOzwFs45J6PmGBq3+cc X-Google-Smtp-Source: AGHT+IE5YJnan3mhmVKTpnc/qVabMAWHQ4V7v9w5sLmYvHsMlgVVw6mvPzm8RfO76m/SQuXkiV/5wA== X-Received: by 2002:a05:690c:c16:b0:729:f78b:4205 with SMTP id 00721157ae682-730652dc116mr32595427b3.36.1757689793641; Fri, 12 Sep 2025 08:09:53 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.09.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:09:53 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 01/16] kmemdump: Introduce kmemdump Date: Fri, 12 Sep 2025 18:08:40 +0300 Message-ID: <20250912150855.2901211-2-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Kmemdump mechanism allows any driver to mark a specific memory area for later dumping/debugging purpose, depending on the functionality of the attached backend. The backend would interface any hardware mechanism that will allow dumping to complete regardless of the state of the kernel (running, frozen, crashed, or any particular state). Signed-off-by: Eugen Hristev --- MAINTAINERS | 6 ++ include/linux/kmemdump.h | 63 ++++++++++++ mm/Kconfig.debug | 2 + mm/Makefile | 1 + mm/kmemdump/Kconfig.debug | 14 +++ mm/kmemdump/Makefile | 3 + mm/kmemdump/kmemdump.c | 202 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 291 insertions(+) create mode 100644 include/linux/kmemdump.h create mode 100644 mm/kmemdump/Kconfig.debug create mode 100644 mm/kmemdump/Makefile create mode 100644 mm/kmemdump/kmemdump.c diff --git a/MAINTAINERS b/MAINTAINERS index 8cf4990a8ff6..1713cccefc91 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13810,6 +13810,12 @@ L: linux-iio@vger.kernel.org S: Supported F: drivers/iio/accel/kionix-kx022a* =20 +KMEMDUMP +M: Eugen Hristev +S: Maintained +F: include/linux/kmemdump.h +F: mm/kmemdump/kmemdump.c + KMEMLEAK M: Catalin Marinas S: Maintained diff --git a/include/linux/kmemdump.h b/include/linux/kmemdump.h new file mode 100644 index 000000000000..8e764bb2d8ac --- /dev/null +++ b/include/linux/kmemdump.h @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef _KMEMDUMP_H +#define _KMEMDUMP_H + +enum kmemdump_uid { + KMEMDUMP_ID_START =3D 0, + KMEMDUMP_ID_USER_START, + KMEMDUMP_ID_USER_END, + KMEMDUMP_ID_NO_ID, +}; + +#ifdef CONFIG_KMEMDUMP +/** + * struct kmemdump_zone - region mark zone information + * @id: unique id for this zone + * @zone: pointer to the memory area for this zone + * @size: size of the memory area of this zone + */ +struct kmemdump_zone { + enum kmemdump_uid id; + void *zone; + size_t size; +}; + +#define KMEMDUMP_BACKEND_MAX_NAME 128 +/** + * struct kmemdump_backend - region mark backend information + * @name: the name of the backend + * @register_region: callback to register region in the backend + * @unregister_region: callback to unregister region in the backend + */ +struct kmemdump_backend { + char name[KMEMDUMP_BACKEND_MAX_NAME]; + int (*register_region)(const struct kmemdump_backend *be, + enum kmemdump_uid uid, void *vaddr, size_t size); + int (*unregister_region)(const struct kmemdump_backend *be, + enum kmemdump_uid uid); +}; + +int kmemdump_register_backend(const struct kmemdump_backend *backend); +void kmemdump_unregister_backend(const struct kmemdump_backend *backend); + +int kmemdump_register_id(enum kmemdump_uid id, void *zone, size_t size); + +#define kmemdump_register(...) \ + kmemdump_register_id(KMEMDUMP_ID_NO_ID, __VA_ARGS__) \ + +void kmemdump_unregister(enum kmemdump_uid id); +#else +static inline int kmemdump_register_id(enum kmemdump_uid uid, void *area, + size_t size) +{ + return 0; +} + +#define kmemdump_register(...) + +static inline void kmemdump_unregister(enum kmemdump_uid id) +{ +} +#endif + +#endif diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug index 32b65073d0cc..b6aad5cb09c1 100644 --- a/mm/Kconfig.debug +++ b/mm/Kconfig.debug @@ -309,3 +309,5 @@ config PER_VMA_LOCK_STATS overhead in the page fault path. =20 If in doubt, say N. + +source "mm/kmemdump/Kconfig.debug" diff --git a/mm/Makefile b/mm/Makefile index 21abb3353550..ca1691dd8924 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -90,6 +90,7 @@ obj-$(CONFIG_MMU_NOTIFIER) +=3D mmu_notifier.o obj-$(CONFIG_KSM) +=3D ksm.o obj-$(CONFIG_PAGE_POISONING) +=3D page_poison.o obj-$(CONFIG_KASAN) +=3D kasan/ +obj-$(CONFIG_KMEMDUMP) +=3D kmemdump/ obj-$(CONFIG_KFENCE) +=3D kfence/ obj-$(CONFIG_KMSAN) +=3D kmsan/ obj-$(CONFIG_FAILSLAB) +=3D failslab.o diff --git a/mm/kmemdump/Kconfig.debug b/mm/kmemdump/Kconfig.debug new file mode 100644 index 000000000000..5654180141c0 --- /dev/null +++ b/mm/kmemdump/Kconfig.debug @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0 + +config KMEMDUMP + bool "KMEMDUMP: Allow the kernel to register memory regions for dumping p= urpose" + help + Kmemdump mechanism allows any driver to mark a specific memory area + for later dumping/debugging purpose, depending on the functionality + of the attached backend. + The backend would interface any hardware mechanism that will allow + dumping to complete regardless of the state of the kernel + (running, frozen, crashed, or any particular state). + + Note that modules using this feature must be rebuilt if option + changes. diff --git a/mm/kmemdump/Makefile b/mm/kmemdump/Makefile new file mode 100644 index 000000000000..f5b917a6ef5e --- /dev/null +++ b/mm/kmemdump/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-y +=3D kmemdump.o diff --git a/mm/kmemdump/kmemdump.c b/mm/kmemdump/kmemdump.c new file mode 100644 index 000000000000..c016457620a4 --- /dev/null +++ b/mm/kmemdump/kmemdump.c @@ -0,0 +1,202 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include +#include + +#define MAX_ZONES 201 + +static int default_register_region(const struct kmemdump_backend *be, + enum kmemdump_uid id, void *area, size_t sz) +{ + return 0; +} + +static int default_unregister_region(const struct kmemdump_backend *be, + enum kmemdump_uid id) +{ + return 0; +} + +static const struct kmemdump_backend kmemdump_default_backend =3D { + .name =3D "default", + .register_region =3D default_register_region, + .unregister_region =3D default_unregister_region, +}; + +static const struct kmemdump_backend *backend =3D &kmemdump_default_backen= d; +static DEFINE_MUTEX(kmemdump_lock); +static struct kmemdump_zone kmemdump_zones[MAX_ZONES]; + +/** + * kmemdump_register_id() - Register region into kmemdump with given ID. + * @req_id: Requested unique kmemdump_uid that identifies the region + * This can be KMEMDUMP_ID_NO_ID, in which case the function will + * find an unused ID and return it. + * @zone: pointer to the zone of memory + * @size: region size + * + * Return: On success, it returns the unique id for the region. + * On failure, it returns negative error value. + */ +int kmemdump_register_id(enum kmemdump_uid req_id, void *zone, size_t size) +{ + struct kmemdump_zone *z; + enum kmemdump_uid uid =3D req_id; + int ret; + + if (uid < KMEMDUMP_ID_START) + return -EINVAL; + + if (uid >=3D MAX_ZONES) + return -ENOSPC; + + mutex_lock(&kmemdump_lock); + + if (uid =3D=3D KMEMDUMP_ID_NO_ID) + while (uid < MAX_ZONES) { + if (!kmemdump_zones[uid].id) + break; + uid++; + } + + if (uid =3D=3D MAX_ZONES) { + mutex_unlock(&kmemdump_lock); + return -ENOSPC; + } + + z =3D &kmemdump_zones[uid]; + + if (z->id) { + mutex_unlock(&kmemdump_lock); + return -EALREADY; + } + + ret =3D backend->register_region(backend, uid, zone, size); + if (ret) { + mutex_unlock(&kmemdump_lock); + return ret; + } + + z->zone =3D zone; + z->size =3D size; + z->id =3D uid; + + mutex_unlock(&kmemdump_lock); + + return uid; +} +EXPORT_SYMBOL_GPL(kmemdump_register_id); + +/** + * kmemdump_unregister() - Unregister region from kmemdump. + * @id: unique id that was returned when this region was successfully + * registered initially. + * + * Return: None + */ +void kmemdump_unregister(enum kmemdump_uid id) +{ + struct kmemdump_zone *z =3D NULL; + + mutex_lock(&kmemdump_lock); + + z =3D &kmemdump_zones[id]; + if (!z->id) { + mutex_unlock(&kmemdump_lock); + return; + } + + backend->unregister_region(backend, z->id); + + memset(z, 0, sizeof(*z)); + + mutex_unlock(&kmemdump_lock); +} +EXPORT_SYMBOL_GPL(kmemdump_unregister); + +/** + * kmemdump_register_backend() - Register a backend into kmemdump. + * @be: Pointer to a driver allocated backend. This backend must have + * two callbacks for registering and deregistering a zone from the + * backend. + * + * Only one backend is supported at a time. + * + * Return: On success, it returns 0, negative error value otherwise. + */ +int kmemdump_register_backend(const struct kmemdump_backend *be) +{ + enum kmemdump_uid uid; + int ret; + + if (!be || !be->register_region || !be->unregister_region) + return -EINVAL; + + mutex_lock(&kmemdump_lock); + + /* Try to call the old backend for all existing regions */ + for (uid =3D KMEMDUMP_ID_START; uid < MAX_ZONES; uid++) + if (kmemdump_zones[uid].id) + backend->unregister_region(backend, + kmemdump_zones[uid].id); + + backend =3D be; + pr_debug("kmemdump backend %s registered successfully.\n", + backend->name); + + /* Call the new backend for all existing regions */ + for (uid =3D KMEMDUMP_ID_START; uid < MAX_ZONES; uid++) { + if (!kmemdump_zones[uid].id) + continue; + ret =3D backend->register_region(backend, + kmemdump_zones[uid].id, + kmemdump_zones[uid].zone, + kmemdump_zones[uid].size); + if (ret) + pr_debug("register region failed with %d\n", ret); + } + + mutex_unlock(&kmemdump_lock); + + return 0; +} +EXPORT_SYMBOL_GPL(kmemdump_register_backend); + +/** + * kmemdump_unregister_backend() - Unregister the backend from kmemdump. + * @be: Pointer to a driver allocated backend. This backend must match + * the initially registered backend. + * + * Only one backend is supported at a time. + * Before deregistering, this will call the backend to unregister all the + * previously registered zones. + * + * Return: None + */ +void kmemdump_unregister_backend(const struct kmemdump_backend *be) +{ + enum kmemdump_uid uid; + + mutex_lock(&kmemdump_lock); + + if (backend !=3D be) { + mutex_unlock(&kmemdump_lock); + return; + } + + /* Try to call the old backend for all existing regions */ + for (uid =3D KMEMDUMP_ID_START; uid < MAX_ZONES; uid++) + if (kmemdump_zones[uid].id) + backend->unregister_region(backend, + kmemdump_zones[uid].id); + + pr_debug("kmemdump backend %s removed successfully.\n", be->name); + + backend =3D &kmemdump_default_backend; + + mutex_unlock(&kmemdump_lock); +} +EXPORT_SYMBOL_GPL(kmemdump_unregister_backend); + --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yx1-f45.google.com (mail-yx1-f45.google.com [74.125.224.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A69E231352B for ; Fri, 12 Sep 2025 15:09:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689801; cv=none; b=VHaWrbvZEpTyztpGQWF0Z07qpbpTUqPZd8Zi6b97AVSckq/3Mx9/r4LIIc29l6FiFhmHwyujOnlgy0uwMBQPw75Y2FirWDqAV+NJN+z40CqVvEUWz0r00fGGqSYXvvvT47C24Kr053PbTk1mq79cz0QGl4cGh161c5uOKVPwJJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689801; c=relaxed/simple; bh=NvrjHXeuAnfuPGfi6BRYd0FKeUfYwLvAE3fvW1FL450=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dIVplohJ2Q2LSs8xa42JJLHds9yupuv9pe84PBfE6kM9RL2pS0qLxwVUJsz9YqN8aiWVBkHuHTfBswDxlIiACh5un2uzhmJDwm2YD+Z9zehs+fFq72lPD58gTq+NprDkuXA3qSVrfH5ihBkKh07QvCTx/d5eqqycS5Ji6xa95PE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=tPaCglvD; arc=none smtp.client-ip=74.125.224.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="tPaCglvD" Received: by mail-yx1-f45.google.com with SMTP id 956f58d0204a3-62adfdda606so26614d50.2 for ; Fri, 12 Sep 2025 08:09:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689798; x=1758294598; darn=vger.kernel.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=RH4GhObM3FT55o7hGQgrlMBMoWx9IX3m3EBVgQrzYfg=; b=tPaCglvD3bTER4nu4P7fUsfICDLNQl5bCR5rGVyNn1s32La91d2ru3fJmK8Kp0LfY4 Nblqh4kSwxINAIKFKDxGEM26EBUXohgDFy3fvLKAHGsGdEOXLuI7DC7Bp0hiUhNFvB3D TIOCxqC0wjMfk2a86ow+KvQ2h4DD5pBTvvbU11dQLDzOjFC0gLG5/Xt7TPNUOBNlEC01 QbPA/5MK6h0bNJ7fJaXPfbqSiWBofu2T8cJ3RwTvi1m160yjV36ii3Gx7cRYYzA55D8c icfkdVgezVShVx6JQaUnljWYBKXT+pZr4vJcdnMh0EV8owtTs0aeP5NdmdVtcw3SBh/U 5VAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689798; x=1758294598; 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=RH4GhObM3FT55o7hGQgrlMBMoWx9IX3m3EBVgQrzYfg=; b=W3+DuLMVZDOMm1WD3tZ9rykduzj5p/6RvpQiI1JvJFO3cu9P7yv1FiI3lzR/Dpasl+ 6egX+fvVpI9Abrq3rott3HcUBTrN+6JjrgeNwSop25gOc/3d5SxPCDI+jg0TIatjs+hj cN7aP+tluL77HGdi6P4WQgiMZlR5BYJqluCvUw4KkmcTDaR2/23608jnIII5Oz9MU2p0 LhKvvs5+A4W66QvbS7NeEtVnH86rFB0kbqErnDWJ9mUcVjOo6h8ezzn28c1zZf8TjW7+ V7VybzfmY33YKiPSxbTBdJSr0U0Vdu1Do1oKcXJPPfHzMgeUPJ5WygOpOM9IGm2+ducL S/Xg== X-Forwarded-Encrypted: i=1; AJvYcCUY1Ftms49lSqUon6klXDLYwL8qrCx8oeyNUCqfOdXro7T1FUBzmylJlE0YR78z+Xm0ukbXeXe5ewqgwbk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1NDxFkXffPXVkksOAwfUhQQRt2MeoiWyWgSjwGbYuEQFFGq+I MxpkwJSfKfQQakvPMTEjxb5w2mpdJLng8bFATWvhiJYsiUxpsQMS7fVRvDh4HuPgQeo= X-Gm-Gg: ASbGnct7oNa6rBWy5+egPIC6l4B2d0DjGPykZ3HFDqIwUEokO48NFVw8ZzEkqAQ6z52 qwzhFBcd/q5eAs+LLTjW8BFcwwStEfhx3ICid05R4VlHqb5YDjQgSeauBTmJs9ZjZ0rMqQqoHdD XAApRADRWkzLP7GQCh1pl9a5r/jhQXmNszR3TK8tYK1qRLtsbPjPnM/cTf/C6jxbBMa7CySdEJ3 nUbgIXVNhwfLw7nv/qE42PsLrPCk6JPSN6HKHLJLQduC1gW3qLlZ13DLGKNp73u5gNxRvh9YYks vuVk6ngcRZIDAQCndzyubf3cq9C7rtf/gDHO8L6mCK1MnCGDF2U5BymQCYOpprO2dpuHXLnjYPK na3MdrGes6ML736lVkCV30KHvfpCgta9QFJxVldI/AH1U X-Google-Smtp-Source: AGHT+IHDbtGqslyeLn4YFWeoqnBwKggrxCYxTs3G1b8DQvW49OjHmQw5TtCHo1C0fUHoFsODFmt/wQ== X-Received: by 2002:a05:690c:660b:b0:721:7e7:50d with SMTP id 00721157ae682-730651d60dcmr29556217b3.42.1757689798342; Fri, 12 Sep 2025 08:09:58 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.09.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:09:58 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 02/16] Documentation: Add kmemdump Date: Fri, 12 Sep 2025 18:08:41 +0300 Message-ID: <20250912150855.2901211-3-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document the new kmemdump kernel feature. Signed-off-by: Eugen Hristev --- Documentation/dev-tools/index.rst | 1 + Documentation/dev-tools/kmemdump.rst | 131 +++++++++++++++++++++++++++ MAINTAINERS | 1 + 3 files changed, 133 insertions(+) create mode 100644 Documentation/dev-tools/kmemdump.rst diff --git a/Documentation/dev-tools/index.rst b/Documentation/dev-tools/in= dex.rst index 65c54b27a60b..1b6674efeda0 100644 --- a/Documentation/dev-tools/index.rst +++ b/Documentation/dev-tools/index.rst @@ -28,6 +28,7 @@ Documentation/process/debugging/index.rst kmsan ubsan kmemleak + kmemdump kcsan kfence kselftest diff --git a/Documentation/dev-tools/kmemdump.rst b/Documentation/dev-tools= /kmemdump.rst new file mode 100644 index 000000000000..504321de951a --- /dev/null +++ b/Documentation/dev-tools/kmemdump.rst @@ -0,0 +1,131 @@ +.. SPDX-License-Identifier: GPL-2.0 + +=3D=3D=3D=3D=3D=3D=3D=3D +kmemdump +=3D=3D=3D=3D=3D=3D=3D=3D + +This document provides information about the kmemdump feature. + +Overview +=3D=3D=3D=3D=3D=3D=3D=3D + +kmemdump is a mechanism that allows any driver or producer to register a +chunk of memory into it, to be used at a later time for a specific +purpose like debugging or memory dumping. + +kmemdump allows a backend to be connected, this backend interfaces a +specific hardware that can debug or dump the memory previously registered +into kmemdump. + +The reasoning for kmemdump is to minimize the required debug information +in case of a kernel problem. A traditional debug method involves dumping +the whole kernel memory and then inspecting it. Kmemdump allows the +users to select which memory is of interest, in order to help this +specific use case in production, where memory and connectivity +are limited. + +Although the kernel has multiple debugging mechanisms, kmemdump fits +a particular model which is not covered by the others. + +kmemdump Internals +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +API +--- + +A memory region is being registered with a call to kmemdump_register() whi= ch +takes as parameters the ID of the region, a pointer to the virtual memory +start address and the size. If successful, this call returns an unique ID = for +the allocated zone (either the requested ID or an allocated ID). +IDs are predefined in the kmemdump header. A second registration with the +same ID is not allowed, the caller needs to deregister first. +A dedicated NO_ID is defined, which has kmemdump allocate a new unique ID +for the request and return it. This case is useful with multiple dynamic +loop allocations where ID is not significant. + +The region would be registered with a call to kmemdump_unregister() which +takes the id as a parameter. + +For dynamically allocated memory, kmemdump defines a variety of wrappers +on top of allocation functions which are given as parameters. +This makes the dynamic allocation easy to use without additional calls +to registration functions. However kmemdump still exposes the register API +for cases where it may be needed (e.g. size is not exactly known at alloca= tion +time). + +For static variables, a variety of annotation macros are provided. These +macros will create an annotation struct inside a separate section. + + +Backend +------- + +Backend is represented by a struct kmemdump_backend which has to be filled +in by the backend driver. Further, this struct is being passed to kmemdump +with a backend_register() call. backend_unregister() will remove the backe= nd +from kmemdump. + +Once a backend is being registered, all previously registered regions are +being sent to the backend for registration. + +When the backend is being removed, all regions are being first deregistered +from the backend. + +kmemdump will request the backend to register a region with register_regio= n() +call, and deregister a region with unregister_region() call. These two +functions are mandatory to be provided by a backend at registration time. + +Data structures +--------------- + +struct kmemdump_backend represents the kmemdump backend and should be +initialized by the backend driver. + +The regions are being stored in a simple fixed size array. It avoids +memory allocation overhead. This is not performance critical nor does +allocating a few hundred entries create a memory consumption problem. + +The static variables registered into kmemdump are being annotated into +a dedicated .kemdump memory section. This is then walked by kmemdump +at a later time and each variable is registered. + +kmemdump Initialization +----------------------- + +After system boots, kmemdump will be ready to accept region registration +from producer drivers. Even if the backend may not be registered yet, +there is a default no-op backend that is registered. At any time the backe= nd +can be changed with a real backend in which case all regions are being +registered to the new backend. + +backend functionality +--------------------- + +kmemdump backend can keep it's own list of regions and use the specific +hardware available to dump the memory regions or use them for debugging. + +kmemdump example +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +A production scenario for kmemdump is the following: +The kernel registers the linux_banner variable into kmemdump with +a simple call like: + + kmemdump_register(linux_banner, sizeof(linux_banner)); + +The backend will receive a call to it's register_region() callback after it +probes and registers with kmemdump. +The backend will then note into a specific table the address of the banner +and the size of it. +The specific table is then written to a shared memory area that can be +read by upper level firmware. +When the kernel freezes (hypothetically), the kernel will no longer feed +the watchdog. The watchdog will trigger a higher exception level interrupt +which will be handled by the upper level firmware. This firmware will then +read the shared memory table and find an entry with the start and size of +the banner. It will then copy it for debugging purpose. The upper level +firmware will then be able to provide useful debugging information, +like in this example, the banner. + +As seen here, kmemdump facilitates the interaction between the kernel +and a specific backend. diff --git a/MAINTAINERS b/MAINTAINERS index 1713cccefc91..974f43c3902b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13813,6 +13813,7 @@ F: drivers/iio/accel/kionix-kx022a* KMEMDUMP M: Eugen Hristev S: Maintained +F: Documentation/dev-tools/kmemdump.rst F: include/linux/kmemdump.h F: mm/kmemdump/kmemdump.c =20 --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B0EB301031 for ; Fri, 12 Sep 2025 15:10:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689807; cv=none; b=TckncIpEPsCA2WSPeCXdAESQgphqcyiJ0gzDMpZsRhf0S5g8nZv+pWhGi8dt4UOXV5bNOr591GEkoug5BePe+sJPy3KsjgcdfcJtz3h5qcmvvhrugTHitNnZ1svhj8bNl2V+Mw9xENAvTrL5TJV40gk00thGobvLa7ehDJShJ6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689807; c=relaxed/simple; bh=dv2O9w9agbngektKvmDxu7BDFlmtFAERpT9g4V25J2E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k0MZ/UWRtETVmao9OKFYzdG5KD4iG4AOUf7BVWWIRzC3ygGlmHZa5I6X++SP8jSPeqoIpY0B86Je7xKpKtBQtZBiTWyaJr9FlbjfpUN6vl4U+6O+w8YSOGTzBJ1gzlIUyuunPY0AmNNEsSgr1FLZXkaT6vuloif8yj0gvyAc+iU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=cQumRqng; arc=none smtp.client-ip=209.85.128.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="cQumRqng" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-723ad237d1eso18638637b3.1 for ; Fri, 12 Sep 2025 08:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689804; x=1758294604; darn=vger.kernel.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=7ltLVlonCLmXqCMj5NKS1dwyzuNto475BJCWDW4VinA=; b=cQumRqngHyWg2L2ov4j2fDuDSEWLXvXVngMhj04E5NCwNc8DmpwSFVdXuabJS9QVrQ 1DK0mVq0F22aFjH48rztT+1bsmNIMORm339OPrQ/VvN9EB2JqARttvrH1oo/qLofHg1G NOj47PgOBOYmBxs7GmxzvzZtRenO/mPaher+OrpbQ5zB40GyE/THKgkZzyvQYN3CTVzW Jx3Wxh3NOFU4pD55N0L2jZ13rrMICc5aKxJLIGEjYeRsG4BowKjQWM7kn4oUCM/oWrE7 nieAimDHWnhl4oIdhV45Y7LQ9rBtR/hzshi5YS3rlHpgs7LUqYpwgjaznHRzmeBSMjc2 HYNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689804; x=1758294604; 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=7ltLVlonCLmXqCMj5NKS1dwyzuNto475BJCWDW4VinA=; b=BopQZZqVhyYJ6gjmHFt6K8p+80+sc/p8yF6VdcRqg00eJpGewoAp56ctXau65c7s98 oYYnHHnuQarS8yuuRWPo86O95WD2SQ6mQc9nsGxuoNKUwhYi6TlEU74y4G/9ggEhl2dQ /17P4QlmIfaRthxn+NkDoDENTun9aj2soXjl1uzuZdqJU3zjTKPet94Flgf5vgDVrDYT o5/Cu8Lv+CsYY4qiZAYGifGp88p0fVG+kZe9x0iKs7f9ffVpRezJSqmmdNyLs8gs+uzq Cgzpmx38+RiJNhGlddeSWyk6o5+S8AaecGUJgvs/iTLafETgP6iavE7DsGRndSRppsXD pCFg== X-Forwarded-Encrypted: i=1; AJvYcCVoXcSaQeUTvNwNDUmGQkss06GmRD8CvpS9xYauzUJk7eueEj0gNq9WhAvecZa/eD9aAlGQBcXxkT5ERCQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyiZYYRrRvKoHi80CFVREKRQkMzkGfSrlxvDMvXOy3q8hB3piew yTCz6m9caVRjdGKQr2SJrkd88pR5ZCuYuKs0bJujvxkFn9psCzHMRqzgyBHbYamBlOw= X-Gm-Gg: ASbGncvYjuBa73ihd7rm9TSPed9/MbDG2d4h1FoC8OlDnHReRoL+bfdsnTctc6dggC7 2n/JIxgTEIsL54mEaWo6OmIUIRO+1+ytB4dq4sRZ8QGQwNeBa7g8qtqU+dlji/LK+XJhgBLSIZb LpMv1xfAlnw2EjVPVw/Gn4UnpPFxcOvnvz+latfxaFsyUIkgo4D6MdBPsnFWD+c22UB5AFWWUmY 60l9a3FfIdj59W50m4BSfK8HhDSnl63jfBAk/4Dejmw3fbtmWzXU70TKo0Bd1BmcFDX4nrDMpuP 3Dz7639iXlIu5v9V/iCS6hbak1LkIHbJeVgKmZ/arscjwHY1B2OSxgZN0bYu9M08P9iXjyetZPr JnahJarxRtR9K5PP5nfANjspN40kGNIec2eWsDyob8uWS X-Google-Smtp-Source: AGHT+IErKNSDF6fGSUxu7uTin3OwoIqA+uAqwoNBYvN/bvRQQvIrBcXKk9r6zS33h/brxBiiTlCCzQ== X-Received: by 2002:a05:690c:7442:b0:725:74c3:75eb with SMTP id 00721157ae682-73065da8ef0mr33696617b3.54.1757689804212; Fri, 12 Sep 2025 08:10:04 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.09.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:03 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 03/16] kmemdump: Add coreimage ELF layer Date: Fri, 12 Sep 2025 18:08:42 +0300 Message-ID: <20250912150855.2901211-4-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement kmemdumping into an ELF coreimage. With this feature enabled, kmemdump will assemble all the regions into a coreimage, by having an initial first region with an ELF header, a second region with vmcoreinfo data, and then register vital kernel information in the subsequent regions. This image can then be dumped, assembled into a single file and loaded into debugging tools like crash/gdb. Signed-off-by: Eugen Hristev --- MAINTAINERS | 1 + include/linux/kmemdump.h | 67 ++++++++++ mm/kmemdump/Kconfig.debug | 18 ++- mm/kmemdump/Makefile | 1 + mm/kmemdump/kmemdump.c | 32 +++++ mm/kmemdump/kmemdump_coreimage.c | 222 +++++++++++++++++++++++++++++++ 6 files changed, 339 insertions(+), 2 deletions(-) create mode 100644 mm/kmemdump/kmemdump_coreimage.c diff --git a/MAINTAINERS b/MAINTAINERS index 974f43c3902b..fc8cd34cf190 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13816,6 +13816,7 @@ S: Maintained F: Documentation/dev-tools/kmemdump.rst F: include/linux/kmemdump.h F: mm/kmemdump/kmemdump.c +F: mm/kmemdump/kmemdump_coreimage.c =20 KMEMLEAK M: Catalin Marinas diff --git a/include/linux/kmemdump.h b/include/linux/kmemdump.h index 8e764bb2d8ac..ac2eb1b4ba06 100644 --- a/include/linux/kmemdump.h +++ b/include/linux/kmemdump.h @@ -4,6 +4,52 @@ =20 enum kmemdump_uid { KMEMDUMP_ID_START =3D 0, + KMEMDUMP_ID_COREIMAGE_ELF, + KMEMDUMP_ID_COREIMAGE_VMCOREINFO, + KMEMDUMP_ID_COREIMAGE_CONFIG, + KMEMDUMP_ID_COREIMAGE_MEMSECT, + KMEMDUMP_ID_COREIMAGE__totalram_pages, + KMEMDUMP_ID_COREIMAGE___cpu_possible_mask, + KMEMDUMP_ID_COREIMAGE___cpu_present_mask, + KMEMDUMP_ID_COREIMAGE___cpu_online_mask, + KMEMDUMP_ID_COREIMAGE___cpu_active_mask, + KMEMDUMP_ID_COREIMAGE_jiffies_64, + KMEMDUMP_ID_COREIMAGE_linux_banner, + KMEMDUMP_ID_COREIMAGE_nr_threads, + KMEMDUMP_ID_COREIMAGE_nr_irqs, + KMEMDUMP_ID_COREIMAGE_tainted_mask, + KMEMDUMP_ID_COREIMAGE_taint_flags, + KMEMDUMP_ID_COREIMAGE_mem_section, + KMEMDUMP_ID_COREIMAGE_node_data, + KMEMDUMP_ID_COREIMAGE_node_states, + KMEMDUMP_ID_COREIMAGE___per_cpu_offset, + KMEMDUMP_ID_COREIMAGE_nr_swapfiles, + KMEMDUMP_ID_COREIMAGE_init_uts_ns, + KMEMDUMP_ID_COREIMAGE_printk_rb_static, + KMEMDUMP_ID_COREIMAGE_printk_rb_dynamic, + KMEMDUMP_ID_COREIMAGE_prb, + KMEMDUMP_ID_COREIMAGE_prb_descs, + KMEMDUMP_ID_COREIMAGE_prb_infos, + KMEMDUMP_ID_COREIMAGE_prb_data, + KMEMDUMP_ID_COREIMAGE_runqueues, + KMEMDUMP_ID_COREIMAGE_high_memory, + KMEMDUMP_ID_COREIMAGE_init_mm, + KMEMDUMP_ID_COREIMAGE_init_mm_pgd, + KMEMDUMP_ID_COREIMAGE__sinittext, + KMEMDUMP_ID_COREIMAGE__einittext, + KMEMDUMP_ID_COREIMAGE__end, + KMEMDUMP_ID_COREIMAGE__text, + KMEMDUMP_ID_COREIMAGE__stext, + KMEMDUMP_ID_COREIMAGE__etext, + KMEMDUMP_ID_COREIMAGE_kallsyms_num_syms, + KMEMDUMP_ID_COREIMAGE_kallsyms_relative_base, + KMEMDUMP_ID_COREIMAGE_kallsyms_offsets, + KMEMDUMP_ID_COREIMAGE_kallsyms_names, + KMEMDUMP_ID_COREIMAGE_kallsyms_token_table, + KMEMDUMP_ID_COREIMAGE_kallsyms_token_index, + KMEMDUMP_ID_COREIMAGE_kallsyms_markers, + KMEMDUMP_ID_COREIMAGE_kallsyms_seqs_of_names, + KMEMDUMP_ID_COREIMAGE_swapper_pg_dir, KMEMDUMP_ID_USER_START, KMEMDUMP_ID_USER_END, KMEMDUMP_ID_NO_ID, @@ -60,4 +106,25 @@ static inline void kmemdump_unregister(enum kmemdump_ui= d id) } #endif =20 +#ifdef CONFIG_KMEMDUMP +#ifdef CONFIG_KMEMDUMP_COREIMAGE +int init_elfheader(void); +void update_elfheader(const struct kmemdump_zone *z); +int clear_elfheader(const struct kmemdump_zone *z); +#else +static inline int init_elfheader(void) +{ + return 0; +} + +static inline void update_elfheader(const struct kmemdump_zone *z) +{ +} + +static inline int clear_elfheader(const struct kmemdump_zone *z) +{ + return 0; +} +#endif +#endif #endif diff --git a/mm/kmemdump/Kconfig.debug b/mm/kmemdump/Kconfig.debug index 5654180141c0..f62bde50a81b 100644 --- a/mm/kmemdump/Kconfig.debug +++ b/mm/kmemdump/Kconfig.debug @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 =20 -config KMEMDUMP - bool "KMEMDUMP: Allow the kernel to register memory regions for dumping p= urpose" +menuconfig KMEMDUMP + bool "KMEMDUMP: Register memory regions for dumping purpose" help Kmemdump mechanism allows any driver to mark a specific memory area for later dumping/debugging purpose, depending on the functionality @@ -12,3 +12,17 @@ config KMEMDUMP =20 Note that modules using this feature must be rebuilt if option changes. + +config KMEMDUMP_COREIMAGE + depends on KMEMDUMP + select VMCORE_INFO + bool "Assemble memory regions into a coredump readable with debuggers" + help + Enabling this will assemble all the memory regions into a + core ELF file. The first region will include program headers for + all the regions. The second region is the vmcoreinfo and specific + coredump structures. + All the other regions follow. Specific kernel variables required + for debug tools are being registered. + The coredump file can then be loaded into GDB or crash tool and + further inspected. diff --git a/mm/kmemdump/Makefile b/mm/kmemdump/Makefile index f5b917a6ef5e..eed67f15a8d0 100644 --- a/mm/kmemdump/Makefile +++ b/mm/kmemdump/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 =20 obj-y +=3D kmemdump.o +obj-$(CONFIG_KMEMDUMP_COREIMAGE) +=3D kmemdump_coreimage.o diff --git a/mm/kmemdump/kmemdump.c b/mm/kmemdump/kmemdump.c index c016457620a4..3827b0597cac 100644 --- a/mm/kmemdump/kmemdump.c +++ b/mm/kmemdump/kmemdump.c @@ -28,6 +28,32 @@ static const struct kmemdump_backend kmemdump_default_ba= ckend =3D { static const struct kmemdump_backend *backend =3D &kmemdump_default_backen= d; static DEFINE_MUTEX(kmemdump_lock); static struct kmemdump_zone kmemdump_zones[MAX_ZONES]; +static bool kmemdump_initialized; + +static int __init init_kmemdump(void) +{ + enum kmemdump_uid uid; + + init_elfheader(); + + mutex_lock(&kmemdump_lock); + /* + * Some regions may have been registered very early. + * Update the elf header for all existing regions, + * except for KMEMDUMP_ID_COREIMAGE_ELF and + * KMEMDUMP_ID_COREIMAGE_VMCOREINFO, those are included in the + * ELF header upon its creation. + */ + for (uid =3D KMEMDUMP_ID_COREIMAGE_CONFIG; uid < MAX_ZONES; uid++) + if (kmemdump_zones[uid].id) + update_elfheader(&kmemdump_zones[uid]); + + kmemdump_initialized =3D true; + mutex_unlock(&kmemdump_lock); + + return 0; +} +late_initcall(init_kmemdump); =20 /** * kmemdump_register_id() - Register region into kmemdump with given ID. @@ -83,6 +109,9 @@ int kmemdump_register_id(enum kmemdump_uid req_id, void = *zone, size_t size) z->size =3D size; z->id =3D uid; =20 + if (kmemdump_initialized) + update_elfheader(z); + mutex_unlock(&kmemdump_lock); =20 return uid; @@ -110,6 +139,9 @@ void kmemdump_unregister(enum kmemdump_uid id) =20 backend->unregister_region(backend, z->id); =20 + if (kmemdump_initialized) + clear_elfheader(z); + memset(z, 0, sizeof(*z)); =20 mutex_unlock(&kmemdump_lock); diff --git a/mm/kmemdump/kmemdump_coreimage.c b/mm/kmemdump/kmemdump_coreim= age.c new file mode 100644 index 000000000000..a7b51a171d8e --- /dev/null +++ b/mm/kmemdump/kmemdump_coreimage.c @@ -0,0 +1,222 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include + +#define CORE_STR "CORE" + +#define MAX_NUM_ENTRIES 201 + +static struct elfhdr *ehdr; +static size_t elf_offset; + +static void append_kcore_note(char *notes, size_t *i, const char *name, + unsigned int type, const void *desc, + size_t descsz) +{ + struct elf_note *note =3D (struct elf_note *)¬es[*i]; + + note->n_namesz =3D strlen(name) + 1; + note->n_descsz =3D descsz; + note->n_type =3D type; + *i +=3D sizeof(*note); + memcpy(¬es[*i], name, note->n_namesz); + *i =3D ALIGN(*i + note->n_namesz, 4); + memcpy(¬es[*i], desc, descsz); + *i =3D ALIGN(*i + descsz, 4); +} + +static void append_kcore_note_nodesc(char *notes, size_t *i, const char *n= ame, + unsigned int type, size_t descsz) +{ + struct elf_note *note =3D (struct elf_note *)¬es[*i]; + + note->n_namesz =3D strlen(name) + 1; + note->n_descsz =3D descsz; + note->n_type =3D type; + *i +=3D sizeof(*note); + memcpy(¬es[*i], name, note->n_namesz); + *i =3D ALIGN(*i + note->n_namesz, 4); +} + +static struct elf_phdr *elf_phdr_entry_addr(struct elfhdr *ehdr, int idx) +{ + struct elf_phdr *ephdr =3D (struct elf_phdr *)((size_t)ehdr + ehdr->e_pho= ff); + + return &ephdr[idx]; +} + +/** + * clear_elfheader() - Remove the program header for a specific memory zone + * @z: pointer to the kmemdump zone + * + * Return: On success, it returns 0, errno otherwise + */ +int clear_elfheader(const struct kmemdump_zone *z) +{ + struct elf_phdr *phdr; + struct elf_phdr *tmp_phdr; + unsigned int phidx; + unsigned int i; + + for (i =3D 0; i < ehdr->e_phnum; i++) { + phdr =3D elf_phdr_entry_addr(ehdr, i); + if (phdr->p_paddr =3D=3D virt_to_phys(z->zone) && + phdr->p_memsz =3D=3D ALIGN(z->size, 4)) + break; + } + + if (i =3D=3D ehdr->e_phnum) { + pr_debug("Cannot find program header entry in elf\n"); + return -EINVAL; + } + + phidx =3D i; + + /* Clear program header */ + tmp_phdr =3D elf_phdr_entry_addr(ehdr, phidx); + for (i =3D phidx; i < ehdr->e_phnum - 1; i++) { + tmp_phdr =3D elf_phdr_entry_addr(ehdr, i + 1); + phdr =3D elf_phdr_entry_addr(ehdr, i); + memcpy(phdr, tmp_phdr, sizeof(*phdr)); + phdr->p_offset =3D phdr->p_offset - ALIGN(z->size, 4); + } + memset(tmp_phdr, 0, sizeof(*tmp_phdr)); + ehdr->e_phnum--; + + elf_offset -=3D ALIGN(z->size, 4); + + return 0; +} + +/** + * update_elfheader() - Add the program header for a specific memory zone + * @z: pointer to the kmemdump zone + * + * Return: None + */ +void update_elfheader(const struct kmemdump_zone *z) +{ + struct elf_phdr *phdr; + + phdr =3D elf_phdr_entry_addr(ehdr, ehdr->e_phnum++); + + phdr->p_type =3D PT_LOAD; + phdr->p_offset =3D elf_offset; + phdr->p_vaddr =3D (elf_addr_t)z->zone; + phdr->p_paddr =3D (elf_addr_t)virt_to_phys(z->zone); + phdr->p_filesz =3D phdr->p_memsz =3D ALIGN(z->size, 4); + phdr->p_flags =3D PF_R | PF_W; + + elf_offset +=3D ALIGN(z->size, 4); +} + +/** + * init_elfheader() - Prepare coreinfo elf header + * This function prepares the elf header for the coredump image. + * Initially there is a single program header for the elf NOTE. + * The note contains the usual core dump information, and the + * vmcoreinfo. + * + * Return: 0 on success, errno otherwise + */ +int init_elfheader(void) +{ + struct elf_phdr *phdr; + void *notes; + unsigned int elfh_size; + unsigned int phdr_off; + size_t note_len, i =3D 0; + + struct elf_prstatus prstatus =3D {}; + struct elf_prpsinfo prpsinfo =3D { + .pr_sname =3D 'R', + .pr_fname =3D "vmlinux", + }; + + /* + * Header buffer contains: + * ELF header, Note entry with PR status, PR ps info, and vmcoreinfo + * MAX_NUM_ENTRIES Program headers, + */ + elfh_size =3D sizeof(*ehdr); + elfh_size +=3D sizeof(struct elf_prstatus); + elfh_size +=3D sizeof(struct elf_prpsinfo); + elfh_size +=3D sizeof(VMCOREINFO_NOTE_NAME); + elfh_size +=3D ALIGN(vmcoreinfo_size, 4); + elfh_size +=3D (sizeof(*phdr)) * (MAX_NUM_ENTRIES); + + elfh_size =3D ALIGN(elfh_size, 4); + + /* Never freed */ + ehdr =3D kzalloc(elfh_size, GFP_KERNEL); + if (!ehdr) + return -ENOMEM; + + /* Assign Program headers offset, it's right after the elf header. */ + phdr =3D (struct elf_phdr *)(ehdr + 1); + phdr_off =3D sizeof(*ehdr); + + memcpy(ehdr->e_ident, ELFMAG, SELFMAG); + ehdr->e_ident[EI_CLASS] =3D ELF_CLASS; + ehdr->e_ident[EI_DATA] =3D ELF_DATA; + ehdr->e_ident[EI_VERSION] =3D EV_CURRENT; + ehdr->e_ident[EI_OSABI] =3D ELF_OSABI; + ehdr->e_type =3D ET_CORE; + ehdr->e_machine =3D ELF_ARCH; + ehdr->e_version =3D EV_CURRENT; + ehdr->e_ehsize =3D sizeof(*ehdr); + ehdr->e_phentsize =3D sizeof(*phdr); + + elf_offset =3D elfh_size; + + notes =3D (void *)(((char *)ehdr) + elf_offset); + + /* we have a single program header now */ + ehdr->e_phnum =3D 1; + + /* Length of the note is made of : + * 3 elf notes structs (prstatus, prpsinfo, vmcoreinfo) + * 3 notes names (2 core strings, 1 vmcoreinfo name) + * sizeof each note + */ + note_len =3D (3 * sizeof(struct elf_note) + + 2 * ALIGN(sizeof(CORE_STR), 4) + + VMCOREINFO_NOTE_NAME_BYTES + + ALIGN(sizeof(struct elf_prstatus), 4) + + ALIGN(sizeof(struct elf_prpsinfo), 4) + + ALIGN(vmcoreinfo_size, 4)); + + phdr->p_type =3D PT_NOTE; + phdr->p_offset =3D elf_offset; + phdr->p_filesz =3D note_len; + + /* advance elf offset */ + elf_offset +=3D note_len; + + strscpy(prpsinfo.pr_psargs, saved_command_line, + sizeof(prpsinfo.pr_psargs)); + + append_kcore_note(notes, &i, CORE_STR, NT_PRSTATUS, &prstatus, + sizeof(prstatus)); + append_kcore_note(notes, &i, CORE_STR, NT_PRPSINFO, &prpsinfo, + sizeof(prpsinfo)); + append_kcore_note_nodesc(notes, &i, VMCOREINFO_NOTE_NAME, 0, + ALIGN(vmcoreinfo_size, 4)); + + ehdr->e_phoff =3D phdr_off; + + /* This is the first kmemdump region, the ELF header */ + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_ELF, ehdr, + elfh_size + note_len - ALIGN(vmcoreinfo_size, 4)); + + /* + * The second region is the vmcoreinfo, which goes right after. + * It's being registered through vmcoreinfo. + */ + + return 0; +} + --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03CF931A554 for ; Fri, 12 Sep 2025 15:10:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689816; cv=none; b=tBf30CmeHLpVKA2Df20YpE74t0PpshZUWMSqTe8qClOcv/QuP3B1WK30uvO+/tJOtPlyS4XzvvtSEY6ZZr53vvLMYxPo1Hb0HLl1g6vhrL/A8N5lWP3sGXN6mWIU/0D8eaL3djtKRSBmdIoDU6eBWYUgiKEG2JsLwre8DuiVQ2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689816; c=relaxed/simple; bh=GVNCGH9tQf5YYe+DYh6Siqxk4Q3JqHAijX/d/+i2q6s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WIkxpC60j6QC5ZQ+3xXfZR1dtCmky3TltAFxi/ixQD8PfOkIRpFbceVecplclC/k8ZZd+xVHYh9TyCtsnwCaJQgekz/vsz4pIKrXvjqIn1zLAsm00Xlt4y3XkI9M/awmu4p9xWMFP0Qv1Ic0/Hu0ZTKlhMm3/iapXLLfP2nJVfs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=VRvJd4NC; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="VRvJd4NC" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-71d603b60cbso18634667b3.1 for ; Fri, 12 Sep 2025 08:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689814; x=1758294614; darn=vger.kernel.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=MYpcsE3JJVoPh3yiGg+2u2fE9IOmYvM0Rb6jQc+GT84=; b=VRvJd4NC+YHhBbcWu/+E+2UN/RPZLIywCS7nFWk4cNrh7/aNzQOyqE0XVbnOT7m6oz 4p1lgLalhIWQ8Ysj5/pKJKxsK8js/C8JQmUDxU6ZC7jRp09BAI6OisRvZxPiEfBOa8II DbOz2+CJFrIZQKYrHYByVmF4eKfvnR8sPz3nkwfV6Fppvh7xObmTh2/oZzrt7LqimY7N RLMUmJ6BRL8fiBRxXTAxIsIgN4c91NAY0K8Ah9P9wdHs3j6Uy2n1CAzJvfV+7fIiSUEM RwRc/0FluPslIgBW27+O2M1w3JQwtTtm/jBsvU5ELMqIeFFLreoIakdXDnNuObQCATvb u7NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689814; x=1758294614; 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=MYpcsE3JJVoPh3yiGg+2u2fE9IOmYvM0Rb6jQc+GT84=; b=XXYFHDGv6tsOEulE8CYTWamZYCjhpcWv8nQ6aiEMq9xiifZrPgC594vU0sxy/FiNiQ cMsf4gK58IlpeFHMIJmlDRhmDShJGgE/d4+E/WUgUFOmvuazNjuCtTpjUesozdRLIUv5 HkwkVL/NKvOm+ZX0HcFY8oFVnu6FkuIBmYms21JjqVvNzzkpjUo4Msk1KZ7evb4WGuLT RIucVr8EMVLCXoCse1U1Q/54Pohfrihe6B07OerbBasFchyU4aA0sumS6/LqVxMmjOKj F2iWCD6R1EgDojG/RojBYQ9hKwjguIZJoGH0Kx9TUtaY2ob+qFA7L6JnNUjh3HqCLHYY 6PDA== X-Forwarded-Encrypted: i=1; AJvYcCXWb1NP0NOSkhLgiUX+5t817mG3OjKrFQm65HIutfmtucWzCjHXGCBuZaG6MHCW0u7T42TtEZNWDBwymAc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9g1q9FTQ4M9kQzAFVP1I2K79Bh9pKaHFUn6+pR54XznbVwojm m4Vqd1kP/0t5AnHc0WY/mMnWLAlDxB7gbAFobgPjbZ7E/zlzoCgY/wXihs8/LDgsb/U= X-Gm-Gg: ASbGnctVonz8Q4j6lOpkoJftCVSFQj1YkDKEkl1U+dkDmVoDVseqmWwVLwF6uDlbZ9/ VM+2AYdVUYy8BtHWRSHOwEV1LqI3S/ivgHSIr0Rs78wJ1p7nR8IyRbkKO+CK9STZ/osKyZXeqIN gTE7whKQHV/iHHs1/YiYWQKXuVn3JUABAB3KBS0MCKFSz89jFF+jvrfqSjY31TCitXYZLquXiI8 eOHf/2dZfjG6QZ03SLPiOq9IaNSx4dUNZnTDUkb32RNYtx2OlGyNO2yDfFPxOqAO3Iol26Y/sP1 onelZ74OIDVZtuqNWe7bWKtxoz7Vu+k1wbdfdcGPYbOa02h04Ics1yk4RSVrS7fTZoBXGffG5T8 xI85hNpwNGhkeQnETPclKGxgHYl/xRKcmXhUgKs4NOheZ X-Google-Smtp-Source: AGHT+IE2B/J5wRLXOu5lnuN+Axv8riYyigPru1eeeYCbQIMixSd8q/6Ui1Mo233PH+t3U62U0f7UQg== X-Received: by 2002:a05:690c:10c:b0:71f:c7ae:fb73 with SMTP id 00721157ae682-730659befadmr31464037b3.42.1757689810056; Fri, 12 Sep 2025 08:10:10 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:09 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 04/16] Documentation: kmemdump: Add section for coreimage ELF Date: Fri, 12 Sep 2025 18:08:43 +0300 Message-ID: <20250912150855.2901211-5-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add section describing the utility of coreimage ELF generation for kmemdump. Signed-off-by: Eugen Hristev --- Documentation/dev-tools/kmemdump.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/dev-tools/kmemdump.rst b/Documentation/dev-tools= /kmemdump.rst index 504321de951a..5616843e0407 100644 --- a/Documentation/dev-tools/kmemdump.rst +++ b/Documentation/dev-tools/kmemdump.rst @@ -27,6 +27,14 @@ are limited. Although the kernel has multiple debugging mechanisms, kmemdump fits a particular model which is not covered by the others. =20 +kmemdump can also prepare specific regions of the kernel that can be +put together to form a minimal core image file. To achieve this, the first +region is an ELF header with program headers for each region, and another +region contains specific ELF NOTE section with vmcoreinfo. +There are also multiple regions registered with basic kernel information +that will allow debugging tools like 'crash' to load the image. +To enable this feature, use CONFIG_KMEMDUMP_COREIMAGE. + kmemdump Internals =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E429A31AF1B for ; Fri, 12 Sep 2025 15:10:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689818; cv=none; b=twpZa2y5JWknbYawqkrf70ev5ERsD16weKQlksbtLcVAv0BAQQBiHUfK37zkzNvxS9Y40xZMnEKceGsk3K4hINRqMnBubgsg9tnCPlhPWSStccF5X2eY4H5ipZpPEvF7R0tTcZR0XZXUG+st8SPaeOwuy0FHm6PruEtyff2V1Ew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689818; c=relaxed/simple; bh=UuHbFeGDi3ya4Y1827EkloRKbNopIVD89d4PRR3A4tw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YR89r/KNssQVq/K8clHXdxeShN5DF2x5mDUKBH3+QBl6S4lqJNOAr8WlLGqzp8agAVGwedJjc0WVNUWkDXSh5bk78aEExLqKMrIMZ3uHONV4Q9Ho6b7pDUb7wVVvoNt+R488CagpOo4U5Kr8nMEOWJkvjtxshAWwKD0Q2hWmG90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=jBAcm+Pd; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="jBAcm+Pd" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-71d60157747so14572977b3.0 for ; Fri, 12 Sep 2025 08:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689816; x=1758294616; darn=vger.kernel.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=PYcAOyUQwZgCVnm8L3SgUsalr9j/YAFyY5/IbjQaIJs=; b=jBAcm+PddBb8sMhrZ7dAuPKs4de9nquuujJRewZUZU/6mED43rKbRAaQMk3SwDlKJg u3n14KmEoOUJtbbOWAnexNdmV/pjdk2xBoeoYYZrRpsWdy6avezovqoNwMb6P4Rbpqkd wo+EbSJVEnvUGUFaY8C4soguYtGMuwhmy/wI/WjCTx4sgfKS5M0r+N/IScUh9mwVQ4lc d0fj847sKqSwLrBQinCWG529JX2usHBINq66OhvFfCXLf3DFJ8Qq3xaJXVx1mQM+bdZ+ Pw4TsAF0Hq1ZNIR1cckL6kL/ExXc3Ufiv7rsFgz+rniq9JnfEQBhYKzSFCm7JJV0/JNh Q8KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689816; x=1758294616; 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=PYcAOyUQwZgCVnm8L3SgUsalr9j/YAFyY5/IbjQaIJs=; b=QzrijyR8TKwqW4wAOal878H3iF8q3hDzipjXT0NDHLRsnnf2dZ/YeTqrnRHfBGOHEa arJeO01fdeLFdmJ/i+eDtwMAZRLpCvurwe2Oi6We8w7ZsBhJXZyfKUnjsOLfn98u6SNS 11xGIhVljJETpweDtG9AIrSedWGEEsRHV/67pBuZrZfdjPqvO4GQmwr7qbFASTT4LOW4 jJoOH7Q7c0eoFBBN1ZMB89fr5OLkh+9P00ENHkKKrFw3aBSaKMKxPeCX5xCEOaL8JKjR 1eusUhP7AapboMFuoCJQC0ygcLJBrGi5byXnKGYFdiSG8bvcOQ8XaLhxxehjpw3OkkRv Bjaw== X-Forwarded-Encrypted: i=1; AJvYcCUQmc2IDmsdg8k0NvmEN9prqj7s/SkslbI/xPSLYKZcPv9dOx2eXy+Bwmia/kKvDWoP6qf49ZZnjEbM+7k=@vger.kernel.org X-Gm-Message-State: AOJu0YwEFuhej5AD8ImjH5QtMhK0ce1fCpGHp++30LGfc4+8MfMaKpez QiCTvvcNuSuCMWdOUmgRX659nCG4HSK4c2Wv2zDKRnKlr0EHt7SCYGGb/g/3WLBQRoQ= X-Gm-Gg: ASbGncv+9RsQh/o0BbTrTD33/m7cxXdvcmor2nZpojIekW6CVfGpfqgDeNFxZFs92T8 QJWbwoeu/UUVvlDRH/b5sua/tIEJDad1FIn+YXwcWdm1C7l/f6A7kWlBdlc2nu56ER1mE8GVslt J/Re38SkenWzc9Ewnmp6P6wWH4tzQd9FSVVqNizG5bZcrNl8u364qfO0DI3rw71++0AAUGv0i8j f6q5ZHUKHQycwkXiO3nknQTF0RKaCY4Bpmd5lScpIN4PTyEASoGFNpYnye8yZ5h4F11gVEG03mH IR35heCS682Dj42NgjeN0H09cjyjs97wItWWdpnrvOzZPvQOH7HGnrvtFu1HwHuvyCIRu4D7hY4 YxVsur3y3C45sCGXkuDUY4cvRjAoBoCveKSxlqIhj56NL X-Google-Smtp-Source: AGHT+IHdun55kCQevX+5NMIZ7KQNmYxmG9E8Uto+0Ih94+Wvd6F4Zhy4kkyG4jBHuGQaEGCxBRlhMQ== X-Received: by 2002:a05:690c:4d8a:b0:723:8943:d6d3 with SMTP id 00721157ae682-73062ab4292mr27250037b3.6.1757689815690; Fri, 12 Sep 2025 08:10:15 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:15 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 05/16] kernel/vmcore_info: Register dynamic information into Kmemdump Date: Fri, 12 Sep 2025 18:08:44 +0300 Message-ID: <20250912150855.2901211-6-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Register vmcoreinfo information into kmemdump. Because the size of the info is computed after all entries are being added, there is no point in registering the whole page, rather, call the kmemdump registration once everything is in place with the right size. A second reason is that the vmcoreinfo is added as a region inside the ELF coreimage note, there is no point in having blank space at the end. Signed-off-by: Eugen Hristev --- kernel/vmcore_info.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/vmcore_info.c b/kernel/vmcore_info.c index e066d31d08f8..3e2e846ba9c8 100644 --- a/kernel/vmcore_info.c +++ b/kernel/vmcore_info.c @@ -14,6 +14,7 @@ #include #include #include +#include =20 #include #include @@ -118,6 +119,12 @@ phys_addr_t __weak paddr_vmcoreinfo_note(void) } EXPORT_SYMBOL(paddr_vmcoreinfo_note); =20 +static void vmcoreinfo_kmemdump(void) +{ + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_VMCOREINFO, + (void *)vmcoreinfo_data, vmcoreinfo_size); +} + static int __init crash_save_vmcoreinfo_init(void) { vmcoreinfo_data =3D (unsigned char *)get_zeroed_page(GFP_KERNEL); @@ -227,6 +234,7 @@ static int __init crash_save_vmcoreinfo_init(void) arch_crash_save_vmcoreinfo(); update_vmcoreinfo_note(); =20 + vmcoreinfo_kmemdump(); return 0; } =20 --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B879C310774 for ; Fri, 12 Sep 2025 15:10:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689825; cv=none; b=eh+pWmTjXwjukLvRjVhjN1Ep3al8GuxqaffA5d6JGafq057QeLZQ6S6rzH0siqz9Hu9sQFizb4A0aemOIG1HxglKxRCu7GsYdlD5A7QjqjJeUb8m2260vK2qco8OqjbsXvlMUy1EHm5OmBRluLwNaFWt8OVkTv+3r5Q4wdZUHj4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689825; c=relaxed/simple; bh=/usbRG/zhuVo2onQ1eYRDQP8zMO0U8orZCA2d2tBubg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EQkCxGmr8nr2F9mWCd+6YZXUnlqyXzseAU+DRXb8ooNHzF5tkBmiCpUhlWuXOQfWn3Bozj1HZZuDyhORgf9D4oiIK4xgew4uPBRBf42FDBAdQJxYMSXxyJYOd5nxxWUr37CySsGobFBiwO25kk1TjN/Ox7TTpSq/p/LblDIjxR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=hZtX4yKU; arc=none smtp.client-ip=209.85.128.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="hZtX4yKU" Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-71d6083cc69so19027177b3.2 for ; Fri, 12 Sep 2025 08:10:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689822; x=1758294622; darn=vger.kernel.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=SUEgobPFH+EGZPcli+Ra4q+x5D03Vw2x1oq0a5Xuvco=; b=hZtX4yKUixslg3orPC7dgg6QzgcZFnPP1c4XtPzua1ewuUUrE6D/+Sdy3sBERLkvBn qW0GUv5LdFADNFyDQkC3/hfuTZev2ayrWaSdC5yE+RdF1H4lpbWt7JJ49m6rEg0SjfXU Hn49Lyzf0VxIBmb13sGlXbaxQJVmDRC4fjWG5cLmw0MpAvAruAuxhvM3Uuu3Ttxj6RS0 VuI8qIv27/54LSrmCnrGEbA/k96aqimDrNmpqX44P6NoaK8DTgWKahQ+pFwX/5eree6F Ql96e8q8Xlr72lIhvVPkkIBoSdQX6C1IJyXy4UQ/Vym8TFS5tlfjLqBuzwLf6nFyD7bg d7Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689822; x=1758294622; 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=SUEgobPFH+EGZPcli+Ra4q+x5D03Vw2x1oq0a5Xuvco=; b=mDoQer+TMVOvb35cUk9XwHMXhSFYYj0b+4eDgWCb2Jpnsq/Uuh+tLDCm92d/1f2mQt iJPUJYHxD0o7diORCjOG7s86DRr4en3vsvNWBDH5CKccYOFMIRM55DzmENZFtbog3vas 0+yEDvKcSsY/Q4tuZaF4fgKcA0zI2IK/9r8Qf8U7ZsS0tUyAH9lV9GCtmkcQQBZ/pEBC Zdy2HSr1gWgo0z8iAp7vACyVs2Fy2BZkx+uMEgRGRzvD4TqYldENm3MX59gHOFQDLjFl sYFo1UXbuyAMS0mH8L9SSSPGcysTTQfZHOc3q9ziAgsVK8IP08Aq2eKg+qazfdXvBXxC 3iYw== X-Forwarded-Encrypted: i=1; AJvYcCUJ0HR41oPty/oPC9O/a5AtsH09IPBpttRCGXk0MSrc1SU/4nNeK+I1wjLjTDR5eqPFzHsDxhztsinZAjA=@vger.kernel.org X-Gm-Message-State: AOJu0YypYl7rP2aALersVbm03T/iA7tTl8GnennVsO0xGysWBOnca9bG nG13ASOCkGH0BjQU15JbMoTo+4U3XIYSCICOO3HLKi+sCFlr+WzGoX5WmFDqNJo9xOM= X-Gm-Gg: ASbGncsD9yDrj1cjCi5NI2tC6jtelWHcBxHpPcbFKCRYssVkjOu1q8r32ZRQa0mfgPW 0LpgGSXL2TO42kayd8E3RiLZevrzM5gjEE/Gs+LvBee4fRqhy9OD4x05VM7iSxQ5ZNmrWasGh/4 gfShGIO27h8FW9xzYq3nFNhWv/C7xT2whcWrwIU7lfs3iA1utobwJuJWUo+WJs/b5x71LuNeGxb p94cFWheoXXMAPKWEMIMgQX5VfkzMSvc8mVeSusQn2PZSlPR8l2zFoSG9J1NEG+PUoPLNgnBbVc d135OXKvarzzprqKkluGDLg1l6+ysxDaPR2frGpKCLDBW0ywzkHzD3aJy+4UVlEG0Vf730MSMbq kojhFyc52Ql/JlBmyQASaDdVhgLbjOH+0cEO/ze9EoMwl X-Google-Smtp-Source: AGHT+IFfoHeq2qxhWL+Mgo2uL4H24h0IQUACTuuF5mx/FkiDr6oqL6RZMT2GVhdQdeu/Vgit1i7NzQ== X-Received: by 2002:a05:690c:94:b0:71f:e154:7aa2 with SMTP id 00721157ae682-73064c04bdemr29570617b3.25.1757689821531; Fri, 12 Sep 2025 08:10:21 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:21 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 06/16] kmemdump: Introduce qcom-minidump backend driver Date: Fri, 12 Sep 2025 18:08:45 +0300 Message-ID: <20250912150855.2901211-7-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Qualcomm Minidump is a backend driver for kmemdump. Regions are being registered into the shared memory on Qualcomm platforms and into the table of contents. Further, the firmware can read the table of contents and dump the memory accordingly. Signed-off-by: Eugen Hristev --- MAINTAINERS | 5 + mm/kmemdump/Kconfig.debug | 12 ++ mm/kmemdump/Makefile | 1 + mm/kmemdump/qcom_minidump.c | 353 ++++++++++++++++++++++++++++++++++++ 4 files changed, 371 insertions(+) create mode 100644 mm/kmemdump/qcom_minidump.c diff --git a/MAINTAINERS b/MAINTAINERS index fc8cd34cf190..8234acb24cbc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13818,6 +13818,11 @@ F: include/linux/kmemdump.h F: mm/kmemdump/kmemdump.c F: mm/kmemdump/kmemdump_coreimage.c =20 +KMEMDUMP QCOM MINIDUMP BACKEND DRIVER +M: Eugen Hristev +S: Maintained +F: mm/kmemdump/qcom_minidump.c + KMEMLEAK M: Catalin Marinas S: Maintained diff --git a/mm/kmemdump/Kconfig.debug b/mm/kmemdump/Kconfig.debug index f62bde50a81b..91cec45bc3ca 100644 --- a/mm/kmemdump/Kconfig.debug +++ b/mm/kmemdump/Kconfig.debug @@ -26,3 +26,15 @@ config KMEMDUMP_COREIMAGE for debug tools are being registered. The coredump file can then be loaded into GDB or crash tool and further inspected. + +config KMEMDUMP_QCOM_MINIDUMP_BACKEND + tristate "Qualcomm Minidump kmemdump backend driver" + depends on ARCH_QCOM || COMPILE_TEST + depends on KMEMDUMP + help + Say y here to enable the Qualcomm Minidump kmemdump backend + driver. + With this backend, the registered regions are being linked + into the minidump table of contents. Further on, the firmware + will be able to read the table of contents and extract the + memory regions on case-by-case basis. diff --git a/mm/kmemdump/Makefile b/mm/kmemdump/Makefile index eed67f15a8d0..6ec3871203ef 100644 --- a/mm/kmemdump/Makefile +++ b/mm/kmemdump/Makefile @@ -2,3 +2,4 @@ =20 obj-y +=3D kmemdump.o obj-$(CONFIG_KMEMDUMP_COREIMAGE) +=3D kmemdump_coreimage.o +obj-$(CONFIG_KMEMDUMP_QCOM_MINIDUMP_BACKEND) +=3D qcom_minidump.o diff --git a/mm/kmemdump/qcom_minidump.c b/mm/kmemdump/qcom_minidump.c new file mode 100644 index 000000000000..604a58240c20 --- /dev/null +++ b/mm/kmemdump/qcom_minidump.c @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Qualcomm Minidump backend driver for Kmemdump + * Copyright (C) 2016,2024-2025 Linaro Ltd + * Copyright (C) 2015 Sony Mobile Communications Inc + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * In some of the Old Qualcomm devices, boot firmware statically allocates= 300 + * as total number of supported region (including all co-processors) in + * minidump table out of which linux was using 201. In future, this limita= tion + * from boot firmware might get removed by allocating the region dynamical= ly. + * So, keep it compatible with older devices, we can keep the current limi= t for + * Linux to 201. + */ +#define MAX_NUM_REGIONS 201 + +#define MAX_NUM_SUBSYSTEMS 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_SS_ENCR_NOTREQ (0 << 24 | 0 << 16 | 'N' << 8 | 'R' << 0) + +#define MINIDUMP_SUBSYSTEM_APSS 0 + +const char *kmemdump_id_to_md_string[] =3D { + "", + "ELF", + "vmcoreinfo", + "config", + "memsect", + "totalram", + "cpu_possible", + "cpu_present", + "cpu_online", + "cpu_active", + "jiffies", + "linux_banner", + "nr_threads", + "nr_irqs", + "tainted_mask", + "taint_flags", + "mem_section", + "node_data", + "node_states", + "__per_cpu_offset", + "nr_swapfiles", + "init_uts_ns", + "printk_rb_static", + "printk_rb_dynamic", + "prb", + "prb_descs", + "prb_infos", + "prb_data", + "runqueues", + "high_memory", + "init_mm", + "init_mm_pgd", +}; + +/** + * 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 + * @revision : Minidump revision + * @enabled : Minidump enable status + * @subsystems : Array of subsystems toc + */ +struct minidump_global_toc { + __le32 status; + __le32 revision; + __le32 enabled; + struct minidump_subsystem subsystems[MAX_NUM_SUBSYSTEMS]; +}; + +#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. + * @id: Region id. + */ +struct qcom_minidump_region { + char name[MINIDUMP_MAX_NAME_LENGTH]; + void *virt_addr; + phys_addr_t phys_addr; + size_t size; + unsigned int id; +}; + +/** + * struct minidump - Minidump driver data information + * + * @dev: Minidump device struct. + * @toc: Minidump table of contents subsystem. + * @regions: Minidump regions array. + * @md_be: Minidump backend. + */ +struct minidump { + struct device *dev; + struct minidump_subsystem *toc; + struct minidump_region *regions; + struct kmemdump_backend md_be; +}; + +static struct minidump *md; + +#define be_to_minidump(be) container_of(be, struct minidump, md_be) + +/** + * qcom_apss_md_table_init() - Initialize the minidump table + * @md: minidump data + * @mdss_toc: minidump subsystem table of contents + * + * Return: On success, it returns 0 and negative error value on failure. + */ +static int qcom_apss_md_table_init(struct minidump *md, + struct minidump_subsystem *mdss_toc) +{ + md->toc =3D mdss_toc; + md->regions =3D devm_kcalloc(md->dev, MAX_NUM_REGIONS, + sizeof(*md->regions), GFP_KERNEL); + if (!md->regions) + return -ENOMEM; + + md->toc->regions_baseptr =3D cpu_to_le64(virt_to_phys(md->regions)); + md->toc->enabled =3D cpu_to_le32(MINIDUMP_SS_ENABLED); + md->toc->status =3D cpu_to_le32(1); + md->toc->region_count =3D cpu_to_le32(0); + + /* Tell bootloader not to encrypt the regions of this subsystem */ + md->toc->encryption_status =3D cpu_to_le32(MINIDUMP_SS_ENCR_DONE); + md->toc->encryption_required =3D cpu_to_le32(MINIDUMP_SS_ENCR_NOTREQ); + + return 0; +} + +/** + * qcom_md_get_region_index() - Lookup minidump region by kmemdump id + * @md: minidump data + * @id: minidump region id + * + * Return: On success, it returns the internal region index, on failure, + * returns negative error value + */ +static int qcom_md_get_region_index(struct minidump *md, int id) +{ + unsigned int count =3D le32_to_cpu(md->toc->region_count); + unsigned int i; + + for (i =3D 0; i < count; i++) + if (md->regions[i].seq_num =3D=3D id) + return i; + + return -ENOENT; +} + +/** + * register_md_region() - Register a new minidump region + * @be: kmemdump backend, this should be the minidump backend + * @id: unique id to identify the region + * @vaddr: virtual memory address of the region start + * @size: size of the region + * + * Return: On success, it returns 0 and negative error value on failure. + */ +static int register_md_region(const struct kmemdump_backend *be, + enum kmemdump_uid id, void *vaddr, size_t size) +{ + struct minidump *md =3D be_to_minidump(be); + struct minidump_region *mdr; + unsigned int num_region, region_cnt; + const char *name =3D "unknown"; + + if (!vaddr || !size) + return -EINVAL; + + if (id < ARRAY_SIZE(kmemdump_id_to_md_string)) + name =3D kmemdump_id_to_md_string[id]; + + if (qcom_md_get_region_index(md, id) >=3D 0) { + dev_dbg(md->dev, "%s:%d region is already registered\n", + name, id); + return -EEXIST; + } + + /* Check if there is a room for a new entry */ + num_region =3D le32_to_cpu(md->toc->region_count); + if (num_region >=3D MAX_NUM_REGIONS) { + dev_err(md->dev, "maximum region limit %u reached\n", + num_region); + return -ENOSPC; + } + + region_cnt =3D le32_to_cpu(md->toc->region_count); + mdr =3D &md->regions[region_cnt]; + scnprintf(mdr->name, MAX_REGION_NAME_LENGTH, "K%.8s", name); + mdr->seq_num =3D id; + mdr->address =3D cpu_to_le64(__pa(vaddr)); + mdr->size =3D cpu_to_le64(ALIGN(size, 4)); + mdr->valid =3D cpu_to_le32(MINIDUMP_REGION_VALID); + region_cnt++; + md->toc->region_count =3D cpu_to_le32(region_cnt); + + return 0; +} + +/** + * unregister_md_region() - Unregister a previously registered minidump re= gion + * @be: pointer to backend + * @id: unique id to identify the region + * + * Return: On success, it returns 0 and negative error value on failure. + */ +static int unregister_md_region(const struct kmemdump_backend *be, + unsigned int id) +{ + struct minidump *md =3D be_to_minidump(be); + struct minidump_region *mdr; + unsigned int region_cnt; + unsigned int idx; + + idx =3D qcom_md_get_region_index(md, id); + if (idx < 0) { + dev_err(md->dev, "%d region is not present\n", id); + return idx; + } + + mdr =3D &md->regions[0]; + region_cnt =3D le32_to_cpu(md->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--; + md->toc->region_count =3D cpu_to_le32(region_cnt); + + return 0; +} + +static int qcom_md_probe(struct platform_device *pdev) +{ + struct minidump_global_toc *mdgtoc; + size_t size; + int ret; + + md =3D kzalloc(sizeof(*md), GFP_KERNEL); + if (!md) + return -ENOMEM; + + md->dev =3D &pdev->dev; + + strscpy(md->md_be.name, "qcom_minidump"); + md->md_be.register_region =3D register_md_region; + md->md_be.unregister_region =3D unregister_md_region; + + mdgtoc =3D qcom_smem_get(QCOM_SMEM_HOST_ANY, SBL_MINIDUMP_SMEM_ID, &size); + if (IS_ERR(mdgtoc)) { + ret =3D PTR_ERR(mdgtoc); + dev_err(md->dev, "Couldn't find minidump smem item %d\n", ret); + goto qcom_md_probe_fail; + } + + if (size < sizeof(*mdgtoc) || !mdgtoc->status) { + dev_err(md->dev, "minidump table is not initialized\n"); + ret =3D -ENAVAIL; + goto qcom_md_probe_fail; + } + + ret =3D qcom_apss_md_table_init(md, &mdgtoc->subsystems[MINIDUMP_SUBSYSTE= M_APSS]); + if (ret) + goto qcom_md_probe_fail; + + return kmemdump_register_backend(&md->md_be); + +qcom_md_probe_fail: + kfree(md); + return ret; +} + +static void qcom_md_remove(struct platform_device *pdev) +{ + kfree(md); + kmemdump_unregister_backend(&md->md_be); +} + +static struct platform_driver qcom_md_driver =3D { + .probe =3D qcom_md_probe, + .remove =3D qcom_md_remove, + .driver =3D { + .name =3D "qcom-minidump", + }, +}; + +module_platform_driver(qcom_md_driver); + +MODULE_AUTHOR("Eugen Hristev "); +MODULE_AUTHOR("Mukesh Ojha "); +MODULE_DESCRIPTION("Qualcomm kmemdump minidump backend driver"); +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 155AA32038E for ; Fri, 12 Sep 2025 15:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689830; cv=none; b=kC6yzxVnTXCaBs3gi1Htb4lTaEB8QfzcgI2OFHFZYA6f/0e0z6+li8WkMtd1T2UVyqSsniML1HadJnyImcrvYZyOuJkDZD+gBkL8GwSyAfAOUL9jRuQGKkxQ+OKI6bJ3XrvxXbn8O9U6dScu2V/js08HMkj62XJCWIEUfG/P8Fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689830; c=relaxed/simple; bh=UKnrnaITdDqPZ68aThZkj5EHl6fWFAOsgR33B94Eji4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZwLs89RNBq/PqWGwfi2wfH23Mf0V8GZkB1pLJR4lEPWZODvGuA21ArrxgchOIV8d7kV9AbaEO6mpyDTpoLv93ouLW1dSCq8/in8etjLWbvdN+fqRCDECU69Jd29x7tCUS7glBnKL65JGJzUdrLovauHhZNq+HLw4kTZxnnPkgLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=p6l0e4hO; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="p6l0e4hO" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-72267c05111so15218027b3.2 for ; Fri, 12 Sep 2025 08:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689827; x=1758294627; darn=vger.kernel.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=/4llYgtc09L9A5EYyW7VZ9K8LmFJt/10Sl5wTfADcVo=; b=p6l0e4hOTJp1G8KL22RFNd3021RY+ntedu0Lzqm9lcXYV8vd/Rq9UchDOZNDdUtqWs /vZHnWD0519FCS5psjAV9EUBs6a2Zf8/20nZ7lOMj99SY+Hak+yZ5A6d64MHXcrx3UMI Sz4J0ddstSHH7cJNbtWh7mdbAF+9Il4tvtnN/PgmQBp6iSyxb350GVPeifG3v4Mh8R3/ dZJxvOz+fboFSQt6+cDTTyMym7CYVjItnXAhl9JAJY/yggXqvbU5yyemW6KwTO1PE9jM SkNd4AgCifUcd4tiair+kbtxku52cT1X7GYGj+txrDWb056Vd+eGxWEGsnXjBJ1qa7/X s/ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689827; x=1758294627; 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=/4llYgtc09L9A5EYyW7VZ9K8LmFJt/10Sl5wTfADcVo=; b=g33bb4xZiVCKWDATpIEeGK2uXEMnxrqP7sRa/4yyscC+2eAS/QS2h81chV+8JWipFq Oim3gc/+NDBl8H9PetFeDr4O8vCBvFPTUcXqZPGV/7KZbo/9EI35KPzBSpyAc6wzkK/I uzDAn+1KeOLoDRKDRuTKIhydCSfYnyxBDxzMuMYAK3w6fPh2HaRmCtmB0oskO2Wq1YJM LPE9ah+WUnMSz+sytM2sUREGhY2y7eSf34SP3b5L2gvpF1OE+olggBlhvcOa6vgFx9Dr mqlUcuuflS+OFLHy8jdMqKMujYOz3LPWIrTs0xIPNbtVTPHZ7vv8aTGDc66ymNYkx9Hm Q6FA== X-Forwarded-Encrypted: i=1; AJvYcCVOcBh5gC10BHuT1l/uQZmCTaKdX9SHTMZViZG/yNPVzmeIypncehpwS19E8/xJs3t1TBA3SqGvKl7HArA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6v8jsPEvc11UIYXGOTvU1W0axK1m07EGb5YTUfr6cEcYXv9Mu prC+JFNoxQcNGWoAWEPbwAuIgUxFay91DVUpNe82H7GIXN7aJeE28arufT8NYRJYeXA= X-Gm-Gg: ASbGncsreWJ0cMpJGwNJd+IO1sJhjO2+uUp8bD621mfvD91fKr8FTTAlYvDF5UwgkUx 8gNNui//rA7+39umaneot/oPukz5Zrs5UKVKIO0WhR26LjDIcEGSpnVddY+INg598ss+YO/4/q6 l4uzvd6LfzuAESQ8/rpkpTikxyXH9dl2EL3Pf92V327cBNrL/dhncN58A0E5WNX/uWuqr+dTE/H kxKSTsuf+lpvoggNRqkCx2Z6BDiH0YaNuVpkV7RYxV5pK2dviim3WAj85Nv6X3LdT6G+EJ8RRBE l3MJ2dajTS0r3u0WNYSd7WSzX6gLouq0CW4m+5pT9xDGXx0o9it0wSXMrt4XxK6hB5Juzg9l54n T5j2qWZBj73KQ2WtR+qEagg77QeCXuI5s8g== X-Google-Smtp-Source: AGHT+IELEo3IIrw2/QnWmoSL7oBay1esdy/6RcSnsiIQj9jdk3byMst9Z0k97wU9qaWUWBvFOqWfkQ== X-Received: by 2002:a05:690c:6406:b0:727:c325:c5dc with SMTP id 00721157ae682-73064a12b20mr30549157b3.29.1757689826814; Fri, 12 Sep 2025 08:10:26 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:26 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 07/16] soc: qcom: smem: Add minidump device Date: Fri, 12 Sep 2025 18:08:46 +0300 Message-ID: <20250912150855.2901211-8-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a minidump platform device. Minidump can collect various memory snippets using dedicated firmware. To know which snippets to collect, each snippet must be registered by the kernel into a specific shared memory table which is controlled by the qcom smem driver. To instantiate the minidump platform driver, register its data using platform_device_register_data. Later on, the minidump driver will probe and register itself into kmemdump as a backend. 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 c4c45f15dca4..03315722d71a 100644 --- a/drivers/soc/qcom/smem.c +++ b/drivers/soc/qcom/smem.c @@ -270,6 +270,7 @@ struct smem_region { * @partitions: list of partitions of current processor/host * @item_count: max accepted item number * @socinfo: platform device pointer + * @mdinfo: minidump device pointer * @num_regions: number of @regions * @regions: list of the memory regions defining the shared memory */ @@ -280,6 +281,7 @@ struct qcom_smem { =20 u32 item_count; struct platform_device *socinfo; + struct platform_device *mdinfo; struct smem_ptable *ptable; struct smem_partition global_partition; struct smem_partition partitions[SMEM_HOST_COUNT]; @@ -1236,12 +1238,20 @@ static int qcom_smem_probe(struct platform_device *= pdev) if (IS_ERR(smem->socinfo)) dev_dbg(&pdev->dev, "failed to register socinfo device\n"); =20 + smem->mdinfo =3D platform_device_register_data(&pdev->dev, "qcom-minidump= ", + PLATFORM_DEVID_AUTO, NULL, + 0); + if (IS_ERR(smem->mdinfo)) + dev_err(&pdev->dev, "failed to register platform md device\n"); + return 0; } =20 static void qcom_smem_remove(struct platform_device *pdev) { platform_device_unregister(__smem->socinfo); + if (!IS_ERR(__smem->mdinfo)) + platform_device_unregister(__smem->mdinfo); =20 hwspin_lock_free(__smem->hwlock); __smem =3D NULL; --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yb1-f171.google.com (mail-yb1-f171.google.com [209.85.219.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1527C320A35 for ; Fri, 12 Sep 2025 15:10:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689834; cv=none; b=cGAsb2YUhHjnPwPGljxUAl9hm9vFFDcjFtTkuZDuO5+xWKsj5sc6WchKzDWx9m4Luvq+NUx8gisuj+SbSYtFNe4Km/AVcQVL0B14DmCz2noadM0x80gN2OgthN3PCoVrQSae04BkIMkWu+sQT/kXyIe4MoqSlG/KGJxgPCAEAZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689834; c=relaxed/simple; bh=k5/I3UYTWdnJjKzBx+/VZfwmc+jXcyZQNgYc3CqZv50=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QAZ6IwvPsokDncRSRa61qsMNVkgVRDjCriq7d8baqnRrdmVQ2n+f91MisDxn7iw+kelHD97f/duaEaJYZGMBCQBFjKa3GsMN1p9AlU6rbnHE5GgurSCYWsRbCu+uPjvR2E9eIdPqZtXKrxwITMaEnX/0nTRnom7a6HUWZWIBktM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=HfMx/0vs; arc=none smtp.client-ip=209.85.219.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HfMx/0vs" Received: by mail-yb1-f171.google.com with SMTP id 3f1490d57ef6-e96c48e7101so1629420276.2 for ; Fri, 12 Sep 2025 08:10:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689832; x=1758294632; darn=vger.kernel.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=b1ubFmujdan3yUawwr3ZvZLjd/mUy6/pR3VRzzGBTTA=; b=HfMx/0vsbroSzJq953+Rkb0H9mHq9RI5B7qrFW1tGLb53uvBDW5BtguQARURlLnza9 5N1YjSdgWvN8f/dqIDzl1GhsgZ0F8EE22Xh/hCTWIlVps2vCGSMMQi9ZdpaIzIsnUArW zIMaep99JpL829ErZkCMFjitM9/RwViNkXpdm1sMdVxotgIDHXYUDKouFDIbRJbBon3t MLEDeUwZwwznfow9A81XcDaK54+jRvzkrpDenbrH5qHPySSk64I/fcUpjvQ+Gq+ylNEH vNZPas2Od5OpRkSw9WWE6YGFp6RhTxZ5FgqeVv8wF+/tc+D+PoYUhx2Rzslb+rCnCqZH 6jTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689832; x=1758294632; 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=b1ubFmujdan3yUawwr3ZvZLjd/mUy6/pR3VRzzGBTTA=; b=RLEI4pu53AE8g4i97MYPIbCtsrmCFT2Q8gkJGLIQR7R15s66xRhty+TYme9eWZjN73 EziIb+DRq/1KihAlJU+2Yuprk3rmW4V+VFkzBnior3qlGTilqIdREjkZN3CNp6nxxw0S c4bSSprcy8CStwJPiZT8MGNDtYeEuphw2NmOEikc1ULWtvNe7mgjpxJXvVwL3J4LdD7e OR/urIkeCi8k1YFH2FV5/ubATpVskzC2MJzEwMSFdwl7yETqij8sn7zdq+7APvs1nyTY Ftc4rr9u7z1AyJB3JHL8ibMhoTnqqLhSvkgReqtA93PU8UNlgi3p91F0qDXGh4gJZ4R7 MvDA== X-Forwarded-Encrypted: i=1; AJvYcCVc6I0bAztvS1sAid4dY26Xf36SEVFFfNvyU8gboFp6sUEyu3wvlHdcNsCeOeIuB2zkEs/7BLtT8uxFa2U=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8E5Gpiqy37zZZhXpBjXtDNCK9DDRifSwMomR+EidBFHaIract 6MC8OHo0gDbvx2E/Zq5Q64jq+to0Gc8iKCMJrf+ybc+fCY5eaPKPqPgDMLYX1lTGYKE= X-Gm-Gg: ASbGncvPi1BfK7b912+3UzckYAD5kGvTuzxL7CiC8h7iVyRWuOCdRPrBuHRbN7RDu9f gtQZH1h3SJJ/cMAkTJ+Tz00KaftVg7xER/4WRtj3HxF9euKocveiqdtf3OozvunIP5CAGLNMQz7 ShTf6G9sixfdbCI4MZBWZp02WJOhfEWGzqhM7das7SRFxMo1V+gWwNsud++pMpATtnKNhal6Q3i UbwzapEcF0J849C+QDfcDGPX05Fh1Z3i1fwxIJSe1vhkl10RWOLdXyxul2RNNYSjPg29YHXVQ+0 YaJD9U1L1mLGZVJ3YDLvfy0UY6ZbwOZzS8MuFS2bJ3sU9NaJ/3UN0fmvZygJq92mcAhoU5VJxcJ 6qSNer55uFDERQ5pE74ZU1w20QgLYBUDrL/exgs8NRix4 X-Google-Smtp-Source: AGHT+IGQPX6y0JKi888sfyXxAah3q3fQIwu7cpMyf9JJWf5Y6/yYrim06D3kAGSOfpN7Gh01tRPdkA== X-Received: by 2002:a05:690c:c08:b0:72a:2d15:a2a2 with SMTP id 00721157ae682-730627c9015mr33553397b3.11.1757689831515; Fri, 12 Sep 2025 08:10:31 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:31 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 08/16] init/version: Add banner_len to save banner length Date: Fri, 12 Sep 2025 18:08:47 +0300 Message-ID: <20250912150855.2901211-9-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add banner_len to store banner length. This is useful to save the banner into dumping mechanisms. Signed-off-by: Eugen Hristev --- include/linux/printk.h | 1 + init/version-timestamp.c | 1 + init/version.c | 1 + 3 files changed, 3 insertions(+) diff --git a/include/linux/printk.h b/include/linux/printk.h index 45c663124c9b..5bc617222948 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -12,6 +12,7 @@ struct console; =20 extern const char linux_banner[]; +extern const int banner_len; extern const char linux_proc_banner[]; =20 extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() i= s in progress */ diff --git a/init/version-timestamp.c b/init/version-timestamp.c index 043cbf80a766..1fdd795be747 100644 --- a/init/version-timestamp.c +++ b/init/version-timestamp.c @@ -28,3 +28,4 @@ struct uts_namespace init_uts_ns =3D { const char linux_banner[] =3D "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; +const int banner_len =3D sizeof(linux_banner); diff --git a/init/version.c b/init/version.c index 94c96f6fbfe6..68d16748b081 100644 --- a/init/version.c +++ b/init/version.c @@ -48,6 +48,7 @@ BUILD_LTO_INFO; =20 struct uts_namespace init_uts_ns __weak; const char linux_banner[] __weak; +const int banner_len __weak; =20 #include "version-timestamp.c" =20 --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56B40321435 for ; Fri, 12 Sep 2025 15:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689840; cv=none; b=E+8s6QLiZHzb3eMUnvjiW+WqwqfJBHPFEJiIxdWyORf8CBURHKS7eJCtY+HnAX3QSTvZeLXkP3hbVzqXDYdYxr5uwhm6YgL1tMFsnz86m2is/wdzu9Qj7zEBOlRvVWI14fPu+I8YJShod1lygA4LgY44FgbO9Acy/J19t16/9wY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689840; c=relaxed/simple; bh=lBamo/mRxiUtCBdbmIZyVniV6pvujs45sCbA4KFEQzE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cEHfKxCvYRnSEDbRETjtmqp776r3vcYQgT6fQ1NMAKpcsdD/hHG4qCxtzhoPeuVOFrMoPVLgjl36bjz9qZx8FwgYR7uW1LK4TyzBXIDifN7fsw87Fdgw3iRkhApCMmZnicLazQcgfQKtAZdkkg+1cB/8kn9aiFvCPM/MXi6oG7k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=fAOMROtg; arc=none smtp.client-ip=209.85.128.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="fAOMROtg" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-71d60504bf8so19144487b3.2 for ; Fri, 12 Sep 2025 08:10:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689836; x=1758294636; darn=vger.kernel.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=+ds8gslyRhEA90VqYYB6jUYRwIuKnqG3r9jdtCHu7D4=; b=fAOMROtg/82tIva9GG3Qq7B1/Xo0+WLG/MAQv4jrJm8l+dpu/m7w88+hJOQUjbEBCE Q/c6F7hcNX4R6eSvQuECiTJ/TwZ5ordlY296OA611EL10F6Q1XB+2shpcmNX1wJysvwv NOh0HeeJrlREnwXJPTUTPDanh1+wbk5RqHQ26uU6u2xA9a2cR+CzZhb7PNYnsb0MizPk vfA0nSyqNet2mhTreKSt6W/pq1aHgIboBGbT4SMlpCiDS1qWyPIW2mSg10P7JSnWUfnN dgEWo/RJpZfZ7WXd2RPHPcUbUJGClDGaXmF6kF1cvaXdV1OhTMqaB58W9YZMg4944Pzp 7LQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689836; x=1758294636; 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=+ds8gslyRhEA90VqYYB6jUYRwIuKnqG3r9jdtCHu7D4=; b=nZHDzWS7n/qZSaW2jJ8WkogMkbdbmMIjrtx1/RDr+bhFt8hPLVVTASVYFrR8CXhF1R N05GpI2Ybz86foIdZgY+qM2Xq/GDQRzw80+O/1iNdkPo85QoHyjJbEhRaAo6wbCOFWYw +hpI7IoiS2APBZRVaVRb5avTehBTW4RrBHptG+a6+1XNUCStiRWCRIltgAoYtYUP8zWQ kLPt5erYcvvQKe1l3+zUOqzyO2z2400bKzo9zTK1zEoKb888VkJCVsc5ONHPgMveWtz+ b9hV7uP2QTMAuwXefYZEqCSY1Xr2B/kX1R5dm+uFgIVGaq5LVLgVw1mFW6+t4PRkCRvG U64g== X-Forwarded-Encrypted: i=1; AJvYcCXBC0RktN6a/GmB1qajZInB9uuXE5E98ydtz6Ru/qoeWYzhJwxSQWXXIk1wKk9bA4xpeQ5pSzLPQA5fsh0=@vger.kernel.org X-Gm-Message-State: AOJu0YzbSmEg/1joqCb7KtNbyKYpOf7bl+q3GP1ZwA2pgPj+TLbZ2Lfu CP5h2MYMB31JH0gQrRNvvEbX5CHOJRyDXS0h9Mvr1Kd5+yt+emCokQc11aeYOp9UEaI= X-Gm-Gg: ASbGncvlwAkogz9jIRB6UuS4YzZt6yWAPPxhJKNkxCU5s/3nzSTjZOdjadd6Oc8EpV/ vyJ6jnfZGmMEgNPrHmLJ2Y2nkastt5+YJcP7zcJn4uQAKiiu3JVWBvrTzJWQXGO4eQT4DCc/AmU aM6w11rERM70x2ZntzSoU7ADgh35zZ7srYgsrTNg5wc/L2jjEGyn9gXft/re8ruCPdNywJUXcTL DCm89UN7h817gz5qyY6/JGRRUk05rT++PFQ0JlVDo5y5eAjHyoNq8xuZ2GqD9uRrqGdOt0HHdxG 2It9RczHXgSH/9/bPlzbT9pYj4QUl+1lz6IS+5h8+K5dBju1sJ6xRDoQyHZYxlXm+yode/tSDY5 /C83KtfnFLHdKqHCmIQ8YhCjOn5TDBTJCqg== X-Google-Smtp-Source: AGHT+IGUk5zUSgxh+r2dAU6fmhsNlb1RTWa2J7nuwDb4l4jA+t4jqiomYFBGdZGHaaNJrIZspvEapA== X-Received: by 2002:a05:690c:7286:b0:725:dc12:3004 with SMTP id 00721157ae682-73063d589abmr33964367b3.22.1757689836260; Fri, 12 Sep 2025 08:10:36 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:36 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 09/16] genirq/irqdesc: Have nr_irqs as non-static Date: Fri, 12 Sep 2025 18:08:48 +0300 Message-ID: <20250912150855.2901211-10-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" nr_irqs is required for debugging the kernel, and needs to be accessible for kmemdump into vmcoreinfo. Signed-off-by: Eugen Hristev --- kernel/irq/irqdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index db714d3014b5..6c3c8c4687fd 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -139,7 +139,7 @@ static void desc_set_defaults(unsigned int irq, struct = irq_desc *desc, int node, desc_smp_init(desc, node, affinity); } =20 -static unsigned int nr_irqs =3D NR_IRQS; +unsigned int nr_irqs =3D NR_IRQS; =20 /** * irq_get_nr_irqs() - Number of interrupts supported by the system. --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f181.google.com (mail-yw1-f181.google.com [209.85.128.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6BAF313533 for ; Fri, 12 Sep 2025 15:10:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689845; cv=none; b=BDUEvqPDrlGKKppM2fqunbqfsV7CttfuHQ2/ow25IwqU7HedUSfGsMdImL4i1JNc/f1xinH3jNGj0g332gMGktB9DEUnElhfyeuHHCJufUPhG/0DAMRVFVX1xIg1v1ExneghXQcSMq7LXXlBjVhITH08e0hOJpkjjSB/jjbeZ3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689845; c=relaxed/simple; bh=6AaRzfJC4rwBpQMEKbO3OuuO8jZlJG6Q3ebKObOQ6ZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KBlBEDnTT2VY2YyQJpuALW5uxNpCkZUwV/dc7hCwIHpGsnMdJVo0z6o+CgDbBAdldvuj37ergO1xA6FNZ57ig0Dm8yed6zt97YTBvQcRm9x2nRhp8dEYEMrDmKDJfToIGbtOM+bJVuFHQoYAJUPwIeRzGsjBcFRpIzuqB6eEQtg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QAEbFTKE; arc=none smtp.client-ip=209.85.128.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QAEbFTKE" Received: by mail-yw1-f181.google.com with SMTP id 00721157ae682-724b9ba77d5so20267137b3.3 for ; Fri, 12 Sep 2025 08:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689842; x=1758294642; darn=vger.kernel.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=FGwNZTJUDbb42i0I/DCBOpee9BSl0Ek2gmsDPeJY6Qk=; b=QAEbFTKE3Is1fpN4DN352x4/uB/fuDeyg8Xhor65IPIkwk0uDjgCQ6Jh2BYx/AUUod IeiEckAQTr5gy9kRRfDPj4lGzKnQkeqqGzlUcwj+oYonAfewd2XF4ogfR0xVk/OPy9C9 LT7VwTO/Hjy/zj12qr0uZvdfyDnKbBcVMr6e16LVaDQXKbTRVn4bo8cpbVWFABid7tal Z38O30igG7fjNVVZjfWLpqSfCp4BiUwK0lX8sTxbecKmUdfZzFE+gm8f0YAthKTVlsXL fAqvi8tPKPs5u2+qlxNSyZlz9K4y6cZ/D3hlx2tT9AUjf0QMHYRwEeB5oepeHFRa+N7p dR3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689842; x=1758294642; 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=FGwNZTJUDbb42i0I/DCBOpee9BSl0Ek2gmsDPeJY6Qk=; b=p5dtIZeci8QowkQDRt042pztEv+9yPGZmyf8QaVJlCY84yRVRFlVkrDrDiz131tDbi IUq9YBuS3hQDMEUNrtIcjY8gv4Hx0+3Xin0EPwWPDF00NVHhE0jP9f+bnmnf5I/vtpW0 a3jCtFxh9an9F8su59tSAoyjWrQc9JHgB4e426fOb5ThqVaLNjfVbLbwlrYwyJXUqBIl Q00UYuDw1k+2Xonj2ygwpXX4axPsIqyFddVK8QthK4+aVFIAqoewuTyHqrKQc2Z0t6EO sYhDsysgndTShzOAdVgpMfIeI5vAQfrjmTQ2NVJsIAuKKFuHu/swU3oJmZ8Csuo6Sf7X aUVg== X-Forwarded-Encrypted: i=1; AJvYcCUaDBjgxc1FuuJ8h476gqtFMjNvk0I37PBQOp71KXl1YrZgnuvj9mJFtT06PtFQSuGOS5DcOR+8UtwCQq8=@vger.kernel.org X-Gm-Message-State: AOJu0YyxcNG7N2pSu8d7X6pI+dELWzLw9xMawluXlHwjehNo911j9b9p g96/L38ePb/ZBjdt0VYIxmyYGc5hJy3b5EmQomWKa0pC0GB9S1ZfvaE6FmVWawszHyY= X-Gm-Gg: ASbGncs48ZNchqwVczbPHS/+NVp7QzaqHVcUwEHYBctGAUoVx9N1Wzebsxf6xqZmfC0 jE9C9BVTSy8ZJSyavN971GXRyXrbAyHwq4/YKOsA1bWCNCT8mstbCCzn4HOHbjLPmi2R4+NdMHm 1XPPRsigQCih8vigiatZlwuTi6+6sysLWzEaeOIOAs/GI3cOzykXt6wOPf/JwgSDTVOibpUVdTL C0kdTr83Sbzx7mKxf2gMTqblK2sJ+1BgomLzifPDPZ220mAN1lZmTsjRHQosKx3o6np9+RAZUML 8w5RnL43s0qQqeR6X+qSygXCS4hiG91bGu3zoIBleKQ+MHxxeqQg72QOYDGfGbEynnY5q6PVTSt CfsAlPfD96pfJfkibnFo+2nWTIDgEiaP6uJ2FrAt5YvP/ X-Google-Smtp-Source: AGHT+IGd4PoJfw4tH37hzUk6PYKHbfiAkto5gdK9xgc2f3TOFApwMRiD1EpUFg4A8D8xg0pKJaYxEg== X-Received: by 2002:a05:690c:f93:b0:71f:efa8:5881 with SMTP id 00721157ae682-730652db42amr34340137b3.30.1757689841832; Fri, 12 Sep 2025 08:10:41 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:41 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 10/16] panic: Have tainted_mask as non-static Date: Fri, 12 Sep 2025 18:08:49 +0300 Message-ID: <20250912150855.2901211-11-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tainted_mask is required for debugging the kernel, and needs to be accessible for kmemdump into vmcoreinfo. Signed-off-by: Eugen Hristev --- kernel/panic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/panic.c b/kernel/panic.c index d9c7cd09aeb9..048c33dab98a 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -54,7 +54,7 @@ static unsigned int __read_mostly sysctl_oops_all_cpu_bac= ktrace; #endif /* CONFIG_SMP */ =20 int panic_on_oops =3D CONFIG_PANIC_ON_OOPS_VALUE; -static unsigned long tainted_mask =3D +unsigned long tainted_mask =3D IS_ENABLED(CONFIG_RANDSTRUCT) ? (1 << TAINT_RANDSTRUCT) : 0; static int pause_on_oops; static int pause_on_oops_flag; --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f181.google.com (mail-yw1-f181.google.com [209.85.128.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D1EB322DC5 for ; Fri, 12 Sep 2025 15:10:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689849; cv=none; b=q2K9PkoyEovMPlorAgSc+seIBhGp8I6rG9OCOXW+i5tEV/hAxPzzU6xhKMdWDvLfMwlxcAGmFBK6yvot2sMFW40Esb9+0dbvKujEaWFeT+5l64b1/bwCV5MDeAVTb0I6iUmt4Hs2r1vLoB1iLPoOngZKRafpDdYloG7daV9m3CI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689849; c=relaxed/simple; bh=/BXmkvpKDtyn0qN8V/YK7rPLmRpgpvD9OPV5hibBmzU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qddOCHcvaH6kZEN0SNvSbwqsL3BY391LMLQYfZqv84Jc327T21CSkyhRIu/lRGc9zVc0CdAP7BO4dS+5GIK3GUn4MsktlwQmYoc2dwBXRHytS1QGUUa3NBK0xz4rFTOMHjlwbyOHExHkajPAJb+5jOzokISfCM1rsoJv9SrOReI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=YZypKfUU; arc=none smtp.client-ip=209.85.128.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="YZypKfUU" Received: by mail-yw1-f181.google.com with SMTP id 00721157ae682-723960ded6bso13973337b3.3 for ; Fri, 12 Sep 2025 08:10:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689847; x=1758294647; darn=vger.kernel.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=uvjoC9HrZ6XyeC1MmkaG/lWnbuRS5G1sVQIYvweJDZo=; b=YZypKfUUilMWvSOC5tKJEyTgzwdJPYqeNXJf9FaJuF+EXB5614ExOqocoFR2zokgth z3v+NG9SaCReUJAEdIU5jm6VnckPGRDxYmiM9LwJagc7Bpa5LgpuBr7qnGwepz712IiT mH8TKsy2EmsmpRajtRjKlT/mJCeGbYpwZvepubkvev3TsBNjKxOSdSFlSd1w6aEuZ8Vu GsoRgc6QC8knFhDDZrEYduQSljdhI9SK3vYc/giECpsxh7v/aR20rIV4kGmo+TLP4xsp laTJy7nJ6KfD276gyuuXGUDUPP7scjNJRSCam+HDlAUrGAz0C9rIOBc0q2Ixh1snPk6r Avzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689847; x=1758294647; 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=uvjoC9HrZ6XyeC1MmkaG/lWnbuRS5G1sVQIYvweJDZo=; b=fS8Y890HXVL3f+Uar5s83thSJ5o+G9pUaROXvwFyq3slyEfkCH33Qx5PAZYmXbDgR7 K4AMAuA5XO1MfH5ctBlF41H4Rr8WBjn8gM4W5mrMO6Fz2YP8gKJAEoAo9Mf4x46/T4J5 Z1OrVfZ+ImS9yyCAEjG09MqOgEHDZBllIvH7F6g8nJY7kd5bIT/PWIhXC8qjMs9qsgkW TxJdpl1OaVGwaWKxdbZ5AYz0x/8jbk7m2VhbghcThzq+ySj3gSGyzu1idft/SoCzfipB sZV1b/GZfzu/SBP1XUBRIPvjSn5S/sgxX5wLY1WjdAKb8IZvyOVLoeXIdYF8qTjGnLjM MVQg== X-Forwarded-Encrypted: i=1; AJvYcCUXTZTCZj0K9QPjnCgVExnbY0YxHK9/c9ZlgHQXuXDIbJ2Nf+22RwpxEO83qfK4OI8XjIWDwWiaOXl/XEs=@vger.kernel.org X-Gm-Message-State: AOJu0YwUUIBUYDRGLRnRE14LaRW1Udb1Hnr0KV5wCtOX1fwLoLwB0X2M l2TlW6RTi1VAn9Ec/FHm/WCVh/J9WldRpDIAL2B9OUWLWxWl+uZ9rFaX/O0H1A75jOI= X-Gm-Gg: ASbGncvkFUWTtGsL06XQrlSqTbrrYYNukRTCqVYprz5ZE8+KNMonIKnWFS1H/D2BsGm V5IhELmtPfxkQQsLqxcwYJ5iUso+Q71iecPCFevRkRbq2Ueyht/dN/uWMBblmrP9vK1+8fL9Hex NK+D/+P+aYPhIezaMwRS1+Jzossw+wUHQtNifJ/vqu4AzdU2Sp+0bv1tDTgHYldZuEZyx0m0aov Y8WhwyNtxY730dcAy9ZHTKq6Y+U0S7SjPrkcSJYjVJtRa6c7bSJ7QsKZLDU0CqlcIFOJohTK7RC D6j8Fkags0WUeuTmy1StEt12KmziQBVqS4POn7lcwdry+mQsQJLBuzGGdy+qsjzt3IirkM2rDv9 p1HYpkRj/a8R447VSAehl+H+l1d/iv2Uq4w== X-Google-Smtp-Source: AGHT+IG0Y2LxTvBY/AtHJvp89fVFaBOgxCKmySrObEvM5zSsJDKwSvyDpIHnZ+Ay7rKBasM7LP2xug== X-Received: by 2002:a05:690c:768a:b0:731:1bc7:7830 with SMTP id 00721157ae682-7311bc77c1fmr16987957b3.23.1757689847322; Fri, 12 Sep 2025 08:10:47 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:47 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 11/16] mm/swapfile: Have nr_swapfiles as non-static Date: Fri, 12 Sep 2025 18:08:50 +0300 Message-ID: <20250912150855.2901211-12-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" nr_swapfiles is required for debugging the kernel, and needs to be accessible for kmemdump into vmcoreinfo. Signed-off-by: Eugen Hristev --- mm/swapfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index a7ffabbe65ef..2ef51da2c642 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -63,7 +63,7 @@ static struct swap_cluster_info *lock_cluster(struct swap= _info_struct *si, static inline void unlock_cluster(struct swap_cluster_info *ci); =20 static DEFINE_SPINLOCK(swap_lock); -static unsigned int nr_swapfiles; +unsigned int nr_swapfiles; atomic_long_t nr_swap_pages; /* * Some modules use swappable objects and may try to swap them out under --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yx1-f50.google.com (mail-yx1-f50.google.com [74.125.224.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A69C326D53 for ; Fri, 12 Sep 2025 15:10:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689857; cv=none; b=UGUESxNNWskH0IXz9Rb1AGeVa9bY0q70/np39I27qOptgLTtYJA0q2fi/dwLKEc3VL8mEuj/Siriw3wFqn9tWjOwh6Unv8ZWRofh7T/10y1Nzu94G/IN7kSPZIzL5muhcS2UdLBYfNd2WjxjKAibUEb5b9AcDzAyk7/+Gl0TrzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689857; c=relaxed/simple; bh=mqm9C4r9CGB+Ni8ye2QxHYk0tRre6qbdyx5buxGNNkE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZzLy/JkTbfMd8FwTCzmu6jH9lqoRxTGuhFojDUflByW7AnXA5vEjfjFGTh/HBJU+/n5Bs7HoUPGL/DalpI3IPM5euk9LIyOs17K+C0/XD0N5AVLV5HlCl3KgfXZgO87xiUn2wrmgAayT9TqQT3cfc7Dqhu6qJVqA/K3QnA2eeZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=dj9E4H+n; arc=none smtp.client-ip=74.125.224.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="dj9E4H+n" Received: by mail-yx1-f50.google.com with SMTP id 956f58d0204a3-606b375eeb3so1037026d50.1 for ; Fri, 12 Sep 2025 08:10:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689853; x=1758294653; darn=vger.kernel.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=zRFg2hFdscTgaOHG8cpymzmUrui3DhwhCxVktuuhhLc=; b=dj9E4H+no8XAqg107yE5TNeSG+7gi0ZtZiDlPOcflDzIR1+cD5ThGatjldRUsxTtat qsTWvqAmnIlhuZw9RPmraQ/Cx7iBIxhdmSzYgJDAK5QVJahT98MGfzNykqnXeV/b31+9 h++zS/gU6SKeXjg5brrSfGSsvl1PaX+WJOrgrn8EacU2DucpbwozB5FHqgr0oZaRg3YK AocMhhxbwq8kDTnqLAe9jjRnLeQOqyfCF78yohY6/ZFBNMsiuzkhc9T96c+JCUdo7AOy VeAReLqohOjy1pW/qm2jDi36GgHfKnCwMgknOhCynzopGAPvqRB2ptx64+g1t3TdET1E mwZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689853; x=1758294653; 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=zRFg2hFdscTgaOHG8cpymzmUrui3DhwhCxVktuuhhLc=; b=tq5WRpF2eClMxyotqdYvo+4UjUcPy3H859OjtqczJbq9SM+ANhhhWCiZKX+QfuThr8 oPAbWukkMIVjdG9eM0Wh8uktKWwPfL7Aqcr9fgTmt1W+n+m1NvUOTZGK36L8oVDucc0C 0Mr/1UE97zn+x+KDeuYHtjEpH9jRx67p7RZPxmkaGiijQwr9Vb6RK3c63D/wxQ3NKPKX 9TQad/0SNIFbF3jsOxT9VL5GxvDK/UdjLiD9zz7lqmt+3ImY806Kmw7WOAhq3j4tTHJ9 0rqlAnFwLE7XsqBoyFMlOMzM1/YfkvXJT+An8S3iEukMoMgAiY87cYicdIRCGY2UNRoN bC3w== X-Forwarded-Encrypted: i=1; AJvYcCVFrXGAcRd/mbE/041IDnu5XY+NjFZf5T02SgH6Zn54C+ztO21IolV7PLOl8e4sCrctfoGNEH4WjefqAqw=@vger.kernel.org X-Gm-Message-State: AOJu0YyIcpWci6/3BdXyCar0/lcsb06vgMLnk9XlsT1aufOG2LvAjFUk zNJKttbMFLCpw5qiQS816jfPwHTazgRFEHtnCcr7TbsYiPH2+sFlsi/7f1T84SYsibg= X-Gm-Gg: ASbGncvKyoi3JsYlBRa62aQKqH6ppOk+dVpDklbfhFqPjx9IPUmpWimnnQVaX35k4Ub ymZAASBAHVf1fABfxaNSwMrgJh/JlijC5j89RunhzE0ddaK/QTuLrjrplSc1AkW4HmttI6QwF5L 4JYf0h5lsZMrDZsk6QUblIQglMj3uq8wG2BwAp1dhEc0nSTYFB6rqhFJWzBxf9shjEYLSUhW/xE KR/Z9wpfXP/CHHq7lQxKgLyVoYUK5jriPUkVnZ+lrHPom6au8B1irwrPQOO1Bs/BQCO5NFo1SvH EW3GjxpWQrjnGDYKNb3xAYxCE0lUdh9A7D/aK+aG1bukMdjGpBlgNuCh16xw+LC6jZuKCKPICt4 BOz7oruyFy5LhNhfTwXVxXmSHIPfWKWcO/Q== X-Google-Smtp-Source: AGHT+IGA3TFT+vemEd/ubQxEEhLwHcx7hg7Tn+5tAGBp/Y4gBcPvEFcB1itw15g/ByzT4/+eDheVvA== X-Received: by 2002:a53:84c7:0:b0:626:d26c:cca3 with SMTP id 956f58d0204a3-62714ee78ffmr2387133d50.0.1757689852988; Fri, 12 Sep 2025 08:10:52 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:52 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 12/16] printk: Register information into Kmemdump Date: Fri, 12 Sep 2025 18:08:51 +0300 Message-ID: <20250912150855.2901211-13-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Kmemdump requires the prb, data, descriptors and info. Add it inside the log_buf_vmcoreinfo_setup() In the case when the log buffer is dynamically replaced by a runtime allocated version, call kmemdump to register the data but call unregister to remove the old registered data first. Signed-off-by: Eugen Hristev --- kernel/printk/printk.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 5aee9ffb16b9..f75489fd82df 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -49,6 +49,7 @@ #include #include #include +#include =20 #include #include @@ -964,6 +965,43 @@ const struct file_operations kmsg_fops =3D { }; =20 #ifdef CONFIG_VMCORE_INFO +static void log_buf_vmcoreinfo_kmemdump_update(void *data, size_t data_siz= e, + void *descs, size_t descs_size, + void *infos, size_t infos_size) +{ + kmemdump_unregister(KMEMDUMP_ID_COREIMAGE_prb_data); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_data, + (void *)data, data_size); + + kmemdump_unregister(KMEMDUMP_ID_COREIMAGE_prb_descs); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_descs, + (void *)descs, descs_size); + + kmemdump_unregister(KMEMDUMP_ID_COREIMAGE_prb_infos); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_infos, + (void *)infos, infos_size); +} + +static void log_buf_vmcoreinfo_kmemdump(void) +{ + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb, + (void *)&prb, sizeof(prb)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_descs, + (void *)&_printk_rb_static_descs, + sizeof(_printk_rb_static_descs)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_infos, + (void *)&_printk_rb_static_infos, + sizeof(_printk_rb_static_infos)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_prb_data, + (void *)&__log_buf, __LOG_BUF_LEN); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_printk_rb_static, + (void *)&printk_rb_static, + sizeof(printk_rb_static)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_printk_rb_dynamic, + (void *)&printk_rb_dynamic, + sizeof(printk_rb_dynamic)); +} + /* * This appends the listed symbols to /proc/vmcore * @@ -1029,6 +1067,8 @@ void log_buf_vmcoreinfo_setup(void) =20 VMCOREINFO_STRUCT_SIZE(latched_seq); VMCOREINFO_OFFSET(latched_seq, val); + + log_buf_vmcoreinfo_kmemdump(); } #endif =20 @@ -1214,6 +1254,11 @@ void __init setup_log_buf(int early) new_descs, ilog2(new_descs_count), new_infos); =20 +#ifdef CONFIG_VMCORE_INFO + log_buf_vmcoreinfo_kmemdump_update(new_log_buf, new_log_buf_len, + new_descs, new_descs_size, + new_infos, new_infos_size); +#endif local_irq_save(flags); =20 log_buf_len =3D new_log_buf_len; @@ -1257,8 +1302,10 @@ void __init setup_log_buf(int early) return; =20 err_free_descs: + kmemdump_unregister(KMEMDUMP_ID_COREIMAGE_prb_descs); memblock_free(new_descs, new_descs_size); err_free_log_buf: + kmemdump_unregister(KMEMDUMP_ID_COREIMAGE_prb_data); memblock_free(new_log_buf, new_log_buf_len); out: print_log_buf_usage_stats(); --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yb1-f171.google.com (mail-yb1-f171.google.com [209.85.219.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90356327A22 for ; Fri, 12 Sep 2025 15:10:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689861; cv=none; b=rfUREESM/uWsaSEUIa0p05ijclwdRM+L8Aen/fxYGBKobDKWeAhvzOmAVZEhOTTam83qX+2ukNa7jKSiO0rLq0d5H95DFqUhF80vpdzD2xILtjCfm7b0cSEqWfo+TMbvVQquqzb9VqJesqTG3mlVzd/DvNx6Y8kmcgtUZCWTMvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689861; c=relaxed/simple; bh=y6R7JHolSByTQrZMijPqGMycDGbxs6NH+B+6pGvmKpA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZDwW9U9YR5cJOElFV7q8wNgbKgOh5zjaR8mxW315TXISqtOi2owKvK4GBo9e1HfHDid9bis+6HcItwhFRmdV+As8dpkdbJoEDOh3eEmKBsl/SnUqskCq6yr/wGXWHejtpqOpmkGTTvVYHmSurj58OOHa1U4D5poiyTy23CyJZIw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=RkLKDK64; arc=none smtp.client-ip=209.85.219.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="RkLKDK64" Received: by mail-yb1-f171.google.com with SMTP id 3f1490d57ef6-ea3dbcc5525so628497276.2 for ; Fri, 12 Sep 2025 08:10:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689858; x=1758294658; darn=vger.kernel.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=iQyd/J78t59e431BzK+r1hLIHKrEAjBfy36U2OzrJzo=; b=RkLKDK648r9G39cYNUgxAOkTYXEi2/89mqteQ158UtaweCw6CikKqdSLRll8g0cHql qRxTuJrsWD0ihRSERDZuXzora7vcp8ATffCF4huACVPct1VvjVWD2nq/KK0PEWriuuLE V6RC44iPBH1NihSdKirV+JOfyCZ1lTWHtGH0frmoCOX96W1rNDHhysfntO28vlTE38B7 MdPsuoE0+HqHemQ6VXwnwNc7fBPzUNDAwfWLAquFf2P8I1G/dowEFb/dmQwCyMpk7AcG vX13zFnYKk7wUjiGbHMIAQtDvjn0nkWJl9Vyj5D7EYO1n1UyJBw/7tLB2hZ9RB3Fpt4Y SWqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689858; x=1758294658; 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=iQyd/J78t59e431BzK+r1hLIHKrEAjBfy36U2OzrJzo=; b=WOQOfsuBydQiVYIZNNF6vB8O9e+/EoXzW6Kez4NLzBXkBL78HKia1Cvtu5V2nLalBp qkuYblyhuH7qqNmw4NAMZK6j6zkX7zxijibAraASuhFbRFJYSwPhfJcIYQvAHSzsIg44 myLoI1j5bwnc5DSK9aaQUMWa90dP5cGSb0yGNu6sSHb/RLaADZ3m3djp+AZPJX6M5KQU 6bVV6vyrHikdeq1b6PV5mqk0QQmNHfx3Xft9xr2GkJ6ry4iXbpmo/l5ZQOtliuvFqFiX wiTt0ft5rF+kHGi/ihXXJqQvqBIAvHxLMx3R+VWHTEKwxJgUIzXz9XocSaXlFcia8EIW HjtQ== X-Forwarded-Encrypted: i=1; AJvYcCVlyKHuAp5KIt7fGw1DuEfmqwZg1IgQqWA/Fk4CLUF0/Uby4qfcZm9EWDJ1bIsIErK+7wqs2mqw8IySngM=@vger.kernel.org X-Gm-Message-State: AOJu0Yxdgh8h9KBcU/wRXvqiGDOlLXYIji3LHbPMWe0kiaQByuTWM9H1 xP8glhmb87A5831X3hs7hQtKZrEh3rNSOWkBqc+jzHuCNbQ0ZMKyRIeg83S93SZnwc0= X-Gm-Gg: ASbGncukVUpRQaofKQGJGsHBtEeA0ok+3GRIODFDQ7tVaXsyI8Jga/l7zhzr784N6jA e4iyMo1sWjEesnZErL30Q6yVcEfU8SM21y8NCnxpblK9ezad3hy2Gyb5aLgPXuvtAMdgT0gwNtZ 6HiEedK1vfK9Np62IDM38W1gEsB070RSgtWGR4Na7R+zslWxUa0+AJdvOZtwmF0koVY6vbw4fFz KbdZAPACV7izDWH8GwMdm8Ep1vqbIOdB5tCn8BB6yb0c00YDjzhwHJ1xXRaNBurAUsb5zvFrWj3 /lyQd0YrLoROwHHLPm6Ho2wvdLlN+jLbFUSUn2PLeNl78BlH/71TlCjnuuP8XFulaQcp61PANvN /tDYtfr5qQTFigxKJghWvK+ulFE/5F0C1bQ== X-Google-Smtp-Source: AGHT+IHiWq2tZ0Zh+6RCMZ5n4YEMDF8GDIlS1UolWn0dcdm4mJQCk7ANF/Eeoayp4tEVnT1oJJ4YdQ== X-Received: by 2002:a05:690c:6089:b0:723:9ba7:7f9e with SMTP id 00721157ae682-73064cfc375mr30364727b3.25.1757689858316; Fri, 12 Sep 2025 08:10:58 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:10:58 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 13/16] sched: Add sched_get_runqueues_area Date: Fri, 12 Sep 2025 18:08:52 +0300 Message-ID: <20250912150855.2901211-14-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add simple function to get the runqueues area and size for dumping purpose. Signed-off-by: Eugen Hristev --- kernel/sched/core.c | 15 +++++++++++++++ kernel/sched/sched.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 9af28286e61a..a054dd1fda68 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -120,6 +120,21 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(sched_compute_energy_tp); =20 DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); =20 +/** + * sched_get_runqueues_area() - obtain runqueues area for dumping + * @start: pointer to the start of the area, to be filled in + * @size: size of the area, to be filled in + * + * The obtained area is only to be used for dumping purpose + * + * Return: none + */ +void sched_get_runqueues_area(void **start, size_t *size) +{ + *start =3D &runqueues; + *size =3D sizeof(runqueues); +} + #ifdef CONFIG_SCHED_PROXY_EXEC DEFINE_STATIC_KEY_TRUE(__sched_proxy_exec); static int __init setup_proxy_exec(char *str) diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index b5367c514c14..3b9cedb1fbeb 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1330,6 +1330,8 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); #define cpu_curr(cpu) (cpu_rq(cpu)->curr) #define raw_rq() raw_cpu_ptr(&runqueues) =20 +void sched_get_runqueues_area(void **start, size_t *size); + #ifdef CONFIG_SCHED_PROXY_EXEC static inline void rq_set_donor(struct rq *rq, struct task_struct *t) { --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f181.google.com (mail-yw1-f181.google.com [209.85.128.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D5EF32A80A for ; Fri, 12 Sep 2025 15:11:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689866; cv=none; b=UXPzKuo0b4f+Hv4iXvH/G5fqWnGWMvoPBW1jDjaDXO364DncOHi3lCp8ChBLjtnQWZQ27aDBmjU+eb0SNrzj/KmzHaLI3UEookFSCtLgC18/5pzjc2J2HR5ExKTugExNAdxxQhMBb3o1f+al3/6JeD5wvDLEc7j6wCtjdd6cxwE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689866; c=relaxed/simple; bh=olisOB+5za+t4P5vR3SQezv1tTe26b/8LyNxmfx828U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vt+gDUcTVMzaim/aMQ5MQtTuccGqqRdsJB0bW3L8zFGn3woZ7HrPBdoBYYcY6yJX42YEXFnQrIWrVQesHZBlYXeeY6niQ4FI9WdMeZjXG4JGzmgAgoA99Qv+yGAlXjbFanb4Ja4+533mKnOdW9K7Dz6J1dmMg7hef1bsXb4VT7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=WubJAJkO; arc=none smtp.client-ip=209.85.128.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="WubJAJkO" Received: by mail-yw1-f181.google.com with SMTP id 00721157ae682-71d603acc23so13748837b3.1 for ; Fri, 12 Sep 2025 08:11:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689863; x=1758294663; darn=vger.kernel.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=UNgnuqtXCBxfx2G2dXAsaT/aGFlSDDhwnEcansq3QOI=; b=WubJAJkOJQnIMhnn6IzLIe0buPcWdYUddOlJ0l5R+p78Ifc8WWmzsO15i1RxkBwBhQ laZtmtcDDz0WUY+8wiov2UGfhMzKbXO8p8d346MZWentphqz1ZsQYIf72mOU5fNwZOxO bbk1kgDbV8O8p2gtoNwBtE7jnLpjB+FUbyo227s1MuK2cRTJqrMH/4NbfkWVGqpn/DOZ hr3Vid4R+QGNOhaWsc9UQs1d1rRutUuW/r+eEqEXCfufJRmuemjyIxF9Yuj9R08nV3Iw rduH/KgjoXP7SdYERbohUuJ6XqAW/vNJqWH5XEDBN6xBen5UNeYDHvh4nznAcpNNo5xW 64Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689863; x=1758294663; 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=UNgnuqtXCBxfx2G2dXAsaT/aGFlSDDhwnEcansq3QOI=; b=ox4mcojWe/gRrApiwC3DMCG+b8/Oj2y+c8ZXxM6QSK44hqn6SzJc2KdxCYE4lgouZx BcaThYQOzD5S3+kQ5U1yC2rSL0ZzAw62M/Z3k4kDbgQIHfOphT/DQZSqYBIIBa+cYtb2 CLNQS0/1FrSoxJGzoaU3y3RZxU8aops8W0OKAEH6Li1w4zLg4rGRaJdne889WnOjZ/Tp OcmGXQb8NWnwjksyoBB5iPmfffN6CTLKH+SvDtxyi4p7rJJ1oBh7P9HV9QMyXWurNS7t q29yXTFoxm1nc8EgTxAXwaA+hNtAu00nbpw/NTEakcVQAusNemeIW9w6pPd/49IyjGdv C+FQ== X-Forwarded-Encrypted: i=1; AJvYcCVehsrFT9VSOpO/YAOIPlq90QEpDW5+y/ZJLPQdGbpxrfxj+QxgdBQ/zLAnqYAVu7/xgKouYIMPEOUSyqE=@vger.kernel.org X-Gm-Message-State: AOJu0Yyy6CfUSEw//1wPR6V2iep8w7zq2EMfxZ+o9QCp9TmKx+a2psyL EDTvKl6rFQyuP9Y4/Gbb9WJo+x1qRsiBIg75T/z071DdYmm23rza6gqWZcH/NzvxzKGbt4C5dqd WuyCbYQoALA== X-Gm-Gg: ASbGncvtG3QRLNmjZqs+qnbNodPVFj18k2uQY243h5+9YUxJilFFb0F1ZyNYFmyfl9M F9WYVd9nHj/vg92fPMEivuu9pO9umJo+6Y+8LifDs8aGZ+mL27LTUATKTRGqo36u05ujFFAn6om IJmfa9BPY4klJPZIJiMJ17Idq7e/qVe5WTxJXIINS1B1VouHnQJ5PHkqpsEYt/SSywyN30PUJKl wCmm5PucctvRt/S6fTTXGFdj9Ghv50d3o3OmNjVtzaWcMAR3utWtEn3pLa8SxwHXm4PK98sArRk FzICXTZLMuNyNIXMNczFwTxA/G0qSuaSc4xxkgXJWkF1LOd4DSeDnqJOOJ59K8YKjQG5hbuWFBW 5vZ+QSoxIHYGDZ/ivj7F04+HE5xigr1/C9w== X-Google-Smtp-Source: AGHT+IEtne9c9aNxfz8OotnYXAiNsAB4JCtq87oaoJ7ML/Nd9NUoYp51pIa4pWBpc4rPSN6ehP6TAw== X-Received: by 2002:a05:690c:9688:b0:721:1c48:a627 with SMTP id 00721157ae682-730627c990emr26695147b3.6.1757689862953; Fri, 12 Sep 2025 08:11:02 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.10.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:11:02 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 14/16] kernel/vmcoreinfo: Register kmemdump core image information Date: Fri, 12 Sep 2025 18:08:53 +0300 Message-ID: <20250912150855.2901211-15-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The coreimage generated by kmemdump requires some kernel information in order to be successfully loaded by `crash` or gdb. Register all this information through vmcoreinfo once vmcoreinfo is setup. Signed-off-by: Eugen Hristev --- kernel/vmcore_info.c | 141 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/kernel/vmcore_info.c b/kernel/vmcore_info.c index 3e2e846ba9c8..1d83e95cf9be 100644 --- a/kernel/vmcore_info.c +++ b/kernel/vmcore_info.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #include #include @@ -24,6 +25,17 @@ #include "kallsyms_internal.h" #include "kexec_internal.h" =20 +void sched_get_runqueues_area(void **start, size_t *size); + +extern unsigned int nr_irqs; +extern unsigned long tainted_mask; +extern unsigned int nr_swapfiles; + +#ifdef CONFIG_IKCONFIG_PROC +extern char kernel_config_data; +extern char kernel_config_data_end; +#endif + /* vmcoreinfo stuff */ unsigned char *vmcoreinfo_data; size_t vmcoreinfo_size; @@ -121,8 +133,137 @@ EXPORT_SYMBOL(paddr_vmcoreinfo_note); =20 static void vmcoreinfo_kmemdump(void) { + void *start; + size_t size; + int i; + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_VMCOREINFO, (void *)vmcoreinfo_data, vmcoreinfo_size); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_linux_banner, + (void *)&linux_banner, banner_len); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_init_uts_ns, + (void *)&init_uts_ns, sizeof(init_uts_ns)); + + sched_get_runqueues_area(&start, &size); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_runqueues, + (void *)start, size); + +#ifdef CONFIG_IKCONFIG_PROC + /* Register 8 bytes before and after, to catch the marker too */ + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_CONFIG, + (void *)&kernel_config_data - 8, + &kernel_config_data_end - &kernel_config_data + 16); +#endif + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE___cpu_possible_mask, + (void *)&__cpu_possible_mask, + sizeof(__cpu_possible_mask)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE___cpu_active_mask, + (void *)&__cpu_active_mask, + sizeof(__cpu_active_mask)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE___cpu_online_mask, + (void *)&__cpu_online_mask, + sizeof(__cpu_online_mask)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE___cpu_present_mask, + (void *)&__cpu_present_mask, + sizeof(__cpu_present_mask)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_nr_irqs, + (void *)&nr_irqs, sizeof(nr_irqs)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_tainted_mask, + (void *)&tainted_mask, sizeof(tainted_mask)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_taint_flags, + (void *)&taint_flags, sizeof(taint_flags)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_jiffies_64, + (void *)&jiffies_64, sizeof(jiffies_64)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_nr_threads, + (void *)&nr_threads, sizeof(nr_threads)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_node_states, + (void *)&node_states, sizeof(node_states)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_init_mm, + (void *)&init_mm, sizeof(init_mm)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_init_mm_pgd, + (void *)&init_mm.pgd, sizeof(*init_mm.pgd)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__totalram_pages, + (void *)&_totalram_pages, sizeof(_totalram_pages)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_nr_swapfiles, + (void *)&nr_swapfiles, sizeof(nr_swapfiles)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE___per_cpu_offset, + (void *)&__per_cpu_offset, sizeof(__per_cpu_offset)); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_high_memory, + (void *)&high_memory, sizeof(high_memory)); +#ifdef CONFIG_NUMA + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_node_data, + (void *)&node_data, + MAX_NUMNODES * sizeof(struct pglist_data)); + + for (i =3D 0; i < MAX_NUMNODES; i++) { + if (!NODE_DATA(i)) + continue; + kmemdump_register((void *)NODE_DATA(i), + roundup(sizeof(pg_data_t), SMP_CACHE_BYTES)); + } +#endif + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_mem_section, + (void *)&mem_section, sizeof(mem_section)); + for (i =3D 0; i < NR_SECTION_ROOTS; i++) { + if (!mem_section[i]) + continue; + kmemdump_register((void *)mem_section[i], + SECTIONS_PER_ROOT * sizeof(struct mem_section)); + } + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_MEMSECT, + (void *)mem_section, + sizeof(struct mem_section *) * NR_SECTION_ROOTS); + + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_num_syms, + (void *)&kallsyms_num_syms, + sizeof(kallsyms_num_syms)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_relative_base, + (void *)&kallsyms_relative_base, + sizeof(kallsyms_relative_base)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_offsets, + (void *)&kallsyms_offsets, + sizeof(&kallsyms_offsets)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_names, + (void *)&kallsyms_names, + sizeof(&kallsyms_names)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_token_table, + (void *)&kallsyms_token_table, + sizeof(&kallsyms_token_table)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_token_index, + (void *)&kallsyms_token_index, + sizeof(&kallsyms_token_index)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_markers, + (void *)&kallsyms_markers, + sizeof(&kallsyms_markers)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_kallsyms_seqs_of_names, + (void *)&kallsyms_seqs_of_names, + sizeof(&kallsyms_seqs_of_names)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__sinittext, + (void *)&_sinittext, sizeof(&_sinittext)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__einittext, + (void *)&_einittext, sizeof(&_einittext)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__end, + (void *)&_end, sizeof(&_end)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__text, + (void *)&_text, sizeof(&_text)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__stext, + (void *)&_stext, sizeof(&_stext)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE__etext, + (void *)&_etext, sizeof(&_etext)); + kmemdump_register_id(KMEMDUMP_ID_COREIMAGE_swapper_pg_dir, + (void *)&swapper_pg_dir, sizeof(&swapper_pg_dir)); } =20 static int __init crash_save_vmcoreinfo_init(void) --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f172.google.com (mail-yw1-f172.google.com [209.85.128.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCBC132CF79 for ; Fri, 12 Sep 2025 15:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689870; cv=none; b=K8SBgTwAXlog94GzOWq61TLcOK0Qp0ECOwjB8oaxL9WTYH/4hof0K05Z2lLGocDFN9jEikHVf0TDxXx3dWeNhuZ/a+Qyt7h+3hIPL57kmRGZfE9FHXtA1HCCvwA0JT0QxhN4RJopQxEfpDuWQ9d7/WEOlX0R2ln0gQArQHDHZT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689870; c=relaxed/simple; bh=HUD4Mjc5wMBAw/SAWwLyhxv8mf9k+BoSYkr0D6u7wvI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gas+2y162Zl3gj1Lii/s+QsUJD7aybYt3hvoSDo5IaNKWicpiZl2cZ6H+gnT8PbltWnQ3z1N6OHZAjX+i9gd4s1zkmxFXj/g7b8VlnMN0kg2qHSQ9vhlOmnAP/nVMkyXBI5C61RRaf26m0C51lMWxwfeOzNDmLvJv69s7KJj3zo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=AKjzJCNu; arc=none smtp.client-ip=209.85.128.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="AKjzJCNu" Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-71d60157747so14587557b3.0 for ; Fri, 12 Sep 2025 08:11:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689868; x=1758294668; darn=vger.kernel.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=TgoQ+woT/93cBsRw8kKeoK5/i5b3BJOE5ioHeOB3mNE=; b=AKjzJCNuqfuNkKu/VY2j98CAAa6ccyfjrnZ0yHYAqqlYremzksSlk347ea78qE6QTJ pXgun726DA8jIrcyHiabYvPFutlE2KoUT1NUmrgIBBTqUycpB0Jd7DpDrIajJq865I9Y DXnANmRo1GlOYOfirfAUaMwofDRHL4o1Q0WPEY/mQiOAx0jedN0xmhPXizBAje6kZ2uy zNMTaAubhD0d70tcU9ZHViggY0ifEV4U68nYQwFR/z08p3ZObeSSTnC0m32YbkPlW8qE St7Ic0RYZrZ6Cix+wQvCABy0D5PQAyo8aGgjzzy/26f6PLlWS8fepfgwlXhs5NA9huLm FcdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689868; x=1758294668; 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=TgoQ+woT/93cBsRw8kKeoK5/i5b3BJOE5ioHeOB3mNE=; b=RU5HLVJhoEfF4iEWvzpHGfEfOjlBaEV8PBS3mYRRs5yzR/u1ypuGgSV5e3XxKZkRJ9 cxa0u5baRvv/XrSye5BaT/lTZwpUsqRkPiKwGfhs6536svvmwCAMnHoPprbQo8yoPsH0 OTrDQzMH+jVWNbDTgJwPOavVO10zNR/G0IdiveEY2R7aJwNC5+XCw9TidSYE1za9826v YcmjAZawNP05Z4kR5H6M7XcprBPPqrEBCMyid+rXROaYocSu4eEjq4LSBesqgR+WYwGs So/dr7uE6WNysog+HC412yogr/wm+D7krmgIrUM83VM0l1Lub7vdyeWd5zySLbg9eSvq 0sTA== X-Forwarded-Encrypted: i=1; AJvYcCVgU/I+hGnREZG+8nb3f69aCzqH+S5r8t+OSjL5+/uK1xTXzknLNsAtDqNkxVY5zMP95jP0cyg2W3Xh1uY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7nAmAituPfPDq+ExdpR7wb84l7UaZ24p3j6w5lh8OYv3g5vKa PDZd6ysmYoVUNgYvJdvGs4T3+rGqRO6byGVJW40JXqU1ggdnHKce6y9YKVRBqmlaBME= X-Gm-Gg: ASbGncs3Gubo1pEa1iyiCK2myMcOggCdtjIy3vRJHAA+wIz0kypK7n2NUiSj9telUjs qykehjq5DJoalTHeN4DN/JGR4JE0kSZieC3oTzzDI6IU5T7ZpZwM82fxUXvrFyMVdyv0m3u3wHL YbqWftkj7S5VtSzhseYlmCmMiJsIg8mFcbtoVFoLfW0YWUNhwdviuUwiUggQl1owLVUcOxh4q1/ cHaCbSjmIJ8HxzxLLU2zIApBWAVGxkgKW7QsNyZCAi/xe0xAGtWLki+6EUF3bxfoNq5FsqE9nOK E5gMvtK/b34ccYGAowEnC8eht4bfQRU08HKfEQzIha/fra09mDO7SPt/cLjJjGUljYaVPfRlIt2 6ebn++nCJepSficRBJ2irV1lIeb+lklWj5A== X-Google-Smtp-Source: AGHT+IGUcGV4IM3PVToM3wIMhJFlncT19Inxpe70tej0adAKBemPa7cOoqolhGXuc6qPV6B9GeZ9vg== X-Received: by 2002:a05:690c:f92:b0:70e:2d17:84b5 with SMTP id 00721157ae682-7305f99fd82mr33784177b3.0.1757689867582; Fri, 12 Sep 2025 08:11:07 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.11.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:11:07 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 15/16] kmemdump: Add Kinfo backend driver Date: Fri, 12 Sep 2025 18:08:54 +0300 Message-ID: <20250912150855.2901211-16-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add Kinfo backend driver. This backend driver will select only regions of interest for the firmware, and it copy those into a shared memory area that is supplied via OF. The firmware is only interested in addresses for some symbols. The list format is kinfo-compatible, with devices like Google Pixel phone. Signed-off-by: Eugen Hristev Tested-by: Tudor Ambarus --- MAINTAINERS | 5 + mm/kmemdump/Kconfig.debug | 13 ++ mm/kmemdump/Makefile | 1 + mm/kmemdump/kinfo.c | 293 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 312 insertions(+) create mode 100644 mm/kmemdump/kinfo.c diff --git a/MAINTAINERS b/MAINTAINERS index 8234acb24cbc..65d9e5db46a9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13818,6 +13818,11 @@ F: include/linux/kmemdump.h F: mm/kmemdump/kmemdump.c F: mm/kmemdump/kmemdump_coreimage.c =20 +KMEMDUMP KINFO BACKEND DRIVER +M: Eugen Hristev +S: Maintained +F: mm/kmemdump/kinfo.c + KMEMDUMP QCOM MINIDUMP BACKEND DRIVER M: Eugen Hristev S: Maintained diff --git a/mm/kmemdump/Kconfig.debug b/mm/kmemdump/Kconfig.debug index 91cec45bc3ca..ff88bf8017ae 100644 --- a/mm/kmemdump/Kconfig.debug +++ b/mm/kmemdump/Kconfig.debug @@ -38,3 +38,16 @@ config KMEMDUMP_QCOM_MINIDUMP_BACKEND into the minidump table of contents. Further on, the firmware will be able to read the table of contents and extract the memory regions on case-by-case basis. + +config KMEMDUMP_KINFO_BACKEND + tristate "Shared memory KInfo compatible backend" + depends on KMEMDUMP + select VMCORE_INFO + help + Say y here to enable the Shared memory KInfo compatible backend + driver. + With this backend, the registered regions are copied to a shared + memory zone at register time. + The shared memory zone is supplied via OF. + This backend will select only regions that are of interest, + and keep only addresses. The format of the list is Kinfo compatible. diff --git a/mm/kmemdump/Makefile b/mm/kmemdump/Makefile index 6ec3871203ef..1ec94ee6c008 100644 --- a/mm/kmemdump/Makefile +++ b/mm/kmemdump/Makefile @@ -3,3 +3,4 @@ obj-y +=3D kmemdump.o obj-$(CONFIG_KMEMDUMP_COREIMAGE) +=3D kmemdump_coreimage.o obj-$(CONFIG_KMEMDUMP_QCOM_MINIDUMP_BACKEND) +=3D qcom_minidump.o +obj-$(CONFIG_KMEMDUMP_KINFO_BACKEND) +=3D kinfo.o diff --git a/mm/kmemdump/kinfo.c b/mm/kmemdump/kinfo.c new file mode 100644 index 000000000000..9f0ec8a1aaa2 --- /dev/null +++ b/mm/kmemdump/kinfo.c @@ -0,0 +1,293 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * + * Copyright 2002 Rusty Russell IBM Corporation + * Copyright 2021 Google LLC + * Copyright 2025 Linaro Ltd. Eugen Hristev + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUILD_INFO_LEN 256 +#define DEBUG_KINFO_MAGIC 0xCCEEDDFF + +/* + * Header structure must be byte-packed, since the table is provided to + * bootloader. + */ +struct kernel_info { + /* For kallsyms */ + __u8 enabled_all; + __u8 enabled_base_relative; + __u8 enabled_absolute_percpu; + __u8 enabled_cfi_clang; + __u32 num_syms; + __u16 name_len; + __u16 bit_per_long; + __u16 module_name_len; + __u16 symbol_len; + __u64 _relative_pa; + __u64 _text_pa; + __u64 _stext_pa; + __u64 _etext_pa; + __u64 _sinittext_pa; + __u64 _einittext_pa; + __u64 _end_pa; + __u64 _offsets_pa; + __u64 _names_pa; + __u64 _token_table_pa; + __u64 _token_index_pa; + __u64 _markers_pa; + __u64 _seqs_of_names_pa; + + /* For frame pointer */ + __u32 thread_size; + + /* For virt_to_phys */ + __u64 swapper_pg_dir_pa; + + /* For linux banner */ + __u8 last_uts_release[__NEW_UTS_LEN]; + + /* Info of running build */ + __u8 build_info[BUILD_INFO_LEN]; + + /* For module kallsyms */ + __u32 enabled_modules_tree_lookup; + __u32 mod_mem_offset; + __u32 mod_kallsyms_offset; +} __packed; + +struct kernel_all_info { + __u32 magic_number; + __u32 combined_checksum; + struct kernel_info info; +} __packed; + +struct debug_kinfo { + struct device *dev; + void *all_info_addr; + u32 all_info_size; + struct kmemdump_backend kinfo_be; +}; + +static struct debug_kinfo *kinfo; + +#define be_to_kinfo(be) container_of(be, struct debug_kinfo, kinfo_be) + +static void update_kernel_all_info(struct kernel_all_info *all_info) +{ + int index; + struct kernel_info *info; + u32 *checksum_info; + + all_info->magic_number =3D DEBUG_KINFO_MAGIC; + all_info->combined_checksum =3D 0; + + info =3D &all_info->info; + checksum_info =3D (u32 *)info; + for (index =3D 0; index < sizeof(*info) / sizeof(u32); index++) + all_info->combined_checksum ^=3D checksum_info[index]; +} + +static int build_info_set(const char *str, const struct kernel_param *kp) +{ + struct kernel_all_info *all_info =3D kinfo->all_info_addr; + size_t build_info_size; + + if (kinfo->all_info_addr =3D=3D 0 || kinfo->all_info_size =3D=3D 0) + return -ENAVAIL; + + all_info =3D (struct kernel_all_info *)kinfo->all_info_addr; + build_info_size =3D sizeof(all_info->info.build_info); + + memcpy(&all_info->info.build_info, str, min(build_info_size - 1, + strlen(str))); + update_kernel_all_info(all_info); + + if (strlen(str) > build_info_size) { + pr_warn("%s: Build info buffer (len: %zd) can't hold entire string '%s'\= n", + __func__, build_info_size, str); + return -ENOMEM; + } + + return 0; +} + +static const struct kernel_param_ops build_info_op =3D { + .set =3D build_info_set, +}; + +module_param_cb(build_info, &build_info_op, NULL, 0200); +MODULE_PARM_DESC(build_info, "Write build info to field 'build_info' of de= bug kinfo."); + +static int register_kinfo_region(const struct kmemdump_backend *be, + enum kmemdump_uid id, void *vaddr, size_t size) +{ + struct debug_kinfo *kinfo =3D be_to_kinfo(be); + struct kernel_all_info *all_info =3D kinfo->all_info_addr; + struct kernel_info *info =3D &all_info->info; + struct uts_namespace *uts; + + switch (id) { + case KMEMDUMP_ID_COREIMAGE__sinittext: + info->_sinittext_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE__einittext: + info->_einittext_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE__end: + info->_end_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE__text: + info->_text_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE__stext: + info->_stext_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE__etext: + info->_etext_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_num_syms: + info->num_syms =3D *(__u32 *)vaddr; + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_relative_base: + info->_relative_pa =3D (u64)__pa(*(u64 *)vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_offsets: + info->_offsets_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_names: + info->_names_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_token_table: + info->_token_table_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_token_index: + info->_token_index_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_markers: + info->_markers_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_kallsyms_seqs_of_names: + info->_seqs_of_names_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_swapper_pg_dir: + info->swapper_pg_dir_pa =3D (u64)__pa(vaddr); + break; + case KMEMDUMP_ID_COREIMAGE_init_uts_ns: + uts =3D vaddr; + strscpy(info->last_uts_release, uts->name.release, __NEW_UTS_LEN); + break; + default: + break; + }; + + update_kernel_all_info(all_info); + return 0; +} + +static int unregister_kinfo_region(const struct kmemdump_backend *be, + enum kmemdump_uid id) +{ + return 0; +} + +static int debug_kinfo_probe(struct platform_device *pdev) +{ + struct device_node *mem_region; + struct reserved_mem *rmem; + struct kernel_info *info; + struct kernel_all_info *all_info; + + mem_region =3D of_parse_phandle(pdev->dev.of_node, "memory-region", 0); + if (!mem_region) { + dev_warn(&pdev->dev, "no such memory-region\n"); + return -ENODEV; + } + + rmem =3D of_reserved_mem_lookup(mem_region); + if (!rmem) { + dev_warn(&pdev->dev, "no such reserved mem of node name %s\n", + pdev->dev.of_node->name); + return -ENODEV; + } + + /* Need to wait for reserved memory to be mapped */ + if (!rmem->priv) + return -EPROBE_DEFER; + + if (!rmem->base || !rmem->size) { + dev_warn(&pdev->dev, "unexpected reserved memory\n"); + return -EINVAL; + } + + if (rmem->size < sizeof(struct kernel_all_info)) { + dev_warn(&pdev->dev, "unexpected reserved memory size\n"); + return -EINVAL; + } + + kinfo =3D kzalloc(sizeof(*kinfo), GFP_KERNEL); + if (!kinfo) + return -ENOMEM; + + kinfo->dev =3D &pdev->dev; + + strscpy(kinfo->kinfo_be.name, "debug_kinfo"); + kinfo->kinfo_be.register_region =3D register_kinfo_region; + kinfo->kinfo_be.unregister_region =3D unregister_kinfo_region; + kinfo->all_info_addr =3D rmem->priv; + kinfo->all_info_size =3D rmem->size; + + all_info =3D kinfo->all_info_addr; + + memset(all_info, 0, sizeof(struct kernel_all_info)); + info =3D &all_info->info; + info->enabled_all =3D IS_ENABLED(CONFIG_KALLSYMS_ALL); + info->enabled_absolute_percpu =3D IS_ENABLED(CONFIG_KALLSYMS_ABSOLUTE_PER= CPU); + info->enabled_base_relative =3D IS_ENABLED(CONFIG_KALLSYMS_BASE_RELATIVE); + info->enabled_cfi_clang =3D IS_ENABLED(CONFIG_CFI_CLANG); + info->name_len =3D KSYM_NAME_LEN; + info->bit_per_long =3D BITS_PER_LONG; + info->module_name_len =3D MODULE_NAME_LEN; + info->symbol_len =3D KSYM_SYMBOL_LEN; + info->thread_size =3D THREAD_SIZE; + info->enabled_modules_tree_lookup =3D IS_ENABLED(CONFIG_MODULES_TREE_LOOK= UP); + info->mod_mem_offset =3D offsetof(struct module, mem); + info->mod_kallsyms_offset =3D offsetof(struct module, kallsyms); + + return kmemdump_register_backend(&kinfo->kinfo_be); +} + +static void debug_kinfo_remove(struct platform_device *pdev) +{ + kfree(kinfo); + kmemdump_unregister_backend(&kinfo->kinfo_be); +} + +static const struct of_device_id debug_kinfo_of_match[] =3D { + { .compatible =3D "google,debug-kinfo" }, + {}, +}; +MODULE_DEVICE_TABLE(of, debug_kinfo_of_match); + +static struct platform_driver debug_kinfo_driver =3D { + .probe =3D debug_kinfo_probe, + .remove =3D debug_kinfo_remove, + .driver =3D { + .name =3D "debug-kinfo", + .of_match_table =3D of_match_ptr(debug_kinfo_of_match), + }, +}; +module_platform_driver(debug_kinfo_driver); + +MODULE_AUTHOR("Eugen Hristev "); +MODULE_AUTHOR("Jone Chou "); +MODULE_DESCRIPTION("kmemdump Kinfo Driver"); +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Thu Oct 2 18:17:41 2025 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB595317708 for ; Fri, 12 Sep 2025 15:11:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689876; cv=none; b=ZTEdqZLYW3ibibKQATkteG9uyS8Jt2fItG03A9FSaTe9MJ7DHSXntGef47NF9rbwblyYb3qp3gTwVga/Kqf+Y14YMs5FMWf5JnmyHbm/gk7SJdVxnpNZHqnsXdgsLRFW98E8Ib2WCrTzQByQMRUU1MZp15s/4BfRNk4KOzrbzyQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757689876; c=relaxed/simple; bh=SaxLNwPjG7byVt6l+p6cg0if9w4/pkHze4tv4MutSeU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BhP4pnZIdgwam4gNKqP2TgDbZN5ikt2q0bLqGDVpsIF+rbwHx1d3nc/qjXOfP4KG6N1xYZREOinHaGy1H+VRrKi8//d6ZQD5j7Ai+HKoSy2G1NHReZ+g6sne/8knLStm51YOlhqZmf6UTmyDCrFg4Eq4kCrImmxEGWyfm5kSlKI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=VjAiS8Xg; arc=none smtp.client-ip=209.85.128.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="VjAiS8Xg" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-724b9ba77d5so20276277b3.3 for ; Fri, 12 Sep 2025 08:11:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1757689873; x=1758294673; darn=vger.kernel.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=CNs2h9oqVJ2U55pyNU2xzrbkzs9MTq1sjEL+cOU6gkc=; b=VjAiS8XgtXdzKrUmMwBmLiNbs2EgyM6GmNxbpZai9EZhieVl9fu/1Lp4nbNLwhvzQP 8wpPed/SEK5/wi4s35QCMhrNkKEf10JMs8CtILbmBESRW3ZP/etDBFt96wyMychc1chG LcNRs6mLqth8+U9L6omrCfSmW8im4VbBEmJ6MMRLry8tpYVlbhRWTxEq7LPyjHELgiw5 QRzsqRBxeqV3e8otKZ9yXyOD3u8wAynvR1NKs5e84W5emwdpMIGepeUzlrRa/PmIBtR1 ExuSg/Tt3vScbYc6rEbzRSa8Mh4Me1W17/K4p7HAaaILzo0WrdPPG/tKMKEF6/rhqLCx SX9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757689873; x=1758294673; 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=CNs2h9oqVJ2U55pyNU2xzrbkzs9MTq1sjEL+cOU6gkc=; b=fsaYmBOutJdoTKCbdPlXIoysNECFqyst0EeGhAsI2e1YxaNwznrqd/bzzqn7MvaccM Qk+OqIzIzENr1k/Hb+HG/2IfgyiE4AiE4DIEFrcfFO8HKS/pcqckv1c1s/VdPKMKR9of 95EDh+56TTauPpNunYwHXd3FomcmLGwQlVilj0J6W/A/KzSX2/oLavFYZvQLZ+xfrOAi hH9QraugrTraNULjpLr5lld/5mqgpl0q23gKjRW9ImGjdrWeUCu+BsRu2lGwNCrm0zKm T5Xw7oh3bmRK3f2ss+2pBWCaSVRGlGydpxE0ctYD5/ypQOGqPZX1mXdqci06g4pzTBGN MQjA== X-Forwarded-Encrypted: i=1; AJvYcCUgCJdhN6YbVFh+99kINLZahiFkBTQ621szfH2OwZwJkZrZvLMPkCMbb0OZgHWPMIFCadwR372f/KYkN5Q=@vger.kernel.org X-Gm-Message-State: AOJu0YwI2vYc8ZQJ1RSpXpPzoU1shpyH9UI+I1XmcqtqcWLhGMYbMRYz NEOj6B9xgpzbWvdd2NdopsKIjon5brwECv5N0TG5WitxRkgJsNX3nN7sMT+jBkzTuaA= X-Gm-Gg: ASbGncsq3V88PZybT2WStHqQ5RUglsAN/L5BnJf0X9lMl4ANasp5gDKH+gfD2DkDJ3W 5bkZwU8rlTcBnkLrnVWMrdfRwyD+p29klo0Y9eUSbAAgbVO1mQlyESwiJsE5xvKDl40tM6mgB92 t9/UyPEPHlO/lqw4D8+8r8sUUMOvX4qqbxt4XuFGn6MR66MH2KxsdkCi3r+BTLuJMzOwhWPFxGr N7/8W1gCxu51WXSzTFS13vtyKZ+UB9M4rPNUvoZiayH//LhvDMaNgywsE1yCBQTlARz0FiZdowR D8eQCzhtTxg5pYglE1wh55A7OUWxZ9lwBEOvRavi7EBtl7rIn4H7i37hAbW3zgSo9tss+7JnNsn N+iDplYUVJ8aluGRMbpwvM5N4BzeOm/4TkA== X-Google-Smtp-Source: AGHT+IEpiP8vlE6JAkelU9ryV0aqgK+NNUoCmR9E9pT/XsbUls6aw+6SDhLPMx2e7d1wIx+kCxhExw== X-Received: by 2002:a05:690c:4a0a:b0:71c:1754:2696 with SMTP id 00721157ae682-730659ba7ecmr33141997b3.36.1757689872581; Fri, 12 Sep 2025 08:11:12 -0700 (PDT) Received: from eugen-station.. ([145.224.119.89]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-624841586c1sm1302244d50.6.2025.09.12.08.11.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Sep 2025 08:11:12 -0700 (PDT) From: Eugen Hristev To: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, andersson@kernel.org, pmladek@suse.com, rdunlap@infradead.org, corbet@lwn.net, david@redhat.com, mhocko@suse.com Cc: tudor.ambarus@linaro.org, mukesh.ojha@oss.qualcomm.com, linux-arm-kernel@lists.infradead.org, linux-hardening@vger.kernel.org, jonechou@google.com, rostedt@goodmis.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, Eugen Hristev Subject: [RFC][PATCH v3 16/16] dt-bindings: Add Google Kinfo Date: Fri, 12 Sep 2025 18:08:55 +0300 Message-ID: <20250912150855.2901211-17-eugen.hristev@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250912150855.2901211-1-eugen.hristev@linaro.org> References: <20250912150855.2901211-1-eugen.hristev@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add documentation for Google Kinfo kmemdump backend driver. Signed-off-by: Eugen Hristev --- .../bindings/misc/google,kinfo.yaml | 36 +++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 37 insertions(+) create mode 100644 Documentation/devicetree/bindings/misc/google,kinfo.yaml diff --git a/Documentation/devicetree/bindings/misc/google,kinfo.yaml b/Doc= umentation/devicetree/bindings/misc/google,kinfo.yaml new file mode 100644 index 000000000000..b1e4fac43586 --- /dev/null +++ b/Documentation/devicetree/bindings/misc/google,kinfo.yaml @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/misc/google,kinfo.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Google Pixel Kinfo debug driver + +maintainers: + - Eugen Hristev + +description: + The Google Pixel Kinfo debug driver uses a supplied reserved memory area + to save debugging information on the running kernel. + +properties: + compatible: + items: + - const: google,kinfo + + memory-region: + maxItems: 1 + description: Reference to the reserved-memory for the data + +required: + - compatible + - memory-region + +additionalProperties: true + +examples: + - | + debug-kinfo { + compatible =3D "google,debug-kinfo"; + memory-region =3D <&debug_kinfo_reserved>; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 65d9e5db46a9..6a846c51db04 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13821,6 +13821,7 @@ F: mm/kmemdump/kmemdump_coreimage.c KMEMDUMP KINFO BACKEND DRIVER M: Eugen Hristev S: Maintained +F: Documentation/devicetree/bindings/misc/google,kinfo.yaml F: mm/kmemdump/kinfo.c =20 KMEMDUMP QCOM MINIDUMP BACKEND DRIVER --=20 2.43.0