> Date: Wed, 09 Jan 2019 17:25:12 +0900 (JST) > From: YASUOKA Masahiko <yasu...@openbsd.org> > > On Wed, 09 Jan 2019 16:47:32 +0900 (JST) > YASUOKA Masahiko <yasu...@openbsd.org> wrote: > > The diff makes it can boot from paritions other than "a". > > Let me explain the diff. > > > Index: sys/arch/arm64/arm64/autoconf.c > > =================================================================== > > RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/arm64/autoconf.c,v > > retrieving revision 1.9 > > diff -u -p -r1.9 autoconf.c > > --- sys/arch/arm64/arm64/autoconf.c 6 Feb 2018 20:35:21 -0000 1.9 > > +++ sys/arch/arm64/arm64/autoconf.c 4 Jan 2019 13:40:58 -0000 > > @@ -19,6 +19,7 @@ > > #include <sys/systm.h> > > #include <sys/conf.h> > > #include <sys/device.h> > > +#include <sys/disklabel.h> > > #include <sys/reboot.h> > > #include <sys/socket.h> > > #include <sys/hibernate.h> > > @@ -68,7 +69,8 @@ diskconf(void) > > { > > size_t len; > > char *p; > > - dev_t tmpdev; > > + dev_t tmpdev = NODEV; > > + int part = 0; > > extern uint8_t *bootmac; > > > > if (*boot_file != '\0') > > @@ -82,6 +84,8 @@ diskconf(void) > > else > > len = strlen(boot_file); > > bootdv = parsedisk(boot_file, len, 0, &tmpdev); > > + if (tmpdev != NODEV) > > + part = DISKPART(tmpdev); > > } > > > > parsedisk() parses the parition part. The diff is to keep it. > > > #if defined(NFSCLIENT) > > @@ -105,7 +109,7 @@ diskconf(void) > > else > > printf("boot device: lookup %s failed \n", boot_file); > > > > - setroot(bootdv, 0, RB_USERREQ); > > + setroot(bootdv, part, RB_USERREQ); > > dumpconf(); > > > > #ifdef HIBERNATE > > Previously 0 ("a" partition) is passed to setroot() always. > By the diff, the partition kept above will be passed to setroot(). > > Then the kernel will use the partition specified by the bootargs for > the default root. > > > Index: sys/arch/arm64/stand/efiboot/efidev.c > > =================================================================== > > RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/stand/efiboot/efidev.c,v > > retrieving revision 1.2 > > diff -u -p -r1.2 efidev.c > > --- sys/arch/arm64/stand/efiboot/efidev.c 25 Aug 2018 20:43:39 -0000 > > 1.2 > > +++ sys/arch/arm64/stand/efiboot/efidev.c 4 Jan 2019 13:40:58 -0000 > > @@ -484,7 +484,7 @@ efiopen(struct open_file *f, ...) > > part = va_arg(ap, u_int); > > va_end(ap); > > > > - if (unit != 0) > > + if (unit != 0 || MAXPARTITIONS <= part) > > return (ENXIO);
Can you make that "part >= MAXPARTITIONS". Easier to understand for my brain! > > > > diskinfo.ed.blkio = disk; > > @@ -512,7 +512,7 @@ efistrategy(void *devdata, int rw, daddr > > > > nsect = (size + DEV_BSIZE - 1) / DEV_BSIZE; > > blk += DL_SECTOBLK(&dip->disklabel, > > - dip->disklabel.d_partitions[B_PARTITION(dip->sc_part)].p_offset); > > + dip->disklabel.d_partitions[dip->sc_part].p_offset); > > > > if (blk < 0) > > error = EINVAL; > > Second chunk is to fix a misuse of B_PARTITION(). B_PARTITION()'s > argument must be a "boot-style device number". dip->sc_part is usable > just as it is. First chunk is to check the value more strict since > it's used just as it is. > > > Index: sys/arch/arm64/stand/efiboot/exec.c > > =================================================================== > > RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/stand/efiboot/exec.c,v > > retrieving revision 1.5 > > diff -u -p -r1.5 exec.c > > --- sys/arch/arm64/stand/efiboot/exec.c 8 Feb 2017 09:18:24 -0000 > > 1.5 > > +++ sys/arch/arm64/stand/efiboot/exec.c 4 Jan 2019 13:40:58 -0000 > > @@ -94,7 +94,7 @@ run_loadfile(u_long *marks, int howto) > > char *cp; > > void *fdt; > > > > - snprintf(args, sizeof(args) - 8, "%s:%s", cmd.bootdev, cmd.image); > > + strlcpy(args, cmd.path, sizeof(args)); > > cp = args + strlen(args); > > > > *cp++ = ' '; > > cmd.bootdev is the "device" variable and cmd.image is the "image" > variable of boot(8). They are used as defaults, but if a kernel is > specified as an argument for "boot" command, they are not used. > cmd.path is the real path that is used for loading a kernel. The diff > is to use it as the bootargs as it is. Thanks for the explanation. ok kettenis@ with the change suggested above.