Skip to content

Commit

Permalink
generic: 6.6: update block nvmem patchset
Browse files Browse the repository at this point in the history
While discussions are still ongoing, update the block NVMEM provider
patchset to the level submitted upstream to allow testing and validation.

Link: https://patchwork.kernel.org/project/linux-block/list/?series=875202
Signed-off-by: Daniel Golle <[email protected]>
  • Loading branch information
dangowrt committed Aug 1, 2024
1 parent 6bb334c commit 9778174
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,42 @@
From 7f4c9c534aabe1315669e076d3fe0af0fd374cda Mon Sep 17 00:00:00 2001
From patchwork Tue Jul 30 19:25:59 2024
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Daniel Golle <[email protected]>
X-Patchwork-Id: 13747816
Date: Tue, 30 Jul 2024 20:25:59 +0100
From: Daniel Golle <[email protected]>
Date: Thu, 30 May 2024 03:13:19 +0100
Subject: [PATCH 2/9] block: partitions: populate fwnode
To: Rob Herring <[email protected]>, Krzysztof Kozlowski <[email protected]>,
Conor Dooley <[email protected]>, Jens Axboe <[email protected]>,
Daniel Golle <[email protected]>, Christian Brauner <[email protected]>,
Al Viro <[email protected]>, Li Lingfeng <[email protected]>,
Ming Lei <[email protected]>, Christian Heusel <[email protected]>,
=?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= <[email protected]>,
Felix Fietkau <[email protected]>, John Crispin <[email protected]>,
Chad Monroe <[email protected]>, Yangyu Chen <[email protected]>,
Tianling Shen <[email protected]>, Chuanhong Guo <[email protected]>,
Chen Minqiang <[email protected]>, [email protected],
[email protected], [email protected]
Subject: [PATCH v5 2/4] block: partitions: populate fwnode
Message-ID:
<3051ac090ad3b3e2f5adb6b67c923261ead729a5.1722365899.git.daniel@makrotopia.org>
References: <[email protected]>
Precedence: bulk
X-Mailing-List: [email protected]
List-Id: <linux-block.vger.kernel.org>
List-Subscribe: <mailto:[email protected]>
List-Unsubscribe: <mailto:[email protected]>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <[email protected]>

Let block partitions to be represented by a firmware node and hence
allow them to being referenced e.g. for use with blk-nvmem.
Assign matching firmware nodes to block partitions in order to allow
them to be referenced e.g. as NVMEM providers.

Signed-off-by: Daniel Golle <[email protected]>
---
block/partitions/core.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
block/partitions/core.c | 72 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)

--- a/block/partitions/core.c
+++ b/block/partitions/core.c
Expand All @@ -22,36 +49,70 @@ Signed-off-by: Daniel Golle <[email protected]>
#include "check.h"

