diff options
author | Allan Jude <allanjude@FreeBSD.org> | 2015-07-15 02:23:55 +0000 |
---|---|---|
committer | Allan Jude <allanjude@FreeBSD.org> | 2015-07-15 02:23:55 +0000 |
commit | ce808c7ad89c663b021a86e84fc8e4f82a5a0d0f (patch) | |
tree | dcc97e351a3f3f145b33f3281395bb4427230f60 /sys/geom | |
parent | 2ec930efea151ba39e298a3a15b45e48c816a940 (diff) | |
download | src-ce808c7ad89c663b021a86e84fc8e4f82a5a0d0f.tar.gz src-ce808c7ad89c663b021a86e84fc8e4f82a5a0d0f.zip |
Add a new option to gpart(8) to fix Lenovo BIOS boot issue
PR: 184910
Reviewed by: ae, wblock
Approved by: marcel
MFC after: 3 days
Relnotes: yes
Sponsored by: ScaleEngine Inc.
Differential Revision: https://reviews.freebsd.org/D3065
Notes
Notes:
svn path=/head/; revision=285594
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/part/g_part_gpt.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c index 08a31983a134..922e814735f8 100644 --- a/sys/geom/part/g_part_gpt.c +++ b/sys/geom/part/g_part_gpt.c @@ -1007,6 +1007,7 @@ g_part_gpt_setunset(struct g_part_table *basetable, { struct g_part_gpt_entry *entry; struct g_part_gpt_table *table; + struct g_provider *pp; uint8_t *p; uint64_t attr; int i; @@ -1036,6 +1037,21 @@ g_part_gpt_setunset(struct g_part_table *basetable, } } return (0); + } else if (strcasecmp(attrib, "lenovofix") == 0) { + /* + * Write the 0xee GPT entry to slot #1 (2nd slot) in the pMBR. + * This workaround allows Lenovo X220, T420, T520, etc to boot + * from GPT Partitions in BIOS mode. + */ + + if (entry != NULL) + return (ENXIO); + + pp = LIST_FIRST(&basetable->gpt_gp->consumer)->provider; + bzero(table->mbr + DOSPARTOFF, DOSPARTSIZE * NDOSPART); + gpt_write_mbr_entry(table->mbr, ((set) ? 1 : 0), 0xee, 1, + MIN(pp->mediasize / pp->sectorsize - 1, UINT32_MAX)); + return (0); } if (entry == NULL) |