Messages in this thread Patch in this message | | | Date | Tue, 13 Jul 2004 21:32:33 -0500 | From | Matt Domsch <> | Subject | Re: Weird: 30 sec delay during early boot |
| |
On Tue, Jul 13, 2004 at 06:35:28PM -0400, Jeff Garzik wrote: > Can you attach the patch, or switch mailers? > > The patch is word-wrapped and otherwise munged :(
That was sent with mutt-1.4.1-3 on a RHEL3 system...
Attached this time. -- Matt Domsch Sr. Software Engineer, Lead Engineer Dell Linux Solutions linux.dell.com & www.dell.com/linux Linux on Dell mailing lists @ http://lists.us.dell.com ===== arch/i386/boot/edd.S 1.2 vs edited ===== --- 1.2/arch/i386/boot/edd.S 2004-06-29 09:44:48 -05:00 +++ edited/arch/i386/boot/edd.S 2004-07-13 16:48:50 -05:00 @@ -12,13 +12,31 @@ #include <linux/edd.h> #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) -# Read the first sector of each BIOS disk device and store the 4-byte signature edd_mbr_sig_start: + xor %ebx, %ebx + xor %edx, %edx movb $0, (EDD_MBR_SIG_NR_BUF) # zero value at EDD_MBR_SIG_NR_BUF + movw $EDD_MBR_SIG_BUF, %bx # store buffer ptr in bx movb $0x80, %dl # from device 80 - movw $EDD_MBR_SIG_BUF, %bx # store buffer ptr in bx + edd_mbr_sig_read: - movl $0xFFFFFFFF, %eax +# Do int13 fn15 first, as BIOS should know if a disk is present or not. +# This avoids long (>30s) delays waiting for the READ_SECTORS to a non-present disk. + xor %eax, %eax + xor %ecx, %ecx + movb $GETDISKTYPE, %ah # Function 15 + pushw %dx # which stomps on dx + stc # work around buggy BIOSes + int $0x13 # make the call + sti # work around buggy BIOSes + popw %dx # so get back dx + jc edd_mbr_sig_done # no more BIOS devices + cmpb $HARDDRIVEPRESENT, %ah # is hard drive present? + jne edd_mbr_sig_done # no more BIOS devices + +# Read the first sector of each BIOS disk device and store the 4-byte signature + xor %ecx, %ecx + movl $0xFFFFFFFF, %eax movl %eax, (%bx) # assume failure pushw %bx movb $READ_SECTORS, %ah ===== include/linux/edd.h 1.11 vs edited ===== --- 1.11/include/linux/edd.h 2004-06-29 09:44:48 -05:00 +++ edited/include/linux/edd.h 2004-07-13 16:05:14 -05:00 @@ -49,6 +49,9 @@ #define EDD_MBR_SIG_MAX 16 /* max number of signatures to store */ #define EDD_MBR_SIG_NR_BUF 0x1ea /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF in boot_params - treat this as 1 byte */ +#define GETDISKTYPE 0x15 /* int13 AH=0x15 is Get Disk Type command */ +#define HARDDRIVEPRESENT 0x03 /* int13 AH=15 return code in AH */ + #ifndef __ASSEMBLY__ #define EDD_EXT_FIXED_DISK_ACCESS (1 << 0) | |