Date: Mon, 22 Aug 2005 16:22:41 -0400 From: Jung-uk Kim <jkim@FreeBSD.org> To: John Baldwin <jhb@FreeBSD.org> Cc: freebsd-current@FreeBSD.org, "Kenneth D. Merry" <ken@FreeBSD.org> Subject: Re: BTX problems Message-ID: <200508221622.45914.jkim@FreeBSD.org> In-Reply-To: <200508221518.43770.jhb@FreeBSD.org> References: <20050813221234.GA23162@nargothrond.kdm.org> <200508221319.31025.jkim@FreeBSD.org> <200508221518.43770.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Monday 22 August 2005 03:18 pm, John Baldwin wrote:
> On Monday 22 August 2005 01:19 pm, Jung-uk Kim wrote:
> > On Monday 22 August 2005 12:33 pm, Kenneth D. Merry wrote:
> > > On Mon, Aug 22, 2005 at 12:16:51 -0400, Jung-uk Kim wrote:
> > > > On Monday 22 August 2005 11:57 am, Kenneth D. Merry wrote:
> > > > > On Mon, Aug 22, 2005 at 11:37:25 -0400, Jung-uk Kim wrote:
> > > > > > On Saturday 20 August 2005 01:02 am, Kenneth D. Merry
wrote:
> > > > > > > On Tue, Aug 16, 2005 at 13:39:48 -0400, John Baldwin
wrote:
> > > > > > > > There haven't been a whole lot of changes. My guess
> > > > > > > > would be the recently added smbios support. You can
> > > > > > > > probably just comment out the call to smbios_detect()
> > > > > > > > in sys/boot/i386/loader/main.c as a simple test for
> > > > > > > > that. It could also possibly be the multiple console
> > > > > > > > support in which case it would be easiest to just
> > > > > > > > step your sys/boot tree back using CVS. The good
> > > > > > > > news is that sys/boot is largely self-contained so
> > > > > > > > you can step it back while keeping the rest of the
> > > > > > > > tree up to date for testing purposes at least.
> > > > > > >
> > > > > > > Thanks for the tips!
> > > > > > >
> > > > > > > Commenting out smbios_detect() did the trick. The
> > > > > > > loader works fine after that.
> > > > > > >
> > > > > > > So now what? Is there a way to fix it so it won't
> > > > > > > crash on my system?
> > > > > >
> > > > > > So, I guess I broke it, then. Can you install
> > > > > > ports/sysutils/dmidecode and send me dmidecode output?
> > > > >
> > > > > Sure, here it is.
> > > >
> > > > Okay, it looks good so far. Can you do:
> > > >
> > > > dd if=/dev/mem of=dmi.dat bs=1 count=1534 skip=984640
> > > > dd if=/dev/mem of=smbios.dat bs=1 count=65536 skip=983040
> > > >
> > > > and send me dmi.dat and smbios.dat, please?
> > >
> > > Here they are.
> >
> > It's very strange. It seems SM entry and DMI structures are all
> > sane. I don't understand why it happens. :-( I just wrote a
> > qucik-and-dirty userland wrapper for smbios.c, which is attached.
> >
> > SMBIOS entry: 0x000f00a0
> > DMI structures: length = 1534, paddr = 0x000f0640, count = 49
> > smbios.bios.vendor="American Megatrends Inc."
> > smbios.bios.version="0700xx "
> > smbios.bios.reldate="11/14/2001"
> > smbios.system.maker="Supermicro"
> > smbios.system.product="P3TDE6"
> > smbios.system.version="1234567890"
> > smbios.planar.maker="Supermicro"
> > smbios.planar.product="P3TDE6"
> > smbios.planar.version="1234567890"
> > smbios.chassis.maker="Supermicro"
> > smbios.chassis.version="P3TDE6"
> >
> > Is it possible that PTOV() is not working somehow??? I need help
> > here.
>
> Perhaps give ken@ a patch with some printf's added to figure out
> how far it gets into smbios_detect() before it dies?
Thanks for the suggestion.
ken,
can you try the attached diff and tell me how far it goes?
Thanks,
Jung-uk Kim
[-- Attachment #2 --]
Index: smbios.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/i386/libi386/smbios.c,v
retrieving revision 1.2
diff -u -r1.2 smbios.c
--- smbios.c 27 Jul 2005 19:11:10 -0000 1.2
+++ smbios.c 22 Aug 2005 20:19:20 -0000
@@ -67,6 +67,7 @@
u_int16_t i, length, count;
u_int32_t paddr;
+ printf("smbios_detect\n");
/* locate and validate the SMBIOS */
smbios = smbios_sigsearch(PTOV(SMBIOS_START), SMBIOS_LENGTH);
if (smbios == NULL)
@@ -76,6 +77,7 @@
paddr = *(u_int32_t *)(smbios + 0x18); /* Structure Table Address */
count = *(u_int16_t *)(smbios + 0x1c); /* No of SMBIOS Structures */
+ printf("length = %u, paddr = %u, count = %u\n", length, paddr, count);
for (dmi = addr = PTOV(paddr), i = 0;
dmi - addr < length && i < count; i++)
dmi = smbios_parse_table(dmi);
@@ -86,6 +88,7 @@
{
u_int8_t *dp;
+ printf("smbios_parse_table: type %u\n", dmi[0]);
switch(dmi[0]) {
case 0: /* Type 0: BIOS */
smbios_setenv("smbios.bios.vendor", dmi, 0x04);
@@ -119,6 +122,7 @@
while (dp[0] != 0 || dp[1] != 0)
dp++;
+ printf("smbios_parse_table returns %p\n", dp + 2);
return(dp + 2);
}
@@ -128,13 +132,16 @@
char *cp;
int i;
+ printf("smbios_setenv: %s at %p, offset = %d\n", str, dmi, offset);
/* skip undefined string */
if (dmi[offset] == 0)
return;
for (cp = (char *)(dmi + dmi[1]), i = 0; i < dmi[offset] - 1; i++)
cp += strlen(cp) + 1;
+ printf("%s=\"%s\"\n", str, cp);
setenv(str, cp, 1);
+ printf("smbios_setenv done\n");
}
static u_int8_t
@@ -143,6 +150,7 @@
u_int8_t sum;
int i;
+ printf("smbios_checksum: %p, %u\n", addr, len);
for (sum = 0, i = 0; i < len; i++)
sum += addr[i];
@@ -154,6 +162,7 @@
{
caddr_t cp;
+ printf("smbios_sigsearch: %p, %u\n", addr, len);
/* search on 16-byte boundaries */
for (cp = addr; cp - addr < len; cp += SMBIOS_STEP) {
/* compare signature, validate checksum */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508221622.45914.jkim>
