Blame SOURCES/0013-If-we-re-using-multiboot-add-a-new-mbmodule-not-an-i.patch

775cb0
From 45561f504ef2329d0461b8d2c38447f54610f12e Mon Sep 17 00:00:00 2001
775cb0
From: Peter Jones <pjones@redhat.com>
775cb0
Date: Thu, 12 Sep 2013 20:41:33 +0200
775cb0
Subject: [PATCH 13/16] If we're using multiboot, add a new mbmodule not an
775cb0
 initramfs
775cb0
775cb0
I really don't know how this ever worked.
775cb0
Related: rhbz#957681
775cb0
775cb0
Signed-off-by: Peter Jones <pjones@redhat.com>
775cb0
---
775cb0
 grubby.c       | 47 +++++++++++++++++++++++++++++++++++++++++++++--
775cb0
 new-kernel-pkg |  3 ++-
775cb0
 2 files changed, 47 insertions(+), 3 deletions(-)
775cb0
775cb0
diff --git a/grubby.c b/grubby.c
775cb0
index 6cfc5b7..c82ab00 100644
775cb0
--- a/grubby.c
775cb0
+++ b/grubby.c
775cb0
@@ -3281,6 +3281,42 @@ int updateImage(struct grubConfig * cfg, const char * image,
775cb0
     return rc;
775cb0
 }
775cb0
 
775cb0
+int addMBInitrd(struct grubConfig * cfg, const char *newMBKernel,
775cb0
+		 const char * image, const char * prefix, const char * initrd) {
775cb0
+    struct singleEntry * entry;
775cb0
+    struct singleLine * line, * kernelLine, *endLine = NULL;
775cb0
+    int index = 0;
775cb0
+
775cb0
+    if (!image) return 0;
775cb0
+
775cb0
+    for (; (entry = findEntryByPath(cfg, newMBKernel, prefix, &index)); index++) {
775cb0
+        kernelLine = getLineByType(LT_MBMODULE, entry->lines);
775cb0
+        if (!kernelLine) continue;
775cb0
+
775cb0
+        if (prefix) {
775cb0
+            int prefixLen = strlen(prefix);
775cb0
+            if (!strncmp(initrd, prefix, prefixLen))
775cb0
+                initrd += prefixLen;
775cb0
+        }
775cb0
+	endLine = getLineByType(LT_ENTRY_END, entry->lines);
775cb0
+	if (endLine)
775cb0
+	    removeLine(entry, endLine);
775cb0
+        line = addLine(entry, cfg->cfi, preferredLineType(LT_MBMODULE,cfg->cfi),
775cb0
+			kernelLine->indent, initrd);
775cb0
+        if (!line)
775cb0
+	    return 1;
775cb0
+	if (endLine) {
775cb0
+	    line = addLine(entry, cfg->cfi, LT_ENTRY_END, "", NULL);
775cb0
+            if (!line)
775cb0
+		return 1;
775cb0
+	}
775cb0
+
775cb0
+        break;
775cb0
+    }
775cb0
+
775cb0
+    return 0;
775cb0
+}
775cb0
+
775cb0
 int updateInitrd(struct grubConfig * cfg, const char * image,
775cb0
                  const char * prefix, const char * initrd) {
775cb0
     struct singleEntry * entry;
775cb0
@@ -4519,8 +4555,15 @@ int main(int argc, const char ** argv) {
775cb0
     if (updateImage(config, updateKernelPath, bootPrefix, newKernelArgs,
775cb0
                     removeArgs, newMBKernelArgs, removeMBKernelArgs)) return 1;
775cb0
     if (updateKernelPath && newKernelInitrd) {
775cb0
-            if (updateInitrd(config, updateKernelPath, bootPrefix,
775cb0
-                             newKernelInitrd)) return 1;
775cb0
+	    if (newMBKernel) {
775cb0
+		    if (addMBInitrd(config, newMBKernel, updateKernelPath,
775cb0
+					bootPrefix, newKernelInitrd))
775cb0
+			    return 1;
775cb0
+	    } else {
775cb0
+		    if (updateInitrd(config, updateKernelPath, bootPrefix,
775cb0
+					newKernelInitrd))
775cb0
+			return 1;
775cb0
+	    }
775cb0
     }
775cb0
     if (addNewKernel(config, template, bootPrefix, newKernelPath, 
775cb0
                      newKernelTitle, newKernelArgs, newKernelInitrd, 
775cb0
diff --git a/new-kernel-pkg b/new-kernel-pkg
775cb0
index e6096ca..fe0d55a 100755
775cb0
--- a/new-kernel-pkg
775cb0
+++ b/new-kernel-pkg
775cb0
@@ -411,7 +411,8 @@ update() {
775cb0
 	    --update-kernel=$kernelImage \
775cb0
 	    $INITRD \
775cb0
 	    ${kernargs:+--args="$kernargs"} \
775cb0
-	    ${removeargs:+--remove-args="$removeargs"}
775cb0
+	    ${removeargs:+--remove-args="$removeargs"} \
775cb0
+	    ${mbkernel:+--add-multiboot="$mbkernel"}
775cb0
     else
775cb0
 	[ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
775cb0
     fi
775cb0
-- 
775cb0
1.9.3
775cb0