diff --git a/ChangeLog b/ChangeLog index 6a8e341c8..eb26bb11d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-05-09 Robert Millan + + * util/biosdisk.c (linux_find_partition, get_os_disk): Handle Virtio + devices. + * util/grub-mkdevicemap.c (get_virtio_disk_name) + (make_device_map): Likewise. + Reported by Aurelien Jarno + 2008-05-07 Ian Campbell * util/biosdisk.c (get_os_disk): Recognise xvd type disks. diff --git a/util/biosdisk.c b/util/biosdisk.c index c4ee7c14a..fcf01a497 100644 --- a/util/biosdisk.c +++ b/util/biosdisk.c @@ -227,6 +227,7 @@ linux_find_partition (char *dev, unsigned long sector) format = "part%d"; } else if ((strncmp (real_dev + 5, "hd", 2) == 0 + || strncmp (real_dev + 5, "vd", 2) == 0 || strncmp (real_dev + 5, "sd", 2) == 0) && real_dev[7] >= 'a' && real_dev[7] <= 'z') { @@ -668,12 +669,13 @@ get_os_disk (const char *os_dev) return path; } - /* If this is an IDE disk or a SCSI disk. */ + /* If this is an IDE, SCSI or Virtio disk. */ if ((strncmp ("hd", p, 2) == 0 + || strncmp ("vd", p, 2) == 0 || strncmp ("sd", p, 2) == 0) && p[2] >= 'a' && p[2] <= 'z') { - /* /dev/[hs]d[a-z][0-9]* */ + /* /dev/[hsv]d[a-z][0-9]* */ p[3] = '\0'; return path; } diff --git a/util/grub-mkdevicemap.c b/util/grub-mkdevicemap.c index 19d6747bf..d24d84416 100644 --- a/util/grub-mkdevicemap.c +++ b/util/grub-mkdevicemap.c @@ -266,6 +266,12 @@ get_scsi_disk_name (char *name, int unit) } #ifdef __linux__ +static void +get_virtio_disk_name (char *name, int unit) +{ + sprintf (name, "/dev/vd%c", unit + 'a'); +} + static void get_dac960_disk_name (char *name, int controller, int drive) { @@ -455,6 +461,22 @@ make_device_map (const char *device_map, int floppy_disks) } #ifdef __linux__ + /* Virtio disks. */ + for (i = 0; i < 20; i++) + { + char name[16]; + + get_virtio_disk_name (name, i); + if (check_device (name)) + { + char *p; + p = grub_util_get_disk_name (num_hd, name); + fprintf (fp, "(%s)\t%s\n", p, name); + free (p); + num_hd++; + } + } + /* ATARAID disks. */ for (i = 0; i < 8; i++) {