Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jul 2015 15:50:15 +0000 (UTC)
From:      Allan Jude <allanjude@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r285756 - in stable/10: sbin/geom/class/part sys/geom/part
Message-ID:  <201507211550.t6LFoFAw022940@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: allanjude (doc committer)
Date: Tue Jul 21 15:50:14 2015
New Revision: 285756
URL: https://svnweb.freebsd.org/changeset/base/285756

Log:
  MFC: r285594
  	New partition flag for gpart, writes the 0xee partition in the pmbr in the second slot, rather than the first.
  	Works around Lenovo legacy GPT boot issue
  
  PR:		184910
  Approved by:	re (gjb), marcel
  Relnotes:	yes
  Sponsored by:	ScaleEngine Inc.
  Differential Revision:	https://reviews.freebsd.org/D3140

Modified:
  stable/10/sbin/geom/class/part/gpart.8
  stable/10/sys/geom/part/g_part_gpt.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/geom/class/part/gpart.8
==============================================================================
--- stable/10/sbin/geom/class/part/gpart.8	Tue Jul 21 15:28:07 2015	(r285755)
+++ stable/10/sbin/geom/class/part/gpart.8	Tue Jul 21 15:50:14 2015	(r285756)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 5, 2015
+.Dd July 14, 2015
 .Dt GPART 8
 .Os
 .Sh NAME
@@ -933,6 +933,12 @@ start-up script.
 See
 .Xr gptboot 8
 for more details.
+.It Cm lenovofix
+Setting this attribute overwrites the Protective MBR with a new one where
+the 0xee partition is the second, rather than the first record.
+This resolves a BIOS compatibility issue with some Lenovo models including the
+X220, T420, and T520, allowing them to boot from GPT partitioned disks
+without using EFI.
 .El
 .Pp
 The scheme-specific attributes for MBR:

Modified: stable/10/sys/geom/part/g_part_gpt.c
==============================================================================
--- stable/10/sys/geom/part/g_part_gpt.c	Tue Jul 21 15:28:07 2015	(r285755)
+++ stable/10/sys/geom/part/g_part_gpt.c	Tue Jul 21 15:50:14 2015	(r285756)
@@ -1007,6 +1007,7 @@ g_part_gpt_setunset(struct g_part_table 
 {
 	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 
 			}
 		}
 		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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201507211550.t6LFoFAw022940>