summary refs log tree commit diff stats
path: root/gitlab/issues/target_arm/host_missing/accel_missing/1078.toml
blob: 0b48653bbd9cd2a649cb395dd34136d3b3c22de4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
id = 1078
title = "qemu-system-arm: unable to use LPAE"
state = "closed"
created_at = "2022-06-16T11:56:50.844Z"
closed_at = "2022-06-27T22:55:20.002Z"
labels = ["Closed::Fixed", "target: arm"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/1078"
host-os = "Ubuntu 18.04.6 LTS"
host-arch = "x86_64"
qemu-version = "QEMU emulator version 7.0.50 (v7.0.0-1865-g9ac873a469-dirty)"
guest-os = "irrelevant"
guest-arch = "qemuarm cortex-a15"
description = """Failed to run qemu: qemu-system-arm: Addressing limited to 32 bits,
but memory exceeds it by 1073741824 bytes"""
reproduce = """1. ./configure --target-list=arm-softmmu
2. make
3.
./qemu-system-arm \\
-machine virt,highmem=on \\
-cpu cortex-a15 -smp 4 \\
-m 4096 \\
-kernel ./zImage \\
-drive id=disk0,file=./rootfs.ext4,if=none,format=raw \\
-object rng-random,filename=/dev/urandom,id=rng0 \\
-device virtio-rng-pci,rng=rng0 \\
-device virtio-blk-device,drive=disk0 \\
-device virtio-gpu-pci \\
-serial mon:stdio -serial null \\
-nographic \\
-append 'root=/dev/vda rw mem=4096M ip=dhcp console=ttyAMA0 console=hvc0'"""
additional = """We set physical address bits to 40 if ARM_FEATURE_LPAE is enabled. But ARM_FEATURE_V7VE also implies ARM_FEATURE_LPAE as set later in arm_cpu_realizefn.

We should add condition for ARM_FEATURE_V7VE, otherwise we would not be able to use highmem larger than 3GB even though we have enabled highmem, since we would fail and return right from machvirt_init. 

I have already made a patch to fix this issue.
https://gitlab.com/realhezhe/qemu/-/commit/4dad8167c1c1a7695af88d8929e8d7f6399177de
`hw/arm/virt.c`
```c
        if (object_property_get_bool(cpuobj, "aarch64", NULL)) {
            pa_bits = arm_pamax(armcpu);
        } else if (arm_feature(&armcpu->env, ARM_FEATURE_LPAE)) {
        } else if (arm_feature(&armcpu->env, ARM_FEATURE_LPAE)
                || arm_feature(&armcpu->env, ARM_FEATURE_V7VE)) {
            /* v7 with LPAE */
            pa_bits = 40;
        } else {
```

After applying the patch, I can make sure that the pa_bits has already been set to 40, but qemu hangs later. By bisecting I found if the following commit is reverted qemu can boot up successfully..
39a1fd2528 ("target/arm: Fix handling of LPAE block descriptors")

It can't be quickly determined what's going on here at my side. Maybe the author can help give some hints. Thanks."""