* Fix grub-probe detection for ATA devices using `ata' driver on kFreeBSD 9.

- kfreebsd-9_ada_devices.patch
This commit is contained in:
Robert Millan 2011-06-18 15:25:34 +02:00
parent cc35fd11cc
commit 258c695358
3 changed files with 75 additions and 1 deletions

4
debian/changelog vendored
View File

@ -1,8 +1,10 @@
grub2 (1.99-8) UNRELEASED; urgency=low grub2 (1.99-8) UNRELEASED; urgency=low
* Avoid buggy versions of libgeom-dev (see #630107). Closes: #630197 * Avoid buggy versions of libgeom-dev (see #630107). Closes: #630197
* Fix grub-probe detection for ATA devices using `ata' driver on kFreeBSD 9.
- kfreebsd-9_ada_devices.patch
-- Robert Millan <rmh@debian.org> Fri, 17 Jun 2011 11:54:26 +0200 -- Robert Millan <rmh@debian.org> Sat, 18 Jun 2011 15:23:45 +0200
grub2 (1.99-7) unstable; urgency=low grub2 (1.99-7) unstable; urgency=low

View File

@ -0,0 +1,71 @@
2011-06-16 Robert Millan <rmh@gnu.org>
Detect `ataraid' devices on GNU/kFreeBSD. Fix for ATA devices using
`ata' driver on kernel of FreeBSD 9.
* util/deviceiter.c [__FreeBSD_kernel__] (get_ada_disk_name)
(get_ataraid_disk_name): New functions.
[__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for ataraid
(/dev/ar[0-9]+) and ada (/dev/ada[0-9]+) devices using
get_ataraid_disk_name() and get_ada_disk_name().
=== modified file 'util/deviceiter.c'
--- a/util/deviceiter.c
+++ b/util/deviceiter.c
@@ -286,6 +286,20 @@
#endif
}
+#ifdef __FreeBSD_kernel__
+static void
+get_ada_disk_name (char *name, int unit)
+{
+ sprintf (name, "/dev/ada%d", unit);
+}
+
+static void
+get_ataraid_disk_name (char *name, int unit)
+{
+ sprintf (name, "/dev/ar%d", unit);
+}
+#endif
+
#ifdef __linux__
static void
get_virtio_disk_name (char *name, int unit)
@@ -620,6 +634,35 @@
}
}
+#ifdef __FreeBSD_kernel__
+ /* IDE disks using ATA Direct Access driver. */
+ if (get_kfreebsd_version () >= 800000)
+ for (i = 0; i < 96; i++)
+ {
+ char name[16];
+
+ get_ada_disk_name (name, i);
+ if (check_device_readable_unique (name))
+ {
+ if (hook (name, 0))
+ goto out;
+ }
+ }
+
+ /* ATARAID disks. */
+ for (i = 0; i < 8; i++)
+ {
+ char name[20];
+
+ get_ataraid_disk_name (name, i);
+ if (check_device_readable_unique (name))
+ {
+ if (hook (name, 0))
+ goto out;
+ }
+ }
+#endif
+
#ifdef __linux__
/* Virtio disks. */
for (i = 0; i < 26; i++)

View File

@ -20,3 +20,4 @@ mkconfig_loopback.patch
lazy_stat.patch lazy_stat.patch
btrfs_stat.patch btrfs_stat.patch
partition_performance.patch partition_performance.patch
kfreebsd-9_ada_devices.patch