qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH qemu v2 2/2] m68k: align bootinfo strings and data to 4 bytes


From: Laurent Vivier
Subject: Re: [PATCH qemu v2 2/2] m68k: align bootinfo strings and data to 4 bytes
Date: Mon, 26 Sep 2022 15:00:42 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1

Le 26/09/2022 à 13:39, Jason A. Donenfeld a écrit :
Various tools, such as kexec-tools and m68k-bootinfo, expect each
bootinfo entry to be aligned to 4 bytes, not 2 bytes. So adjust the
padding to fill this out as such.

Agree, I found the same problem using petitboot as a ROM for the virt machine 
[1].
(I didn't update BOOTINFOSTR() but I think I should).

Reviewed-by: Laurent Vivier <laurent@vivier.eu>

[1] https://github.com/vivier/qemu-m68k/commits/m68k-virt

Also, break apart the padding additions from the other field length
additions, so that it's more clear why these magic numbers are being
added, and comment them too.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
  hw/m68k/bootinfo.h | 10 ++++++----
  1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/hw/m68k/bootinfo.h b/hw/m68k/bootinfo.h
index bd8b212fd3..897162b818 100644
--- a/hw/m68k/bootinfo.h
+++ b/hw/m68k/bootinfo.h
@@ -48,13 +48,14 @@
          stw_phys(as, base, id); \
          base += 2; \
          stw_phys(as, base, \
-                 (sizeof(struct bi_record) + strlen(string) + 2) & ~1); \
+                 (sizeof(struct bi_record) + strlen(string) + \
+                  1 /* null termination */ + 3 /* padding */) & ~3); \
          base += 2; \
          for (i = 0; string[i]; i++) { \
              stb_phys(as, base++, string[i]); \
          } \
          stb_phys(as, base++, 0); \
-        base = (base + 1) & ~1; \
+        base = (base + 3) & ~3; \
      } while (0)
#define BOOTINFODATA(as, base, id, data, len) \
@@ -63,13 +64,14 @@
          stw_phys(as, base, id); \
          base += 2; \
          stw_phys(as, base, \
-                 (sizeof(struct bi_record) + len + 3) & ~1); \
+                 (sizeof(struct bi_record) + len + \
+                  2 /* length field */ + 3 /* padding */) & ~3); \
          base += 2; \
          stw_phys(as, base, len); \
          base += 2; \
          for (i = 0; i < len; ++i) { \
              stb_phys(as, base++, data[i]); \
          } \
-        base = (base + 1) & ~1; \
+        base = (base + 3) & ~3; \
      } while (0)
  #endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]