Re: 2.4.23-bk bogus edd changeset - Re: 2.4.23 compile error in edd

Matt Domsch
2003-12-09T04:23:28Z

> With latest 2.4-BK which includes your compile fix, compiling the kernel
> with the attached .config, installing and attempting to boot the kernel
> causes immediate reboot on my workstation.
>
> Disabling EDD in the .config, recompiling and installing the kernel
> makes it boot just fine.
>
> Let me know if you want me to test any patches, need any more
> information, etc...

Ok, I'm betting that your BIOS doesn't like the int13 call in setup.S for some
reason.

#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
# Read the first sector of device 80h and store the 4-byte signature
movl $0xFFFFFFFF, %eax
movl %eax, (DISK80_SIG_BUFFER) # assume failure
movb $READ_SECTORS, %ah
movb $1, %al # read 1 sector
movb $0x80, %dl # from device 80
movb $0, %dh # at head 0
movw $1, %cx # cylinder 0, sector 0
pushw %es
pushw %ds
popw %es
movw $EDDBUF, %bx
int $0x13
jc disk_sig_done
movl (EDDBUF+MBR_SIG_OFFSET), %eax
movl %eax, (DISK80_SIG_BUFFER) # store success
disk_sig_done:
popw %es

To test this, would you mind #if 0'ing everything starting with
movb $READ_SECTORS, %ah through the popw %es at the end? That
should leave you with a file in /proc/bios/int13_dev80/mbr_signature
that says 0xFFFFFFFF, but a booting system.

I'm wondering if %eax shouldn't be zeroed before the int13. The
bottom word gets set properly, but the top word is 0xFFFF which your
BIOS may not like? That would be another test, add an

xor %eax, %eax

before the movb $READ_SECTORS, %ah.

My BIOSs I've seen this on work, so it could be BIOS-dependent;
clearing eax before setting the lower bytes would be OK if that fixes
it.

I'm travelling Monday and Tuesday, but will respond ASAP.

Thanks,
Matt

--
Matt Domsch
Sr. Software Engineer, Lead Engineer
Dell Linux Solutions www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com