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

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

 



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@xxxxxxxxx>

[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@xxxxxxxxxxxxxx>
Cc: Laurent Vivier <laurent@xxxxxxxxx>
Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx>
---
  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




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux