diff --git a/debian/changelog b/debian/changelog index b6d8875a4..da399d463 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,10 @@ grub2 (1.99-8) UNRELEASED; urgency=low * 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 Fri, 17 Jun 2011 11:54:26 +0200 + -- Robert Millan Sat, 18 Jun 2011 15:23:45 +0200 grub2 (1.99-7) unstable; urgency=low diff --git a/debian/patches/kfreebsd-9_ada_devices.patch b/debian/patches/kfreebsd-9_ada_devices.patch new file mode 100644 index 000000000..e1c22e485 --- /dev/null +++ b/debian/patches/kfreebsd-9_ada_devices.patch @@ -0,0 +1,71 @@ +2011-06-16 Robert Millan + + 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++) diff --git a/debian/patches/series b/debian/patches/series index 07059b6c4..10cde6f8b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -20,3 +20,4 @@ mkconfig_loopback.patch lazy_stat.patch btrfs_stat.patch partition_performance.patch +kfreebsd-9_ada_devices.patch