pstore/ram: Move internal definitions out of kernel-wide include
authorKees Cook <keescook@chromium.org>
Tue, 11 Oct 2022 20:01:10 +0000 (13:01 -0700)
committerKees Cook <keescook@chromium.org>
Mon, 17 Oct 2022 20:14:32 +0000 (13:14 -0700)
Most of the details of the ram backend are entirely internal to the
backend itself. Leave only what is needed to instantiate a ram backend
in the kernel-wide header.

Cc: Anton Vorontsov <anton@enomsg.org>
Cc: Colin Cross <ccross@android.com>
Cc: Tony Luck <tony.luck@intel.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-and-tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
Link: https://lore.kernel.org/r/20221011200112.731334-4-keescook@chromium.org
fs/pstore/ram.c
fs/pstore/ram_core.c
fs/pstore/ram_internal.h [new file with mode: 0644]
include/linux/pstore_ram.h

index 2f18563..f5bf360 100644 (file)
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/compiler.h>
-#include <linux/pstore_ram.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+
 #include "internal.h"
+#include "ram_internal.h"
 
 #define RAMOOPS_KERNMSG_HDR "===="
 #define MIN_MEM_SIZE 4096UL
index a89e337..9e1047f 100644 (file)
 #include <linux/kernel.h>
 #include <linux/list.h>
 #include <linux/memblock.h>
-#include <linux/pstore_ram.h>
 #include <linux/rslib.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
 #include <linux/vmalloc.h>
 #include <asm/page.h>
 
+#include "ram_internal.h"
+
 /**
  * struct persistent_ram_buffer - persistent circular RAM buffer
  *
diff --git a/fs/pstore/ram_internal.h b/fs/pstore/ram_internal.h
new file mode 100644 (file)
index 0000000..440ee7a
--- /dev/null
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2010 Marco Stornelli <marco.stornelli@gmail.com>
+ * Copyright (C) 2011 Kees Cook <keescook@chromium.org>
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/pstore_ram.h>
+
+/*
+ * Choose whether access to the RAM zone requires locking or not.  If a zone
+ * can be written to from different CPUs like with ftrace for example, then
+ * PRZ_FLAG_NO_LOCK is used. For all other cases, locking is required.
+ */
+#define PRZ_FLAG_NO_LOCK       BIT(0)
+/*
+ * If a PRZ should only have a single-boot lifetime, this marks it as
+ * getting wiped after its contents get copied out after boot.
+ */
+#define PRZ_FLAG_ZAP_OLD       BIT(1)
+
+/**
+ * struct persistent_ram_zone - Details of a persistent RAM zone (PRZ)
+ *                              used as a pstore backend
+ *
+ * @paddr:     physical address of the mapped RAM area
+ * @size:      size of mapping
+ * @label:     unique name of this PRZ
+ * @type:      frontend type for this PRZ
+ * @flags:     holds PRZ_FLAGS_* bits
+ *
+ * @buffer_lock:
+ *     locks access to @buffer "size" bytes and "start" offset
+ * @buffer:
+ *     pointer to actual RAM area managed by this PRZ
+ * @buffer_size:
+ *     bytes in @buffer->data (not including any trailing ECC bytes)
+ *
+ * @par_buffer:
+ *     pointer into @buffer->data containing ECC bytes for @buffer->data
+ * @par_header:
+ *     pointer into @buffer->data containing ECC bytes for @buffer header
+ *     (i.e. all fields up to @data)
+ * @rs_decoder:
+ *     RSLIB instance for doing ECC calculations
+ * @corrected_bytes:
+ *     ECC corrected bytes accounting since boot
+ * @bad_blocks:
+ *     ECC uncorrectable bytes accounting since boot
+ * @ecc_info:
+ *     ECC configuration details
+ *
+ * @old_log:
+ *     saved copy of @buffer->data prior to most recent wipe
+ * @old_log_size:
+ *     bytes contained in @old_log
+ *
+ */
+struct persistent_ram_zone {
+       phys_addr_t paddr;
+       size_t size;
+       void *vaddr;
+       char *label;
+       enum pstore_type_id type;
+       u32 flags;
+
+       raw_spinlock_t buffer_lock;
+       struct persistent_ram_buffer *buffer;
+       size_t buffer_size;
+
+       char *par_buffer;
+       char *par_header;
+       struct rs_control *rs_decoder;
+       int corrected_bytes;
+       int bad_blocks;
+       struct persistent_ram_ecc_info ecc_info;
+
+       char *old_log;
+       size_t old_log_size;
+};
+
+struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
+                       u32 sig, struct persistent_ram_ecc_info *ecc_info,
+                       unsigned int memtype, u32 flags, char *label);
+void persistent_ram_free(struct persistent_ram_zone *prz);
+void persistent_ram_zap(struct persistent_ram_zone *prz);
+
+int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
+                        unsigned int count);
+int persistent_ram_write_user(struct persistent_ram_zone *prz,
+                             const void __user *s, unsigned int count);
+
+void persistent_ram_save_old(struct persistent_ram_zone *prz);
+size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
+void *persistent_ram_old(struct persistent_ram_zone *prz);
+void persistent_ram_free_old(struct persistent_ram_zone *prz);
+ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
+       char *str, size_t len);
index 9f16afe..9d65ff9 100644 (file)
@@ -8,28 +8,7 @@
 #ifndef __LINUX_PSTORE_RAM_H__
 #define __LINUX_PSTORE_RAM_H__
 
