grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Grub long delays loading


From: Guenter.Ebermann
Subject: Grub long delays loading
Date: Thu, 29 May 2008 10:41:22 +0200

Hello,

I'am running Grub on a standard i386 compatible PC. Grub comes pre-compiled
from debian stable distribution. The hard drive where Grub is installed is
Serial ATA.

1. Output of /etc/fstab:
proc            /proc   proc            defaults        0       0
rootfs          /       reiserfs        defaults        0       0
/dev/sda1 /mnt/shared reiserfs notail 0 0 
/dev/sda5 /mnt/second reiserfs noauto 0 0 
/dev/cdrom /cdrom auto noauto,user,ro 0 0 
/dev/fd0 /floppy auto noauto,user,sync 0 0

2. Output from fdisk -l /dev/sda:
Disk /dev/sda: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         510     4096543+  83  Linux
/dev/sda2             511       10011    76316782+   5  Extended
/dev/sda5             511        1403     7172991   83  Linux
/dev/sda6            1404        2296     7172991   83  Linux
/dev/sda7            2297       10011    61970706   83  Linux

3. We do not use RAID

4. Output of /proc/partitions:
major minor  #blocks  name

   8     0   80418240 sda
   8     1    4096543 sda1
   8     2          1 sda2
   8     5    7172991 sda5
   8     6    7172991 sda6
   8     7   61970706 sda7

Now to the problem, which is not strictly grub-specific:

We are producing a PCI Card (and software) for Bus measurements in automotive
environments. Sometimes (not always), whenever our PCI Card is plugged into a
special PC it takes long time in the BIOS or at the beginning of the
boot-loader to carry on.

This error only occurs with one type of Mainboard, so we are not even sure if
its our fault! However our most important customer uses this kind of mainboard
with the bootloader grub.

The long timeout takes place after the last BIOS message (what I see every time
when I boot another OS ...) and before the first Bootloader Message (GRUB menu)
so it is hard to judge for me where the timeout happens (in the BIOS or in the
boot loader).

Following timeouts where measured:
Bootloader Grub: 30 Minutes
Bootloader LILO: 1,5 Minutes

Because the timeout varies between the two bootloaders I suspect the timeout is
produced in the bootloader code, perhaps because of an error or inconsitency in
the information the BIOS provided. Also in case of an error (long timeout) our
PCI-card is fully functional after linux is booted from either grub or lilo
bootloader!

Furthermore I have other hints. The timeout never occurs whenever I do _one_ of
the following:
* Boot from a USB stick (I boot a linux with syslinux bootloader from a
  FAT file system)
* Turn off SerialATA Support in the BIOS. What the BIOS then makes is
  the following: It does not show the SerialATA Chip on the PCI bus, it only
  shows a conventional IDE controller for backward compatibility with old OSes.
* Do not use an PCI interrupt line in a PCI controller on our PCI
  expansion board. This is done the following way: We set the interrupt pin
  register to 0 in the config space of our PCI controller. This is an easy task
  because our PCI controller is in FPGA.
  Please note that our PCI expansion board has three PCI devices:
  1. Asynchronous PCI to PCI bridge and on the secondary bus side:
  2. One PCI controller in the FPGA (this device can generate an interrupt)
  3. One MPC5200 microcontroller
  I think it is harder for the BIOS code to set up the Interrupt controllers
  because of the fact that the device which generates the interrupt sits behind
  a PCI to PCI bridge, because interrupt lines are interchanges in this case,
  depending on the device number.
  If we do not set the interrupt pin register to 1 the BIOS does think we do
  not have a PCI interrupt (via the PCI lines INTA# ...) and does not have to
  set up the interrupt controllers on the mainboard for our device.

The error is not special to one PCI slot in the mainboard. It happens in all
slots from time to time. Whenever we delete the ESCD info in BIOS the error
occurs more often.
  
We have gone a long way to find the bug:
1. We bought an PCI bus analyzer and logged every access (to our devices) up to
   the timeout whenever the error happens and once when the error did not
   happen, but we did not find one suspicious transaction.
2. We changed the PCI controller in the FPGA from an OpenCore-One to a
   commercial PCI controller IP. This does not change the error behaviour.

Now I am looking for possibilities how i could debug the problem. Perhaps by
instrumenting grub. Perhaps I can set a debug pin (e.g. on paralell port) in
the code which shows us if grub was already started when the timeout happens?
The project I am working on perhaps allows me to look into this problem in
detail and of course eventual grub fixes will be commited back to the
community.

Do you have any further suggestions?

Thanks in advance!
Guenter Ebermann


----------------------------------------------------------------
Please note: This e-mail may contain confidential information
intended solely for the addressee. If you have received this
e-mail in error, please do not disclose it to anyone, notify
the sender promptly, and delete the message from your system.
Thank you.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]