From 7fd0ee30f823f9f9508d51e9f8f120e396dae244 Mon Sep 17 00:00:00 2001 From: robertmh Date: Sat, 29 Nov 2008 21:05:59 +0000 Subject: [PATCH] 2008-11-29 Robert Millan * disk/ata.c (grub_ata_pciinit): Handle errors rised by grub_ata_device_initialize() calls. --- ChangeLog | 5 +++++ disk/ata.c | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/ChangeLog b/ChangeLog index f3b277020..6f4934cf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-11-29 Robert Millan + + * disk/ata.c (grub_ata_pciinit): Handle errors rised by + grub_ata_device_initialize() calls. + 2008-11-28 Krzysztof Smiechowicz * fs/affs.c (grub_affs_iterate_dir): Return failure when directory diff --git a/disk/ata.c b/disk/ata.c index 214a2cac7..6e0b8b805 100644 --- a/disk/ata.c +++ b/disk/ata.c @@ -541,7 +541,25 @@ grub_ata_pciinit (int bus, int device, int func, if (rega && regb) { grub_ata_device_initialize (controller * 2 + i, 0, rega, regb); + + /* Most errors rised by grub_ata_device_initialize() are harmless. + They just indicate this particular drive is not responding, most + likely because it doesn't exist. We might want to ignore specific + error types here, instead of printing them. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } + grub_ata_device_initialize (controller * 2 + i, 1, rega, regb); + + /* Likewise. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } } }