
On Mon, Oct 04, 2021 at 09:40:21PM +0300, Ilias Apalodimas wrote:
Hi Akashi-san,
[...]
+int blk_create_partitions(struct udevice *parent) +{
- int part, count;
- struct blk_desc *desc = dev_get_uclass_plat(parent);
- struct disk_partition info;
- struct disk_part *part_data;
- char devname[32];
- struct udevice *dev;
- int ret;
- if (!CONFIG_IS_ENABLED(PARTITIONS) ||
!CONFIG_IS_ENABLED(HAVE_BLOCK_DEVICE))
return 0;
Would it make more sense to return an error here?
!CONFIG_IS_ENABLED(PARTITIONS) means that a user doesn't want to use partitions on their system. So simply returning 0 would be fine, I think. This is kinda equivalence at the caller site:
if (CONFIG_IS_ENABLED(PARTITIONS) && CONFIG_IS_ENABLED(HAVE_BLOCK_DEVICE)) ret = blk_create_partitions(dev); else debug("We don't care about partitions.");
- /* Add devices for each partition */
- for (count = 0, part = 1; part <= MAX_SEARCH_PARTITIONS; part++) {
if (part_get_info(desc, part, &info))
continue;
snprintf(devname, sizeof(devname), "%s:%d", parent->name,
part);
ret = device_bind_driver(parent, "blk_partition",
strdup(devname), &dev);
if (ret)
return ret;
part_data = dev_get_uclass_plat(dev);
part_data->partnum = part;
part_data->gpt_part_info = info;
count++;
device_probe(dev);
Probe can fail.
Theoretically, yes. But as a matter of fact, device_probe() does almost nothing for UCLASS_PARTITION devices under the proposed implementation here and I don't expect it will ever fail. Please note that, as I commented in blk_part_post_probe(), we may want to call blk_create_partitions() in the future so that we will support "nested" partitioning in a partition :)
-Takahiro Akashi
- }
- debug("%s: %d partitions found in %s\n", __func__, count, parent->name);
- return 0;
+}
static int blk_post_probe(struct udevice *dev) { if (IS_ENABLED(CONFIG_PARTITIONS) && @@ -713,3 +752,75 @@ UCLASS_DRIVER(blk) = { .post_probe = blk_post_probe, .per_device_plat_auto = sizeof(struct blk_desc), };
[...]
Regards /Ilias