Date: Tue, 23 Feb 2010 14:36:19 -0600 From: Brandon Gooch <jamesbrandongooch@gmail.com> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-current@freebsd.org Subject: Re: ZFS boot problems with memory > 1MB Message-ID: <179b97fb1002231236l3924a264u87380c83c1484e50@mail.gmail.com> In-Reply-To: <201002231401.22852.jhb@freebsd.org> References: <747dc8f31002220835g481b0baeqb1d6df32a79b7da2@mail.gmail.com> <201002231124.31872.jhb@freebsd.org> <179b97fb1002230936l323258cak9c8cbde21855b69c@mail.gmail.com> <201002231401.22852.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 23, 2010 at 1:01 PM, John Baldwin <jhb@freebsd.org> wrote: > On Tuesday 23 February 2010 12:36:31 pm Brandon Gooch wrote: >> On Tue, Feb 23, 2010 at 10:24 AM, John Baldwin <jhb@freebsd.org> wrote: >> > On Tuesday 23 February 2010 10:28:49 am Brandon Gooch wrote: >> >> On Tue, Feb 23, 2010 at 7:29 AM, Andriy Gapon <avg@icyb.net.ua> wrote= : >> >> > on 23/02/2010 13:18 Renato Botelho said the following: >> >> >> On Mon, Feb 22, 2010 at 7:35 PM, Chris Hedley >> >> >> <freebsd-current@chrishedley.com> wrote: >> >> > [snip] >> >> >>> Do you have USB legacy support enabled in your BIOS? =A0I'm not s= ure if >> >> >>> there's an option for the loader to use USB devices natively, but= the BIOS's >> >> >>> legacy option where it provides AT/PS2 emulation is probably the = easiest way >> >> >>> to get the keyboard working. >> >> >> >> >> >> Yes, I do, but it seems to be a regression on FreeBSD itself, I ha= d this problem >> >> >> in the past and I checked the same things i need to check in the p= ast again and >> >> >> everything is fine. >> >> > >> >> > A more precise way to state that would be "a regression in FreeBSD = boot/loader". >> >> > I think that you are referring to the issue that was fixed by r1890= 17. >> >> > It might be worthwhile investigating what was done in that revision= and what >> >> > happened in sys/boot code since then. >> >> > >> >> > One possibility is that your BIOS uses memory above 1MB for USB emu= lation, but >> >> > doesn't mark that memory as used in system memory map. =A0In that c= ase that memory >> >> > could be overwritten by the loader. =A0If that's true then the blam= e is on the BIOS. >> >> > =A0Alternatively, our code might be parsing the system memory map i= ncorrectly. >> >> > But I am just making wild guesses here. >> >> > >> >> >> >> I don't know if it is at all related, but this commit has caused >> >> problems for me booting at least one of my machines: >> >> >> >> http://svn.freebsd.org/viewvc/base/head/sys/boot/i386/zfsboot/zfsboot= .c?r1=3D199714&r2=3D200309 >> >> >> >> Commit message: >> >> >> >> Revision 200309 - (view) (annotate) - [select for diffs] >> >> Modified Wed Dec 9 20:36:56 2009 UTC (2 months, 2 weeks ago) by jhb >> >> File length: 24893 byte(s) >> >> Diff to previous 199714 >> >> - Port bios_getmem() from libi386 to {gpt,}zfsboot() and use it to >> >> =A0 safely allocate a heap region above 1MB. =A0This enables {gpt,}zf= sboot() >> >> =A0 to allocate much larger buffers than before. >> >> - Use a larger buffer (1MB instead of 128K) for temporary ZFS buffers= . =A0This >> >> =A0 allows more reliable reading of compressed files in a raidz/raidz= 2 pool. >> >> >> >> Submitted by: Matt Reimer =A0mattjreimer of gmail >> >> MFC after: =A0 =A01 week >> > >> > Starting a new thread, which problems are you seeing with this change?= =A0ZFS is >> > a good bit more memory hungry than UFS, so it really needs to use high= memory >> > for its heap. =A0Also, I wonder if you still have problems if you use = the older >> > zfsboot with the newer zfsloader? =A0Finally, you need to use disklabe= l -B or >> > some such to update the zfsboot bits for this change to take effect. >> > >> > -- >> > John Baldwin >> > >> >> I filed a PR so it wouldn't fall through the cracks: >> >> http://www.freebsd.org/cgi/query-pr.cgi?pr=3D144234 >> >> I guess I tried a combination of various revisions of bootstrap code >> and loaders when I first encountered the issue. It was when I wrote a >> recent gptzfsboot to the geom that I saw the symptoms: >> >> error 1 lba 48 >> error 1 lba 1 >> No ZFS pools located, can't boot >> >> I just wound up using sys/boot/i386/zfsboot/zfsboot.c revision 199714 >> to build a working gptzfsboot on another system and wrote that to the >> disk to get the machine operational. > > Try this: > > Index: zfsboot.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- zfsboot.c =A0 (revision 204207) > +++ zfsboot.c =A0 (working copy) > @@ -467,6 +467,7 @@ > =A0static inline void > =A0putc(int c) > =A0{ > + =A0 =A0v86.ctl =3D 0; > =A0 =A0 v86.addr =3D 0x10; > =A0 =A0 v86.eax =3D 0xe00 | (c & 0xff); > =A0 =A0 v86.ebx =3D 0x7; > @@ -617,6 +618,8 @@ > =A0 =A0 off_t off; > =A0 =A0 struct dsk *dsk; > > + =A0 =A0dmadat =3D (void *)(roundup2(__base + (int32_t)&_end, 0x10000) -= __base); > + > =A0 =A0 bios_getmem(); > > =A0 =A0 if (high_heap_size > 0) { > @@ -627,9 +630,6 @@ > =A0 =A0 =A0 =A0heap_end =3D (char *) PTOV(bios_basemem); > =A0 =A0 } > > - =A0 =A0dmadat =3D (void *)(roundup2(__base + (int32_t)&_end, 0x10000) -= __base); > - =A0 =A0v86.ctl =3D V86_FLAGS; > - > =A0 =A0 dsk =3D malloc(sizeof(struct dsk)); > =A0 =A0 dsk->drive =3D *(uint8_t *)PTOV(ARGS); > =A0 =A0 dsk->type =3D dsk->drive & DRV_HARD ? TYPE_AD : TYPE_FD; > @@ -1157,6 +1157,7 @@ > =A0 =A0 =A0* when no such key is pressed in reality. As far as I can tell= , > =A0 =A0 =A0* this only happens shortly after a reboot. > =A0 =A0 =A0*/ > + =A0 =A0v86.ctl =3D V86_FLAGS; > =A0 =A0 v86.addr =3D 0x16; > =A0 =A0 v86.eax =3D fn << 8; > =A0 =A0 v86int(); > > -- > John Baldwin > It still breaks: error 1 lba 48 error 1 lba 1 No ZFS pools located, can't boot -Brandon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?179b97fb1002231236l3924a264u87380c83c1484e50>