summaryrefslogtreecommitdiff
path: root/libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-05-22 01:42:51 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-05-22 03:10:10 +0200
commit7b43a753e346a0f16bef2b4db2ed71bac0ae25de (patch)
treee77b295f3af9dc4e3ca20c9a1660a431813adec4 /libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
parent1e6f86bfa9322e7a6fe71e248934aadcb25c4441 (diff)
downloadabslibre-7b43a753e346a0f16bef2b4db2ed71bac0ae25de.tar.gz
abslibre-7b43a753e346a0f16bef2b4db2ed71bac0ae25de.tar.bz2
abslibre-7b43a753e346a0f16bef2b4db2ed71bac0ae25de.zip
libre: add linux-libre-64 to replace archtecture specific versions
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
Diffstat (limited to 'libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch')
-rw-r--r--libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch139
1 files changed, 139 insertions, 0 deletions
diff --git a/libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch b/libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
new file mode 100644
index 000000000..46ebe72ea
--- /dev/null
+++ b/libre/linux-libre-64/0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
@@ -0,0 +1,139 @@
+From 2b4a8bfd9379fd9431d517e4db20c57468ecf3e6 Mon Sep 17 00:00:00 2001
+From: Julius Werner <jwerner@chromium.org>
+Date: Wed, 20 Apr 2016 15:20:00 -0700
+Subject: [PATCH] CHROMIUM: block: partitions: efi: Add support for IGNOREME
+ GPT signature
+
+This patch adds support for a special GPT header signature marker (using
+the string 'IGNOREME' instead of the spec's 'EFI PART'). This tells the
+kernel to ignore this GPT completely and look at the other one instead.
+Since the kernel always prefers the primary GPT anyway, all we really
+need to do effectively is to check whether the primary GPT is marked
+'IGNOREME' and force evaluation of the secondary one in that case.
+
+Signed-off-by: Julius Werner <jwerner@chromium.org>
+Reviewed-on: https://chromium-review.googlesource.com/340080
+Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
+
+An earlier attempt to upstream an alternative solution:
+https://patchwork.kernel.org/patch/8933841/
+
+mka@: added missing param 'lba' to log message and resolved minor
+conflicts.
+
+BUG=chromium:941638, chrome-os-partner:52595
+TEST=Booted on Minnie with 'IGNOREME' primary GPT
+
+Change-Id: Ibaee639fac9fa2f04b8836ef153c95b7d0b045a4
+Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
+Reviewed-on: https://chromium-review.googlesource.com/1531701
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Reviewed-by: Julius Werner <jwerner@chromium.org>
+---
+ block/partitions/efi.c | 31 ++++++++++++++++++++++---------
+ block/partitions/efi.h | 3 ++-
+ 2 files changed, 24 insertions(+), 10 deletions(-)
+
+diff --git a/block/partitions/efi.c b/block/partitions/efi.c
+index db2fef7dfc47..90103e0471c4 100644
+--- a/block/partitions/efi.c
++++ b/block/partitions/efi.c
+@@ -330,23 +330,33 @@ static gpt_header *alloc_read_gpt_header(struct parsed_partitions *state,
+ * @lba: logical block address of the GPT header to test
+ * @gpt: GPT header ptr, filled on return.
+ * @ptes: PTEs ptr, filled on return.
++ * @ignored is filled on return with 1 if this is an IGNOREME GPT,
++ * 0 otherwise. May be NULL.
+ *
+ * Description: returns 1 if valid, 0 on error.
+ * If valid, returns pointers to newly allocated GPT header and PTEs.
+ */
+ static int is_gpt_valid(struct parsed_partitions *state, u64 lba,
+- gpt_header **gpt, gpt_entry **ptes)
++ gpt_header **gpt, gpt_entry **ptes, int *ignored)
+ {
+ u32 crc, origcrc;
+ u64 lastlba, pt_size;
+
++ if (ignored)
++ *ignored = 0;
+ if (!ptes)
+ return 0;
+ if (!(*gpt = alloc_read_gpt_header(state, lba)))
+ return 0;
+
+ /* Check the GUID Partition Table signature */
+- if (le64_to_cpu((*gpt)->signature) != GPT_HEADER_SIGNATURE) {
++ if (le64_to_cpu((*gpt)->signature) == GPT_HEADER_SIGNATURE_IGNORED) {
++ pr_debug("GUID Partition Table at LBA %llu marked IGNOREME\n",
++ lba);
++ if (ignored)
++ *ignored = 1;
++ goto fail;
++ } else if (le64_to_cpu((*gpt)->signature) != GPT_HEADER_SIGNATURE) {
+ pr_debug("GUID Partition Table Header signature is wrong:"
+ "%lld != %lld\n",
+ (unsigned long long)le64_to_cpu((*gpt)->signature),
+@@ -583,7 +593,7 @@ compare_gpts(gpt_header *pgpt, gpt_header *agpt, u64 lastlba)
+ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt,
+ gpt_entry **ptes)
+ {
+- int good_pgpt = 0, good_agpt = 0, good_pmbr = 0;
++ int good_pgpt = 0, good_agpt = 0, good_pmbr = 0, pgpt_ignored = 0;
+ gpt_header *pgpt = NULL, *agpt = NULL;
+ gpt_entry *pptes = NULL, *aptes = NULL;
+ legacy_mbr *legacymbr;
+@@ -613,19 +623,21 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt,
+ }
+
+ good_pgpt = is_gpt_valid(state, GPT_PRIMARY_PARTITION_TABLE_LBA,
+- &pgpt, &pptes);
++ &pgpt, &pptes, &pgpt_ignored);
+ if (good_pgpt)
+ good_agpt = is_gpt_valid(state,
+ le64_to_cpu(pgpt->alternate_lba),
+- &agpt, &aptes);
+- if (!good_agpt && force_gpt)
+- good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes);
++ &agpt, &aptes, NULL);
++
++ if (!good_agpt && (force_gpt || pgpt_ignored))
++ good_agpt = is_gpt_valid(state, lastlba, &agpt, &aptes, NULL);
+
+ /* The obviously unsuccessful case */
+ if (!good_pgpt && !good_agpt)
+ goto fail;
+
+- compare_gpts(pgpt, agpt, lastlba);
++ if (!pgpt_ignored)
++ compare_gpts(pgpt, agpt, lastlba);
+
+ /* The good cases */
+ if (good_pgpt) {
+@@ -642,7 +654,8 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt,
+ *ptes = aptes;
+ kfree(pgpt);
+ kfree(pptes);
+- pr_warn("Primary GPT is invalid, using alternate GPT.\n");
++ pr_warn("Primary GPT is %s, using alternate GPT.\n",
++ pgpt_ignored ? "being ignored" : "invalid");
+ return 1;
+ }
+
+diff --git a/block/partitions/efi.h b/block/partitions/efi.h
+index 3e8576157575..260c24c54750 100644
+--- a/block/partitions/efi.h
++++ b/block/partitions/efi.h
+@@ -27,7 +27,8 @@
+ #define GPT_MBR_PROTECTIVE 1
+ #define GPT_MBR_HYBRID 2
+
+-#define GPT_HEADER_SIGNATURE 0x5452415020494645ULL
++#define GPT_HEADER_SIGNATURE 0x5452415020494645ULL /* 'EFI PART' */
++#define GPT_HEADER_SIGNATURE_IGNORED 0x454d45524f4e4749ULL /* 'IGNOREME' */
+ #define GPT_HEADER_REVISION_V1 0x00010000
+ #define GPT_PRIMARY_PARTITION_TABLE_LBA 1
+
+--
+2.25.0
+