mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
hw/mips: align initrd to 64KB to avoid kernel error
The Linux kernel can be configured to use 64KB pages, but it also requires initrd to be page aligned. Therefore, to be safe, align the initrd to 64KB using a new INITRD_PAGE_MASK rather than TARGET_PAGE_MASK. Signed-off-by: James Hogan <james.hogan@imgtec.com> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
ea0a4f3441
commit
05b3274b6b
@ -126,7 +126,7 @@ static int64_t load_kernel (CPUMIPSState *env)
|
|||||||
if (loaderparams.initrd_filename) {
|
if (loaderparams.initrd_filename) {
|
||||||
initrd_size = get_image_size (loaderparams.initrd_filename);
|
initrd_size = get_image_size (loaderparams.initrd_filename);
|
||||||
if (initrd_size > 0) {
|
if (initrd_size > 0) {
|
||||||
initrd_offset = (kernel_high + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK;
|
initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;
|
||||||
if (initrd_offset + initrd_size > ram_size) {
|
if (initrd_offset + initrd_size > ram_size) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"qemu: memory too small for initial ram disk '%s'\n",
|
"qemu: memory too small for initial ram disk '%s'\n",
|
||||||
|
@ -792,7 +792,7 @@ static int64_t load_kernel (void)
|
|||||||
if (loaderparams.initrd_filename) {
|
if (loaderparams.initrd_filename) {
|
||||||
initrd_size = get_image_size (loaderparams.initrd_filename);
|
initrd_size = get_image_size (loaderparams.initrd_filename);
|
||||||
if (initrd_size > 0) {
|
if (initrd_size > 0) {
|
||||||
initrd_offset = (kernel_high + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK;
|
initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;
|
||||||
if (initrd_offset + initrd_size > ram_size) {
|
if (initrd_offset + initrd_size > ram_size) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"qemu: memory too small for initial ram disk '%s'\n",
|
"qemu: memory too small for initial ram disk '%s'\n",
|
||||||
|
@ -83,7 +83,7 @@ static int64_t load_kernel(void)
|
|||||||
if (loaderparams.initrd_filename) {
|
if (loaderparams.initrd_filename) {
|
||||||
initrd_size = get_image_size (loaderparams.initrd_filename);
|
initrd_size = get_image_size (loaderparams.initrd_filename);
|
||||||
if (initrd_size > 0) {
|
if (initrd_size > 0) {
|
||||||
initrd_offset = (kernel_high + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK;
|
initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;
|
||||||
if (initrd_offset + initrd_size > loaderparams.ram_size) {
|
if (initrd_offset + initrd_size > loaderparams.ram_size) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"qemu: memory too small for initial ram disk '%s'\n",
|
"qemu: memory too small for initial ram disk '%s'\n",
|
||||||
|
@ -102,7 +102,7 @@ static int64_t load_kernel(void)
|
|||||||
if (loaderparams.initrd_filename) {
|
if (loaderparams.initrd_filename) {
|
||||||
initrd_size = get_image_size (loaderparams.initrd_filename);
|
initrd_size = get_image_size (loaderparams.initrd_filename);
|
||||||
if (initrd_size > 0) {
|
if (initrd_size > 0) {
|
||||||
initrd_offset = (kernel_high + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK;
|
initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;
|
||||||
if (initrd_offset + initrd_size > ram_size) {
|
if (initrd_offset + initrd_size > ram_size) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"qemu: memory too small for initial ram disk '%s'\n",
|
"qemu: memory too small for initial ram disk '%s'\n",
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
#define HW_MIPS_H
|
#define HW_MIPS_H
|
||||||
/* Definitions for mips board emulation. */
|
/* Definitions for mips board emulation. */
|
||||||
|
|
||||||
|
/* Kernels can be configured with 64KB pages */
|
||||||
|
#define INITRD_PAGE_MASK (~((1 << 16) - 1))
|
||||||
|
|
||||||
#include "exec/memory.h"
|
#include "exec/memory.h"
|
||||||
|
|
||||||
/* gt64xxx.c */
|
/* gt64xxx.c */
|
||||||
|
Loading…
Reference in New Issue
Block a user