static int (*const check_part[])(struct parsed_partitions *) = {
@@ -292,6 +294,40 @@ static ssize_t whole_disk_show(struct de
@@ -292,6 +294,74 @@ static ssize_t whole_disk_show(struct de
}
static const DEVICE_ATTR(whole_disk, 0444, whole_disk_show, NULL);

+static bool part_meta_match(const char *attr, const char *member, size_t length)
+{
+ /* check if length of attr exceeds specified maximum length */
+ if (strnlen(attr, length) == length)
+ return false;
+
+ /* return true if strings match */
+ return !strncmp(attr, member, length);
+}
+
+static struct fwnode_handle *find_partition_fwnode(struct block_device *bdev)
+{
+ struct fwnode_handle *fw_parts, *fw_part;
+ struct device *ddev = disk_to_dev(bdev->bd_disk);
+ const char *partname, *uuid;
+ u32 partno;
+ bool got_uuid, got_partname, got_partno;
+
+ fw_parts = device_get_named_child_node(ddev, "partitions");
+ if (!fw_parts)
+ return NULL;
+
+ fwnode_for_each_child_node(fw_parts, fw_part) {
+ if (!fwnode_property_read_string(fw_part, "uuid", &uuid) &&
+ (!bdev->bd_meta_info || strncmp(uuid,
+ bdev->bd_meta_info->uuid,
+ PARTITION_META_INFO_UUIDLTH)))
+ got_uuid = false;
+ got_partname = false;
+ got_partno = false;
+ /*
+ * In case 'uuid' is defined in the partitions firmware node
+ * require partition meta info being present and the specified
+ * uuid to match.
+ */
+ got_uuid = !fwnode_property_read_string(fw_part, "uuid", &uuid);
+ if (got_uuid && (!bdev->bd_meta_info ||
+ !part_meta_match(uuid, bdev->bd_meta_info->uuid,
+ PARTITION_META_INFO_UUIDLTH)))
+ continue;
+
+ /*
+ * In case 'partname' is defined in the partitions firmware node
+ * require partition meta info being present and the specified
+ * volname to match.
+ */
+ got_partname = !fwnode_property_read_string(fw_part, "partname",
+ &partname);
+ if (got_partname && (!bdev->bd_meta_info ||
+ !part_meta_match(partname,
+ bdev->bd_meta_info->volname,
+ PARTITION_META_INFO_VOLNAMELTH)))
+ continue;
+
+ if (!fwnode_property_read_string(fw_part, "partname", &partname) &&
+ (!bdev->bd_meta_info || strncmp(partname,
+ bdev->bd_meta_info->volname,
+ PARTITION_META_INFO_VOLNAMELTH)))
+ /*
+ * In case 'partno' is defined in the partitions firmware node
+ * the specified partno needs to match.
+ */
+ got_partno = !fwnode_property_read_u32(fw_part, "partno", &partno);
+ if (got_partno && bdev->bd_partno != partno)
+ continue;
+
+ if (!fwnode_property_read_u32(fw_part, "partno", &partno) &&
+ bdev->bd_partno != partno)
+ /* Skip if no matching criteria is present in firmware node */
+ if (!got_uuid && !got_partname && !got_partno)
+ continue;
+
+ return fw_part;
Expand All @@ -63,7 +124,7 @@ Signed-off-by: Daniel Golle <[email protected]>
/*
* Must be called either with open_mutex held, before a disk can be opened or
* after all disk users are gone.
@@ -374,6 +410,8 @@ static struct block_device *add_partitio
@@ -374,6 +444,8 @@ static struct block_device *add_partitio
goto out_put;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,34 @@
From e07ace307ce598847074a096f408bec0e3a392ed Mon Sep 17 00:00:00 2001
From patchwork Tue Jul 30 19:26:42 2024
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Daniel Golle <[email protected]>
X-Patchwork-Id: 13747817
Date: Tue, 30 Jul 2024 20:26:42 +0100
From: Daniel Golle <[email protected]>
Date: Thu, 30 May 2024 03:14:34 +0100
Subject: [PATCH 3/9] block: add support for notifications
To: Rob Herring <[email protected]>, Krzysztof Kozlowski <[email protected]>,
Conor Dooley <[email protected]>, Jens Axboe <[email protected]>,
Daniel Golle <[email protected]>, Christian Brauner <[email protected]>,
Al Viro <[email protected]>, Li Lingfeng <[email protected]>,
Ming Lei <[email protected]>, Christian Heusel <[email protected]>,
=?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= <[email protected]>,
Felix Fietkau <[email protected]>, John Crispin <[email protected]>,
Chad Monroe <[email protected]>, Yangyu Chen <[email protected]>,
Tianling Shen <[email protected]>, Chuanhong Guo <[email protected]>,
Chen Minqiang <[email protected]>, [email protected],
[email protected], [email protected]
Subject: [PATCH v5 3/4] block: add support for notifications
Message-ID:
<ca0022886e8f211a323a716653a1396a3bc91653.1722365899.git.daniel@makrotopia.org>
References: <[email protected]>
Precedence: bulk
X-Mailing-List: [email protected]
List-Id: <linux-block.vger.kernel.org>
List-Subscribe: <mailto:[email protected]>
List-Unsubscribe: <mailto:[email protected]>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <[email protected]>

Add notifier block to notify other subsystems about the addition or
removal of block devices.
Expand All @@ -10,9 +37,9 @@ Signed-off-by: Daniel Golle <[email protected]>
---
block/Kconfig | 6 +++
block/Makefile | 1 +
block/blk-notify.c | 88 ++++++++++++++++++++++++++++++++++++++++++
include/linux/blkdev.h | 8 ++++
4 files changed, 103 insertions(+)
block/blk-notify.c | 87 ++++++++++++++++++++++++++++++++++++++++++
include/linux/blkdev.h | 11 ++++++
4 files changed, 105 insertions(+)
create mode 100644 block/blk-notify.c

--- a/block/Kconfig
Expand All @@ -39,7 +66,7 @@ Signed-off-by: Daniel Golle <[email protected]>
+obj-$(CONFIG_BLOCK_NOTIFIERS) += blk-notify.o
--- /dev/null
+++ b/block/blk-notify.c
@@ -0,0 +1,88 @@
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Notifiers for addition and removal of block devices
Expand Down Expand Up @@ -97,7 +124,6 @@ Signed-off-by: Daniel Golle <[email protected]>
+ list_add_tail(&new_blkdev->list, &blk_devices);
+ raw_notifier_call_chain(&blk_notifier_list, BLK_DEVICE_ADD, dev);
+ mutex_unlock(&blk_notifier_lock);
+
+ return 0;
+}
+
Expand Down Expand Up @@ -130,16 +156,19 @@ Signed-off-by: Daniel Golle <[email protected]>
+device_initcall(blk_notifications_init);
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1564,4 +1564,12 @@ struct io_comp_batch {
@@ -1564,4 +1564,15 @@ struct io_comp_batch {

#define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { }

+
+#ifdef CONFIG_BLOCK_NOTIFIERS
+#define BLK_DEVICE_ADD 1
+#define BLK_DEVICE_REMOVE 2
+#if defined(CONFIG_BLOCK_NOTIFIERS)
+void blk_register_notify(struct notifier_block *nb);
+void blk_unregister_notify(struct notifier_block *nb);
+#else
+static inline void blk_register_notify(struct notifier_block *nb) { };
+static inline void blk_unregister_notify(struct notifier_block *nb) { };
+#endif
+
#endif /* _LINUX_BLKDEV_H */
Original file line number Diff line number Diff line change
@@ -1,7 +1,34 @@
From f4487fa1cb7e55b3c17a33f41b9c9d66f4f853b7 Mon Sep 17 00:00:00 2001
From patchwork Tue Jul 30 19:27:07 2024
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Daniel Golle <[email protected]>
X-Patchwork-Id: 13747818
Date: Tue, 30 Jul 2024 20:27:07 +0100
From: Daniel Golle <[email protected]>
Date: Thu, 30 May 2024 03:14:49 +0100
Subject: [PATCH 4/9] block: add new genhd flag GENHD_FL_NVMEM
To: Rob Herring <[email protected]>, Krzysztof Kozlowski <[email protected]>,
Conor Dooley <[email protected]>, Jens Axboe <[email protected]>,
Daniel Golle <[email protected]>, Christian Brauner <[email protected]>,
Al Viro <[email protected]>, Li Lingfeng <[email protected]>,
Ming Lei <[email protected]>, Christian Heusel <[email protected]>,
=?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= <[email protected]>,
Felix Fietkau <[email protected]>, John Crispin <[email protected]>,
Chad Monroe <[email protected]>, Yangyu Chen <[email protected]>,
Tianling Shen <[email protected]>, Chuanhong Guo <[email protected]>,
Chen Minqiang <[email protected]>, [email protected],
[email protected], [email protected]
Subject: [PATCH v5 4/4] block: add new genhd flag GENHD_FL_NVMEM
Message-ID:
<311ea569c23ce14e2896cd3b069dc494c58c49c2.1722365899.git.daniel@makrotopia.org>
References: <[email protected]>
Precedence: bulk
X-Mailing-List: [email protected]
List-Id: <linux-block.vger.kernel.org>
List-Subscribe: <mailto:[email protected]>
List-Unsubscribe: <mailto:[email protected]>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <[email protected]>

Add new flag to destinguish block devices which may act as an NVMEM
provider.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Subject: [PATCH] kernel: add block fit partition parser
#ifdef CONFIG_SGI_PARTITION
sgi_partition,
#endif
@@ -430,6 +436,11 @@ static struct block_device *add_partitio
@@ -462,6 +468,11 @@ static struct block_device *add_partitio
goto out_del;
}

Expand All @@ -104,7 +104,7 @@ Subject: [PATCH] kernel: add block fit partition parser
/* everything is up and running, commence */
err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL);
if (err)
@@ -622,6 +633,11 @@ static bool blk_add_partition(struct gen
@@ -654,6 +665,11 @@ static bool blk_add_partition(struct gen
(state->parts[p].flags & ADDPART_FLAG_RAID))
md_autodetect_dev(part->bd_dev);

Expand Down

0 comments on commit 9778174

Please sign in to comment.