From owner-freebsd-sparc64@FreeBSD.ORG Mon Jun 10 00:00:01 2013 Return-Path: Delivered-To: freebsd-sparc64@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 9EDE65CC for ; Mon, 10 Jun 2013 00:00:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 91DCB1FDD for ; Mon, 10 Jun 2013 00:00:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r5A00132053705 for ; Mon, 10 Jun 2013 00:00:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r5A001br053704; Mon, 10 Jun 2013 00:00:01 GMT (envelope-from gnats) Date: Mon, 10 Jun 2013 00:00:01 GMT Message-Id: <201306100000.r5A001br053704@freefall.freebsd.org> To: freebsd-sparc64@FreeBSD.org Cc: From: dfilter@FreeBSD.ORG (dfilter service) Subject: Re: sparc64/179289: commit references a PR X-BeenThere: freebsd-sparc64@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: dfilter service List-Id: Porting FreeBSD to the Sparc List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jun 2013 00:00:01 -0000 The following reply was made to PR sparc64/179289; it has been noted by GNATS. From: dfilter@FreeBSD.ORG (dfilter service) To: bug-followup@FreeBSD.org Cc: Subject: Re: sparc64/179289: commit references a PR Date: Sun, 9 Jun 2013 23:50:38 +0000 (UTC) Author: marius Date: Sun Jun 9 23:50:30 2013 New Revision: 251589 URL: http://svnweb.freebsd.org/changeset/base/251589 Log: - The method introduced as part of r234898 for not altering the boot path when booting from ZFS turned out to also cause the boot path not being adjusted if booting from CD-ROM with firmware versions that do not employ the "cdrom" alias in that case. So shuffle the code around instead in order to achieve the original intent. Ideally, we shouldn't fiddle with the boot path when booting from UFS on a disk either; unfortunately, there doesn't seem to be an universal way of telling disks and CD-ROMs apart, though. [1] - Use NULL instead of 0 for pointers. PR: 179289 MFC after: 1 week Modified: head/sys/boot/sparc64/loader/main.c Modified: head/sys/boot/sparc64/loader/main.c ============================================================================== --- head/sys/boot/sparc64/loader/main.c Sun Jun 9 23:34:26 2013 (r251588) +++ head/sys/boot/sparc64/loader/main.c Sun Jun 9 23:50:30 2013 (r251589) @@ -160,17 +160,19 @@ struct devsw *devsw[] = { #ifdef LOADER_ZFS_SUPPORT &zfs_dev, #endif - 0 + NULL }; + struct arch_switch archsw; static struct file_format sparc64_elf = { __elfN(loadfile), __elfN(exec) }; + struct file_format *file_formats[] = { &sparc64_elf, - 0 + NULL }; struct fs_ops *file_system[] = { @@ -198,19 +200,20 @@ struct fs_ops *file_system[] = { #ifdef LOADER_TFTP_SUPPORT &tftp_fsops, #endif - 0 + NULL }; + struct netif_driver *netif_drivers[] = { #ifdef LOADER_NET_SUPPORT &ofwnet, #endif - 0 + NULL }; extern struct console ofwconsole; struct console *consoles[] = { &ofwconsole, - 0 + NULL }; #ifdef LOADER_DEBUG @@ -854,24 +857,6 @@ main(int (*openfirm)(void *)) OF_getprop(chosen, "bootpath", bootpath, sizeof(bootpath)); /* - * Sun compatible bootable CD-ROMs have a disk label placed - * before the cd9660 data, with the actual filesystem being - * in the first partition, while the other partitions contain - * pseudo disk labels with embedded boot blocks for different - * architectures, which may be followed by UFS filesystems. - * The firmware will set the boot path to the partition it - * boots from ('f' in the sun4u case), but we want the kernel - * to be loaded from the cd9660 fs ('a'), so the boot path - * needs to be altered. - */ - if (bootpath[strlen(bootpath) - 2] == ':' && - bootpath[strlen(bootpath) - 1] == 'f' && - strstr(bootpath, "cdrom") != NULL) { - bootpath[strlen(bootpath) - 1] = 'a'; - printf("Boot path set to %s\n", bootpath); - } - - /* * Initialize devices. */ for (dp = devsw; *dp != 0; dp++) @@ -883,9 +868,24 @@ main(int (*openfirm)(void *)) (void)strncpy(bootpath, zfs_fmtdev(&zfs_currdev), sizeof(bootpath) - 1); bootpath[sizeof(bootpath) - 1] = '\0'; - } + } else #endif + /* + * Sun compatible bootable CD-ROMs have a disk label placed before + * the ISO 9660 data, with the actual file system being in the first + * partition, while the other partitions contain pseudo disk labels + * with embedded boot blocks for different architectures, which may + * be followed by UFS file systems. + * The firmware will set the boot path to the partition it boots from + * ('f' in the sun4u/sun4v case), but we want the kernel to be loaded + * from the ISO 9660 file system ('a'), so the boot path needs to be + * altered. + */ + if (bootpath[strlen(bootpath) - 2] == ':' && + bootpath[strlen(bootpath) - 1] == 'f') + bootpath[strlen(bootpath) - 1] = 'a'; + env_setenv("currdev", EV_VOLATILE, bootpath, ofw_setcurrdev, env_nounset); env_setenv("loaddev", EV_VOLATILE, bootpath, _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"