Message ID | 20171010025526.85329-1-jsg@jsg.id.au |
---|---|
State | Accepted |
Commit | 16a73b249d138fedeb188710533902ed7aac1ddc |
Delegated to: | Alexander Graf |
Headers | show |
Series | [U-Boot] efi_loader: search all possible disk partitions | expand |
> When searching for partitions don't stop if a partition is not present > for a given partition number as there may be valid partitions after. > > Search for up to MAX_SEARCH_PARTITIONS matching the other callers of > part_get_info(). > > This allows OpenBSD to boot via the efi_loader on rpi_3 again after > changes made after U-Boot 2017.09. With MBR partitioning OpenBSD will > by default use the fourth partition for the 0xA6 (OpenBSD) partition. > > Signed-off-by: Jonathan Gray <jsg@jsg.id.au> Thanks, applied to efi-next Alex
On Tue, Oct 10, 2017 at 10:01:46AM +0200, Alexander Graf wrote: > > When searching for partitions don't stop if a partition is not present > > for a given partition number as there may be valid partitions after. > > > > Search for up to MAX_SEARCH_PARTITIONS matching the other callers of > > part_get_info(). > > > > This allows OpenBSD to boot via the efi_loader on rpi_3 again after > > changes made after U-Boot 2017.09. With MBR partitioning OpenBSD will > > by default use the fourth partition for the 0xA6 (OpenBSD) partition. > > > > Signed-off-by: Jonathan Gray <jsg@jsg.id.au> > > Thanks, applied to efi-next > > Alex > Thanks, looking over it again I realised one of the loops is now incrementing the partition number twice per loop so I have sent a further patch to the list to correct that. From 18d6201e4e09b9e8d6bc418b23029280a29eb015 Mon Sep 17 00:00:00 2001 From: Jonathan Gray <jsg@jsg.id.au> Date: Tue, 10 Oct 2017 21:25:16 +1100 Subject: [PATCH] efi_loader: don't increment part twice per loop Correct a mistake in the part number handling of 16a73b249d138fedeb188710533902ed7aac1ddc and only increment part once per loop. Signed-off-by: Jonathan Gray <jsg@jsg.id.au> --- lib/efi_loader/efi_disk.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index 6b192701a8..e61dbc8058 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -360,7 +360,6 @@ int efi_disk_register(void) continue; efi_disk_add_dev(devname, if_typename, desc, i, 0, part); - part++; } /* ... and add block device: */
On Tue, Oct 10, 2017 at 3:55 AM, Jonathan Gray <jsg@jsg.id.au> wrote: > When searching for partitions don't stop if a partition is not present > for a given partition number as there may be valid partitions after. > > Search for up to MAX_SEARCH_PARTITIONS matching the other callers of > part_get_info(). > > This allows OpenBSD to boot via the efi_loader on rpi_3 again after > changes made after U-Boot 2017.09. With MBR partitioning OpenBSD will > by default use the fourth partition for the 0xA6 (OpenBSD) partition. > > Signed-off-by: Jonathan Gray <jsg@jsg.id.au> Tested-by: Peter Robinson <pbrobinson@gmail.com> Tested on the Pine64, fixes the issues I saw with that device. > --- > lib/efi_loader/efi_disk.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c > index 47b487aa30..6b192701a8 100644 > --- a/lib/efi_loader/efi_disk.c > +++ b/lib/efi_loader/efi_disk.c > @@ -254,18 +254,19 @@ static int efi_disk_create_eltorito(struct blk_desc *desc, > #if CONFIG_IS_ENABLED(ISO_PARTITION) > char devname[32] = { 0 }; /* dp->str is u16[32] long */ > disk_partition_t info; > - int part = 1; > + int part; > > if (desc->part_type != PART_TYPE_ISO) > return 0; > > /* and devices for each partition: */ > - while (!part_get_info(desc, part, &info)) { > + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { > + if (part_get_info(desc, part, &info)) > + continue; > snprintf(devname, sizeof(devname), "%s:%d", pdevname, > part); > efi_disk_add_dev(devname, if_typename, desc, diskid, > info.start, part); > - part++; > disks++; > } > > @@ -299,15 +300,16 @@ int efi_disk_register(void) > struct blk_desc *desc = dev_get_uclass_platdata(dev); > const char *if_typename = dev->driver->name; > disk_partition_t info; > - int part = 1; > + int part; > > printf("Scanning disk %s...\n", dev->name); > > /* add devices for each partition: */ > - while (!part_get_info(desc, part, &info)) { > + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { > + if (part_get_info(desc, part, &info)) > + continue; > efi_disk_add_dev(dev->name, if_typename, desc, > desc->devnum, 0, part); > - part++; > } > > /* ... and add block device: */ > @@ -341,7 +343,7 @@ int efi_disk_register(void) > struct blk_desc *desc; > char devname[32] = { 0 }; /* dp->str is u16[32] long */ > disk_partition_t info; > - int part = 1; > + int part; > > desc = blk_get_devnum_by_type(if_type, i); > if (!desc) > @@ -353,7 +355,9 @@ int efi_disk_register(void) > if_typename, i); > > /* add devices for each partition: */ > - while (!part_get_info(desc, part, &info)) { > + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { > + if (part_get_info(desc, part, &info)) > + continue; > efi_disk_add_dev(devname, if_typename, desc, > i, 0, part); > part++; > -- > 2.14.2 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index 47b487aa30..6b192701a8 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -254,18 +254,19 @@ static int efi_disk_create_eltorito(struct blk_desc *desc, #if CONFIG_IS_ENABLED(ISO_PARTITION) char devname[32] = { 0 }; /* dp->str is u16[32] long */ disk_partition_t info; - int part = 1; + int part; if (desc->part_type != PART_TYPE_ISO) return 0; /* and devices for each partition: */ - while (!part_get_info(desc, part, &info)) { + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { + if (part_get_info(desc, part, &info)) + continue; snprintf(devname, sizeof(devname), "%s:%d", pdevname, part); efi_disk_add_dev(devname, if_typename, desc, diskid, info.start, part); - part++; disks++; } @@ -299,15 +300,16 @@ int efi_disk_register(void) struct blk_desc *desc = dev_get_uclass_platdata(dev); const char *if_typename = dev->driver->name; disk_partition_t info; - int part = 1; + int part; printf("Scanning disk %s...\n", dev->name); /* add devices for each partition: */ - while (!part_get_info(desc, part, &info)) { + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { + if (part_get_info(desc, part, &info)) + continue; efi_disk_add_dev(dev->name, if_typename, desc, desc->devnum, 0, part); - part++; } /* ... and add block device: */ @@ -341,7 +343,7 @@ int efi_disk_register(void) struct blk_desc *desc; char devname[32] = { 0 }; /* dp->str is u16[32] long */ disk_partition_t info; - int part = 1; + int part; desc = blk_get_devnum_by_type(if_type, i); if (!desc) @@ -353,7 +355,9 @@ int efi_disk_register(void) if_typename, i); /* add devices for each partition: */ - while (!part_get_info(desc, part, &info)) { + for (part = 1; part <= MAX_SEARCH_PARTITIONS; part++) { + if (part_get_info(desc, part, &info)) + continue; efi_disk_add_dev(devname, if_typename, desc, i, 0, part); part++;
When searching for partitions don't stop if a partition is not present for a given partition number as there may be valid partitions after. Search for up to MAX_SEARCH_PARTITIONS matching the other callers of part_get_info(). This allows OpenBSD to boot via the efi_loader on rpi_3 again after changes made after U-Boot 2017.09. With MBR partitioning OpenBSD will by default use the fourth partition for the 0xA6 (OpenBSD) partition. Signed-off-by: Jonathan Gray <jsg@jsg.id.au> --- lib/efi_loader/efi_disk.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)