[Qemu-devel] [PATCH v5 0/4] allow to load initrd below 4G for recent kernel

Li Zhijian posted 4 patches 5 years, 3 months ago
Test checkpatch failed
Test docker-clang@ubuntu passed
Test docker-quick@centos7 passed
Test asan passed
Test docker-mingw@fedora passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com
Maintainers: Peter Crosthwaite <crosthwaite.peter@gmail.com>, Paolo Bonzini <pbonzini@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Richard Henderson <rth@twiddle.net>, Eduardo Habkost <ehabkost@redhat.com>
There is a newer version of this series
exec.c                                       | 47 ++++++++++++++--------------
hw/core/loader.c                             | 11 +++----
hw/i386/pc.c                                 | 32 ++++++++++++++-----
include/exec/cpu-all.h                       |  2 +-
include/exec/cpu-common.h                    |  8 ++---
include/exec/memory.h                        | 22 ++++++-------
include/standard-headers/asm-x86/bootparam.h | 34 ++++++++++++++++++++
scripts/update-linux-headers.sh              |  4 +++
8 files changed, 106 insertions(+), 54 deletions(-)
create mode 100644 include/standard-headers/asm-x86/bootparam.h
[Qemu-devel] [PATCH v5 0/4] allow to load initrd below 4G for recent kernel
Posted by Li Zhijian 5 years, 3 months ago
Long long ago, linux kernel has supported up to 4G initrd, but it's header
still hard code to allow loading initrd below 2G only.
 cutting from arch/boot/x86/header.S:
 # (Header version 0x0203 or later) the highest safe address for the contents
 # of an initrd. The current kernel allows up to 4 GB, but leave it at 2 GB to
 # avoid possible bootloader bugs.

In order to support more than 2G initrd, qemu must allow loading initrd
above 2G address. Luckly, recent kernel introduced a new field to linux header
named xloadflags:XLF_CAN_BE_LOADED_ABOVE_4G which tells bootloader an optional
and safe address to load initrd.

It's believed that if XLF_CAN_BE_LOADED_ABOVE_4G is set, initrd can
be loaded into any address.

Default roms(Seabios + optionrom(linuxboot_dma)) works as expected with this
patchset.

I stole some comments from yours, fell free to let me know if you don't like this.

changes:
V5: add a few reviewed-tag and update 4/4 changelog and comments
V4:
  - add Reviwed-by tag to 1/4 and 2/4
  - use scripts/update-linux-headers.sh to import bootparam.h
  - minor fix at commit log
V3:
 - rebase code basing on http://patchwork.ozlabs.org/cover/1005990 and
   https://patchew.org/QEMU/20181122133507.30950-1-peter.maydell@linaro.org
 - add new patch 3/4 to import header bootparam.h (Michael S. Tsirkin)

V2: add 2 patches(3/5, 4/5) to fix potential loading issue.


CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: "Michael S. Tsirkin" <mst@redhat.com>
CC: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
CC: Stefano Garzarella <sgarzare@redhat.com>
CC: Peter Crosthwaite <crosthwaite.peter@gmail.com>
CC: Peter Maydell <peter.maydell@linaro.org>

Li Zhijian (4):
  unify len and addr type for memory/address APIs
  hw/core/loader.c: Read as long as possible in load_image_size()
  i386: import & use bootparam.h
  i386: allow to load initrd below 4G for recent linux

 exec.c                                       | 47 ++++++++++++++--------------
 hw/core/loader.c                             | 11 +++----
 hw/i386/pc.c                                 | 32 ++++++++++++++-----
 include/exec/cpu-all.h                       |  2 +-
 include/exec/cpu-common.h                    |  8 ++---
 include/exec/memory.h                        | 22 ++++++-------
 include/standard-headers/asm-x86/bootparam.h | 34 ++++++++++++++++++++
 scripts/update-linux-headers.sh              |  4 +++
 8 files changed, 106 insertions(+), 54 deletions(-)
 create mode 100644 include/standard-headers/asm-x86/bootparam.h

-- 
2.7.4


Re: [Qemu-devel] [PATCH v5 0/4] allow to load initrd below 4G for recent kernel
Posted by no-reply@patchew.org 5 years, 3 months ago
Patchew URL: https://patchew.org/QEMU/1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Type: series
Message-id: 1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com
Subject: [Qemu-devel] [PATCH v5 0/4] allow to load initrd below 4G for recent kernel

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback --color=always base..
=== TEST SCRIPT END ===

From https://github.com/patchew-project/qemu
 * [new tag]         patchew/1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com -> patchew/1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com
warning: remote HEAD refers to nonexistent ref, unable to checkout.

Switched to a new branch 'test'
a527fea i386: allow to load initrd below 4G for recent linux
7236341 i386: import & use bootparam.h
ae2981c hw/core/loader.c: Read as long as possible in load_image_size()
49e603a unify len and addr type for memory/address APIs

=== OUTPUT BEGIN ===
1/4 Checking commit 49e603a945f2 (unify len and addr type for memory/address APIs)
WARNING: line over 80 characters
#38: FILE: exec.c:2852:
+                                      MemTxAttrs attrs, uint8_t *buf, hwaddr len);

total: 0 errors, 1 warnings, 270 lines checked

Patch 1/4 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
2/4 Checking commit ae2981cbf961 (hw/core/loader.c: Read as long as possible in load_image_size())
3/4 Checking commit 7236341ea82b (i386: import & use bootparam.h)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#42: 
new file mode 100644

ERROR: line over 90 characters
#91: FILE: scripts/update-linux-headers.sh:125:
+        sed -e '/__ASSEMBLY__/,/__ASSEMBLY__/d' $tmpdir/include/asm/bootparam.h > $tmpdir/bootparam.h

WARNING: line over 80 characters
#92: FILE: scripts/update-linux-headers.sh:126:
+        cp_portable $tmpdir/bootparam.h "$output/include/standard-headers/asm-$arch"

total: 1 errors, 2 warnings, 64 lines checked

Patch 3/4 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

4/4 Checking commit a527fea2b274 (i386: allow to load initrd below 4G for recent linux)
ERROR: spaces required around that '+' (ctx:VxV)
#41: FILE: hw/i386/pc.c:1124:
+        lduw_p(header+0x236) & XLF_CAN_BE_LOADED_ABOVE_4G) {
                      ^

total: 1 errors, 0 warnings, 30 lines checked

Patch 4/4 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/1547197071-14504-1-git-send-email-lizhijian@cn.fujitsu.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com