From owner-freebsd-sparc64@FreeBSD.ORG Wed Dec 22 03:48:50 2004 Return-Path: Delivered-To: freebsd-sparc64@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 152AC16A4CE for ; Wed, 22 Dec 2004 03:48:50 +0000 (GMT) Received: from ns.kt-is.co.kr (ns.kt-is.co.kr [211.218.149.125]) by mx1.FreeBSD.org (Postfix) with ESMTP id 53E6443D41 for ; Wed, 22 Dec 2004 03:48:49 +0000 (GMT) (envelope-from yongari@kt-is.co.kr) Received: from michelle.kt-is.co.kr (ns2.kt-is.co.kr [220.76.118.193]) (authenticated bits=128) by ns.kt-is.co.kr (8.12.10/8.12.10) with ESMTP id iBM3gbAh048954 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 22 Dec 2004 12:42:38 +0900 (KST) Received: from michelle.kt-is.co.kr (localhost.kt-is.co.kr [127.0.0.1]) by michelle.kt-is.co.kr (8.13.1/8.13.1) with ESMTP id iBM3mkwr008512 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 22 Dec 2004 12:48:46 +0900 (KST) (envelope-from yongari@kt-is.co.kr) Received: (from yongari@localhost) by michelle.kt-is.co.kr (8.13.1/8.13.1/Submit) id iBM3mkdk008511; Wed, 22 Dec 2004 12:48:46 +0900 (KST) (envelope-from yongari@kt-is.co.kr) Date: Wed, 22 Dec 2004 12:48:46 +0900 From: Pyun YongHyeon To: "Ballance, Robert T" Message-ID: <20041222034846.GA8065@kt-is.co.kr> References: <20041221025023.GB4468@kt-is.co.kr> <200412210643.iBL6hHEK085224@smtp-relay.tamu.edu> <20041221071417.GA5301@kt-is.co.kr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041221071417.GA5301@kt-is.co.kr> User-Agent: Mutt/1.4.2.1i X-Filter-Version: 1.11a (ns.kt-is.co.kr) cc: freebsd-sparc64@freebsd.org Subject: Re: sysinstall dead in -CURRENT? X-BeenThere: freebsd-sparc64@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: yongari@kt-is.co.kr List-Id: Porting FreeBSD to the Sparc List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Dec 2004 03:48:50 -0000 On Tue, Dec 21, 2004 at 04:14:17PM +0900, To Ballance, Robert T wrote: > On Tue, Dec 21, 2004 at 06:43:17AM -0000, Ballance, Robert T wrote: > > > AFAIK, this has nothing to do with marius' zs(4) patch. > > > There is also PR72962 for the issue. > > > > > > Long ago, I made a patch for this issue. But it wasn't further > > > investigated due to lack of time. I sent a mail to one of > > > developer but got no reply. The following is the summary of > > > the mail. > > > > > > It seems that it happans on on systems with SCSI CDROM. In rev. > > > 1.90 of scsi_cd.c, phk changed to return 2k sectors when no media > > > inserted. But open_disk.c:Int_Open_Disk() just check sectorsize > > > against 0. So if we have no media in CDROM, we would bypass the > > > check and could generate division by zero exception. I guess we > > > need at least the following patch. > > > > > > It seems that there are two cases here. > > > 1. No media in CDROM -> sector = 2k, hd = 0 > > > 2. media present in CDROM -> sector = 0, hd = 0 > > > > > > --- open_disk.c.orig Mon Sep 20 11:22:10 2004 > > > +++ open_disk.c Tue Oct 26 17:45:17 2004 > > > @@ -94,6 +94,8 @@ > > > return (NULL); > > > d->sector_size = s; > > > len /= s; /* media size in number of sectors. */ > > > + if (len == 0) > > > + return (NULL); > > > > > > if (Add_Chunk(d, 0, len, name, whole, 0, 0, "-")) { > > > DPRINT(("Failed to add 'whole' chunk")); > > > @@ -123,6 +125,10 @@ > > > */ > > > o = d->bios_hd * d->bios_sect; > > > d->bios_cyl = (o != 0) ? len / o : 0; > > > + if (d->bios_cyl == 0) { > > > + /* XXX This may indicate it is not DISK. */ > > > + return (NULL); > > > + } > > > > > > p = q; > > > lo[0] = 0; > > > > > > And another one to plug memory leak. > > > > > > --- disk.c.orig Mon May 17 07:08:16 2004 > > > +++ disk.c Tue Oct 26 16:46:23 2004 > > > @@ -77,6 +77,7 @@ > > > struct disk * > > > Open_Disk(const char *name) > > > { > > > + struct disk *d; > > > char *conftxt; > > > size_t txtsize; > > > int error; > > > @@ -99,7 +100,10 @@ > > > } > > > conftxt[txtsize] = ''; /* in case kernel bug is still there */ > > > > > > - return Int_Open_Disk(name, conftxt); > > > + d = Int_Open_Disk(name, conftxt); > > > + free(conftxt); > > > + > > > + return (d); > > > } > > > > > > void > > > > > > BTW, I don't know why GEOM thinks SCSI CDROM as a disk. On systems > > > with IDE CDROM, it is not considered as a disk. So above problem > > > only happen on systems with SCSI CDROM. With above patches my U2 > > > displayed install screen successfully with/without CD mdia in CDROM. > > > > Is there anything I can do to help get this into the tree/working, and does this problem affect SCSI > > cdrom's across the board, or just with sparc64? > > > > I guess it happens only on sparc64 with SCSI CDROM. > The patch I posted would be just a work-around, not fix. Why sysinstall > thinks CDROM as a disk target would be the root cause. > > > I'm off for a good while from University, and I got access today to another Ultra2 and an Ultra60, so I > > can test more stuff if needed ;) > > > > I'd like to see real fix too. > Ok, here is a better workaround. This patch should also fix another error of sysinstall. At present, sysinstall presents SCSI CDROM to available disks in Fdisk/Label menu. It seems that the root cause is GEOM's disk handling.("kern.disk" always shows SCSI CDROM and it is used as an argument to Open_Disk()) So I added an additioanl check for CDROM in sysinstall instead of touching libdisk. Please let me know how it goes. And I'd like to know it doesn't break i386 sysinstall too. Due to lack of i386 with SCSI CDROM I couldn't verify the patch. > > -R. Tyler Ballance > > > > > --- usr.sbin/sysinstall/devices.c.orig Mon Nov 29 12:55:28 2004 +++ usr.sbin/sysinstall/devices.c Wed Dec 22 12:37:08 2004 @@ -457,6 +457,20 @@ if (!strncmp(names[i], "md", 2)) continue; + /* + * XXX + * Due to unknown reasons, Disk_Names() returns SCSI CDROM as a + * valid disk. This is main reason why sysinstall presents SCSI + * CDROM to available disks in Fdisk/Label menu. In addition, + * adding a blank SCSI CDROM to the menu generates floating point + * exception in sparc64. Disk_Names() just extracts sysctl + * "kern.disks". Why GEOM treats SCSI CDROM as a disk is beyond + * me and that should be investigated. + * For temporary workaround, ignore SCSI CDROM. + */ + if (!strncmp(names[i], "cd", 2)) + continue; + d = Open_Disk(names[i]); if (!d) { msgDebug("Unable to open disk %s\n", names[i]); -- Regards, Pyun YongHyeon http://www.kr.freebsd.org/~yongari | yongari@freebsd.org