Module Name: src Committed By: martin Date: Sat Oct 10 19:42:19 UTC 2020
Modified Files: src/usr.sbin/sysinst: label.c part_edit.c src/usr.sbin/sysinst/arch/i386: md.c Log Message: Remove more pm->ptstart abuse - calculate values localy where needed instead. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/usr.sbin/sysinst/label.c cvs rdiff -u -r1.20 -r1.21 src/usr.sbin/sysinst/part_edit.c cvs rdiff -u -r1.30 -r1.31 src/usr.sbin/sysinst/arch/i386/md.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/sysinst/label.c diff -u src/usr.sbin/sysinst/label.c:1.27 src/usr.sbin/sysinst/label.c:1.28 --- src/usr.sbin/sysinst/label.c:1.27 Fri Oct 9 18:33:00 2020 +++ src/usr.sbin/sysinst/label.c Sat Oct 10 19:42:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: label.c,v 1.27 2020/10/09 18:33:00 martin Exp $ */ +/* $NetBSD: label.c,v 1.28 2020/10/10 19:42:19 martin Exp $ */ /* * Copyright 1997 Jonathan Stone @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: label.c,v 1.27 2020/10/09 18:33:00 martin Exp $"); +__RCSID("$NetBSD: label.c,v 1.28 2020/10/10 19:42:19 martin Exp $"); #endif #include <sys/types.h> @@ -187,11 +187,10 @@ verify_parts(struct partition_usage_set struct part_usage_info *wanted; struct disk_partitions *parts; size_t i, num_root; - daddr_t first_bsdstart, first_bsdsize, inst_start, inst_size; + daddr_t first_bsdstart, inst_start; int rv; first_bsdstart = inst_start = -1; - first_bsdsize = inst_size = 0; num_root = 0; parts = pset->parts; for (i = 0; i < pset->num; i++) { @@ -209,12 +208,10 @@ verify_parts(struct partition_usage_set if (first_bsdstart <= 0) { first_bsdstart = wanted->cur_start; - first_bsdsize = wanted->size; } if (inst_start < 0 && (wanted->cur_flags & PTI_INSTALL_TARGET)) { inst_start = wanted->cur_start; - inst_size = wanted->size; } } @@ -233,21 +230,6 @@ verify_parts(struct partition_usage_set return rv; } - if (pm->ptstart == 0) { - if (inst_start > 0) { - pm->ptstart = inst_start; - pm->ptsize = inst_size; - } else if (first_bsdstart > 0) { - pm->ptstart = first_bsdstart; - pm->ptsize = first_bsdsize; - } else if (parts->pscheme->guess_install_target && - parts->pscheme->guess_install_target( - parts, &inst_start, &inst_size)) { - pm->ptstart = inst_start; - pm->ptsize = inst_size; - } - } - /* Check for overlaps */ if (checkoverlap(parts) != 0) { rv = ask_reedit(parts); Index: src/usr.sbin/sysinst/part_edit.c diff -u src/usr.sbin/sysinst/part_edit.c:1.20 src/usr.sbin/sysinst/part_edit.c:1.21 --- src/usr.sbin/sysinst/part_edit.c:1.20 Sat Oct 10 18:48:32 2020 +++ src/usr.sbin/sysinst/part_edit.c Sat Oct 10 19:42:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: part_edit.c,v 1.20 2020/10/10 18:48:32 martin Exp $ */ +/* $NetBSD: part_edit.c,v 1.21 2020/10/10 19:42:19 martin Exp $ */ /* * Copyright (c) 2019 The NetBSD Foundation, Inc. @@ -1093,10 +1093,10 @@ verify_outer_parts(struct disk_partition { part_id i; int num_bsdparts; - daddr_t first_bsdstart, first_bsdsize, inst_start, inst_size; + daddr_t first_bsdstart, inst_start, inst_size; first_bsdstart = inst_start = -1; - first_bsdsize = inst_size = 0; + inst_size = 0; num_bsdparts = 0; for (i = 0; i < parts->num_part; i++) { struct disk_part_info info; @@ -1110,7 +1110,6 @@ verify_outer_parts(struct disk_partition if (first_bsdstart < 0) { first_bsdstart = info.start; - first_bsdsize = info.size; } if (inst_start< 0 && (info.flags & PTI_INSTALL_TARGET)) { inst_start = info.start; @@ -1122,12 +1121,9 @@ verify_outer_parts(struct disk_partition (num_bsdparts > 1 && inst_start < 0)) { if (quiet && num_bsdparts == 0) return 0; - if (quiet && parts->pscheme->guess_install_target && - parts->pscheme->guess_install_target(parts, + if (!quiet || parts->pscheme->guess_install_target == NULL || + !parts->pscheme->guess_install_target(parts, &inst_start, &inst_size)) { - pm->ptstart = inst_start; - pm->ptsize = inst_size; - } else { if (num_bsdparts == 0) msg_display_subst(MSG_nobsdpart, 2, msg_string(parts->pscheme->name), @@ -1141,21 +1137,6 @@ verify_outer_parts(struct disk_partition } } - if (pm->ptstart == 0) { - if (inst_start > 0) { - pm->ptstart = inst_start; - pm->ptsize = inst_size; - } else if (first_bsdstart > 0) { - pm->ptstart = first_bsdstart; - pm->ptsize = first_bsdsize; - } else if (parts->pscheme->guess_install_target && - parts->pscheme->guess_install_target( - parts, &inst_start, &inst_size)) { - pm->ptstart = inst_start; - pm->ptsize = inst_size; - } - } - /* * post_edit_verify returns: * 0 -> abort Index: src/usr.sbin/sysinst/arch/i386/md.c diff -u src/usr.sbin/sysinst/arch/i386/md.c:1.30 src/usr.sbin/sysinst/arch/i386/md.c:1.31 --- src/usr.sbin/sysinst/arch/i386/md.c:1.30 Thu Feb 6 10:47:33 2020 +++ src/usr.sbin/sysinst/arch/i386/md.c Sat Oct 10 19:42:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: md.c,v 1.30 2020/02/06 10:47:33 martin Exp $ */ +/* $NetBSD: md.c,v 1.31 2020/10/10 19:42:19 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -65,7 +65,7 @@ static bool uefi_boot; /* prototypes */ static bool get_bios_info(const char*, struct disk_partitions*, int*, int*, int*); -static int mbr_root_above_chs(void); +static int mbr_root_above_chs(daddr_t); static int md_read_bootcode(const char *, struct mbr_sector *); static unsigned int get_bootmodel(void); @@ -462,6 +462,7 @@ md_check_mbr(struct disk_partitions *par mbr_info_t *ext; struct mbr_partition *p; const char *bootcode; + daddr_t inst_start, inst_size; int i, names, fl, ofl; #define ACTIVE_FOUND 0x0100 #define NETBSD_ACTIVE 0x0200 @@ -469,8 +470,15 @@ md_check_mbr(struct disk_partitions *par #define ACTIVE_NAMED 0x0800 root_limit = 0; + if (parts->pscheme->guess_install_target == NULL || + !parts->pscheme->guess_install_target(parts, &inst_start, + &inst_size)) { + inst_start = parts->disk_start; + inst_size = parts->disk_size; + } + if (biosdisk != NULL && (biosdisk->bi_flags & BIFLAG_EXTINT13) == 0) { - if (mbr_root_above_chs()) { + if (mbr_root_above_chs(inst_start)) { if (quiet) return 0; msg_display(MSG_partabovechs); @@ -487,7 +495,7 @@ md_check_mbr(struct disk_partitions *par } /* - * Ensure the install partition (at sector pm->ptstart) and the active + * Ensure the install partition (at sector inst_start) and the active * partition are bootable. * Determine whether the bootselect code is needed. * Note that MBR_BS_NEWMBR is always set, so we ignore it! @@ -499,14 +507,14 @@ md_check_mbr(struct disk_partitions *par for (i = 0; i < MBR_PART_COUNT; p++, i++) { if (p->mbrp_flag == MBR_PFLAG_ACTIVE) { fl |= ACTIVE_FOUND; - if (ext->sector + p->mbrp_start == pm->ptstart) + if (ext->sector + p->mbrp_start == inst_start) fl |= NETBSD_ACTIVE; } if (ext->mbrb.mbrbs_nametab[i][0] == 0) { /* No bootmenu label... */ if (ext->sector == 0) continue; - if (ext->sector + p->mbrp_start == pm->ptstart) + if (ext->sector + p->mbrp_start == inst_start) /* * Have installed into an extended ptn * force name & bootsel... @@ -517,7 +525,7 @@ md_check_mbr(struct disk_partitions *par /* Partition has a bootmenu label... */ if (ext->sector != 0) fl |= MBR_BS_EXTLBA; - if (ext->sector + p->mbrp_start == pm->ptstart) + if (ext->sector + p->mbrp_start == inst_start) fl |= NETBSD_NAMED; else if (p->mbrp_flag == MBR_PFLAG_ACTIVE) fl |= ACTIVE_NAMED; @@ -571,7 +579,7 @@ md_check_mbr(struct disk_partitions *par /* Check there is some bootcode at all... */ if (mbri->mbr.mbr_magic != htole16(MBR_MAGIC) || mbri->mbr.mbr_jmpboot[0] == 0 || - mbr_root_above_chs()) + mbr_root_above_chs(inst_start)) /* Existing won't do, force update */ fl |= MBR_BS_NEWMBR; } @@ -709,9 +717,9 @@ nogeom: } static int -mbr_root_above_chs(void) +mbr_root_above_chs(daddr_t ptstart) { - return pm->ptstart + (daddr_t)DEFROOTSIZE * (daddr_t)(MEG / 512) + return ptstart + (daddr_t)DEFROOTSIZE * (daddr_t)(MEG / 512) >= pm->max_chs; }