Index: kern/partition.c =================================================================== --- kern/partition.c (revision 1861) +++ kern/partition.c (working copy) @@ -25,8 +25,20 @@ void grub_partition_map_register (grub_partition_map_t partmap) { - partmap->next = grub_partition_map_list; - grub_partition_map_list = partmap; + grub_partition_map_t cur, prev=0; + for (cur=grub_partition_map_list;cur && cur->priority>partmap->priority; + cur=cur->next) + prev=cur; + if (!prev) + { + partmap->next = grub_partition_map_list; + grub_partition_map_list = partmap; + } + else + { + partmap->next=prev->next; + prev->next=partmap; + } } void Index: include/grub/partition.h =================================================================== --- include/grub/partition.h (revision 1861) +++ include/grub/partition.h (working copy) @@ -42,6 +42,9 @@ /* Return the name of the partition PARTITION. */ char *(*get_name) (const grub_partition_t partition); + + /* Partmaps with higher priorities are checked first */ + int priority; /* The next partition map type. */ struct grub_partition_map *next; Index: partmap/amiga.c =================================================================== --- partmap/amiga.c (revision 1861) +++ partmap/amiga.c (working copy) @@ -205,7 +205,8 @@ .name = "amiga_partition_map", .iterate = amiga_partition_map_iterate, .probe = amiga_partition_map_probe, - .get_name = amiga_partition_map_get_name + .get_name = amiga_partition_map_get_name, + .priority = 0 }; GRUB_MOD_INIT(amiga_partition_map) Index: partmap/apple.c =================================================================== --- partmap/apple.c (revision 1861) +++ partmap/apple.c (working copy) @@ -241,7 +241,8 @@ .name = "apple_partition_map", .iterate = apple_partition_map_iterate, .probe = apple_partition_map_probe, - .get_name = apple_partition_map_get_name + .get_name = apple_partition_map_get_name, + .priority = 0 }; GRUB_MOD_INIT(apple_partition_map) Index: partmap/acorn.c =================================================================== --- partmap/acorn.c (revision 1861) +++ partmap/acorn.c (working copy) @@ -192,7 +192,8 @@ .name = "Linux/ADFS partition map", .iterate = acorn_partition_map_iterate, .probe = acorn_partition_map_probe, - .get_name = acorn_partition_map_get_name + .get_name = acorn_partition_map_get_name, + .priority = 0 }; GRUB_MOD_INIT(acorn_partition_map) Index: partmap/pc.c =================================================================== --- partmap/pc.c (revision 1861) +++ partmap/pc.c (working copy) @@ -111,7 +111,7 @@ pcdata.dos_part = -1; p.data = &pcdata; p.partmap = &grub_pc_partition_map; - + while (1) { int i; @@ -303,7 +303,8 @@ .name = "pc_partition_map", .iterate = pc_partition_map_iterate, .probe = pc_partition_map_probe, - .get_name = pc_partition_map_get_name + .get_name = pc_partition_map_get_name, + .priority = -10 }; GRUB_MOD_INIT(pc_partition_map) Index: partmap/sun.c =================================================================== --- partmap/sun.c (revision 1861) +++ partmap/sun.c (working copy) @@ -205,7 +205,8 @@ .name = "sun_partition_map", .iterate = sun_partition_map_iterate, .probe = sun_partition_map_probe, - .get_name = sun_partition_map_get_name + .get_name = sun_partition_map_get_name, + .priority = 0 }; GRUB_MOD_INIT(sun_partition_map) Index: partmap/gpt.c =================================================================== --- partmap/gpt.c (revision 1861) +++ partmap/gpt.c (working copy) @@ -58,18 +58,6 @@ raw = *disk; raw.partition = 0; - /* Read the protective MBR. */ - if (grub_disk_read (&raw, 0, 0, sizeof (mbr), (char *) &mbr)) - return grub_errno; - - /* Check if it is valid. */ - if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE)) - return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature"); - - /* Make sure the MBR is a protective MBR and not a normal MBR. */ - if (mbr.entries[0].type != GRUB_PC_PARTITION_TYPE_GPT_DISK) - return grub_error (GRUB_ERR_BAD_PART_TABLE, "no GPT partition map found"); - /* Read the GPT header. */ if (grub_disk_read (&raw, 1, 0, sizeof (gpt), (char *) &gpt)) return grub_errno; @@ -183,7 +171,8 @@ .name = "gpt_partition_map", .iterate = gpt_partition_map_iterate, .probe = gpt_partition_map_probe, - .get_name = gpt_partition_map_get_name + .get_name = gpt_partition_map_get_name, + .priority = 0 }; GRUB_MOD_INIT(gpt_partition_map)