-#include <linux/compiler.h>
-#include <linux/device.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/list.h>
 #include <linux/pstore.h>
-#include <linux/types.h>
-
-/*
- * Choose whether access to the RAM zone requires locking or not.  If a zone
- * can be written to from different CPUs like with ftrace for example, then
- * PRZ_FLAG_NO_LOCK is used. For all other cases, locking is required.
- */
-#define PRZ_FLAG_NO_LOCK       BIT(0)
-/*
- * If a PRZ should only have a single-boot lifetime, this marks it as
- * getting wiped after its contents get copied out after boot.
- */
-#define PRZ_FLAG_ZAP_OLD       BIT(1)
-
-struct persistent_ram_buffer;
-struct rs_control;
 
 struct persistent_ram_ecc_info {
        int block_size;
@@ -39,84 +18,6 @@ struct persistent_ram_ecc_info {
        uint16_t *par;
 };
 
-/**
- * struct persistent_ram_zone - Details of a persistent RAM zone (PRZ)
- *                              used as a pstore backend
- *
- * @paddr:     physical address of the mapped RAM area
- * @size:      size of mapping
- * @label:     unique name of this PRZ
- * @type:      frontend type for this PRZ
- * @flags:     holds PRZ_FLAGS_* bits
- *
- * @buffer_lock:
- *     locks access to @buffer "size" bytes and "start" offset
- * @buffer:
- *     pointer to actual RAM area managed by this PRZ
- * @buffer_size:
- *     bytes in @buffer->data (not including any trailing ECC bytes)
- *
- * @par_buffer:
- *     pointer into @buffer->data containing ECC bytes for @buffer->data
- * @par_header:
- *     pointer into @buffer->data containing ECC bytes for @buffer header
- *     (i.e. all fields up to @data)
- * @rs_decoder:
- *     RSLIB instance for doing ECC calculations
- * @corrected_bytes:
- *     ECC corrected bytes accounting since boot
- * @bad_blocks:
- *     ECC uncorrectable bytes accounting since boot
- * @ecc_info:
- *     ECC configuration details
- *
- * @old_log:
- *     saved copy of @buffer->data prior to most recent wipe
- * @old_log_size:
- *     bytes contained in @old_log
- *
- */
-struct persistent_ram_zone {
-       phys_addr_t paddr;
-       size_t size;
-       void *vaddr;
-       char *label;
-       enum pstore_type_id type;
-       u32 flags;
-
-       raw_spinlock_t buffer_lock;
-       struct persistent_ram_buffer *buffer;
-       size_t buffer_size;
-
-       char *par_buffer;
-       char *par_header;
-       struct rs_control *rs_decoder;
-       int corrected_bytes;
-       int bad_blocks;
-       struct persistent_ram_ecc_info ecc_info;
-
-       char *old_log;
-       size_t old_log_size;
-};
-
-struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size,
-                       u32 sig, struct persistent_ram_ecc_info *ecc_info,
-                       unsigned int memtype, u32 flags, char *label);
-void persistent_ram_free(struct persistent_ram_zone *prz);
-void persistent_ram_zap(struct persistent_ram_zone *prz);
-
-int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
-                        unsigned int count);
-int persistent_ram_write_user(struct persistent_ram_zone *prz,
-                             const void __user *s, unsigned int count);
-
-void persistent_ram_save_old(struct persistent_ram_zone *prz);
-size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
-void *persistent_ram_old(struct persistent_ram_zone *prz);
-void persistent_ram_free_old(struct persistent_ram_zone *prz);
-ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
-       char *str, size_t len);
-
 /*
  * Ramoops platform data
  * @mem_size   memory size for ramoops