[PATCH 2/2] xen: Disable highmem on qemuarm


Michal Orzel
 

By default, highmem option is enabled for machine types later than
virt-2.12. This allows qemu to place devices and RAM in physical
address space above 32-bits. This can cause issues as according to the
documentation Xen supports up to 12GiB of physical address space.
Recently the issue was observed using runqemu, that was causing Linux
running on top of Xen to stall when trying to access ECAM space placed
by qemu at 256GiB mark. Even though this issue is most probably related
to QEMU and not Xen (the investigation showed that it can map ECAM
space correctly), it is best to avoid such issues by disabling highmem
on qemuarm.

Signed-off-by: Michal Orzel <michal.orzel@...>
---
classes/qemuboot-xen-defaults.bbclass | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/classes/qemuboot-xen-defaults.bbclass b/classes/qemuboot-xen=
-defaults.bbclass
index f1550cc..460cbe6 100644
--- a/classes/qemuboot-xen-defaults.bbclass
+++ b/classes/qemuboot-xen-defaults.bbclass
@@ -23,8 +23,10 @@ QB_DEFAULT_KERNEL:qemuarm =3D "xen-${MACHINE}"
=20
# 64-bit Arm: gic version 3
QB_MACHINE:qemuarm64 =3D "-machine virt,gic-version=3D3 -machine virtual=
ization=3Dtrue"
-# 32-bit Arm
-QB_MACHINE:qemuarm =3D "-machine virt -machine virtualization=3Dtrue"
+# 32-bit Arm: highmem=3Doff
+# Disable highmem so that qemu does not use highmem IO regions that end =
up
+# being placed at the 256GiB mark (e.g. ECAM space) and can cause issues=
in Xen.
+QB_MACHINE:qemuarm =3D "-machine virt,highmem=3Doff -machine virtualizat=
ion=3Dtrue"
=20
# Increase the default qemu memory allocation to allow for the hyperviso=
r.
# Use a weak assignment to allow for change of default and override else=
where.
--=20
2.25.1


Bertrand Marquis
 

Hi Michal,

On 9 Jun 2022, at 10:57, Michal Orzel via lists.yoctoproject.org <michal.orzel=arm.com@...> wrote:

By default, highmem option is enabled for machine types later than
virt-2.12. This allows qemu to place devices and RAM in physical
address space above 32-bits. This can cause issues as according to the
documentation Xen supports up to 12GiB of physical address space.
Recently the issue was observed using runqemu, that was causing Linux
running on top of Xen to stall when trying to access ECAM space placed
by qemu at 256GiB mark. Even though this issue is most probably related
to QEMU and not Xen (the investigation showed that it can map ECAM
space correctly), it is best to avoid such issues by disabling highmem
on qemuarm.

Signed-off-by: Michal Orzel <michal.orzel@...>
Reviewed-by: Bertrand Marquis <bertrand.marquis@...>

Also tested on kirkstone and dom0 boots fine and pci is working.

Thanks a lot
Cheers
Bertrand

---
classes/qemuboot-xen-defaults.bbclass | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/classes/qemuboot-xen-defaults.bbclass b/classes/qemuboot-xen-defaults.bbclass
index f1550cc..460cbe6 100644
--- a/classes/qemuboot-xen-defaults.bbclass
+++ b/classes/qemuboot-xen-defaults.bbclass
@@ -23,8 +23,10 @@ QB_DEFAULT_KERNEL:qemuarm = "xen-${MACHINE}"

# 64-bit Arm: gic version 3
QB_MACHINE:qemuarm64 = "-machine virt,gic-version=3 -machine virtualization=true"
-# 32-bit Arm
-QB_MACHINE:qemuarm = "-machine virt -machine virtualization=true"
+# 32-bit Arm: highmem=off
+# Disable highmem so that qemu does not use highmem IO regions that end up
+# being placed at the 256GiB mark (e.g. ECAM space) and can cause issues in Xen.
+QB_MACHINE:qemuarm = "-machine virt,highmem=off -machine virtualization=true"

# Increase the default qemu memory allocation to allow for the hypervisor.
# Use a weak assignment to allow for change of default and override elsewhere.
--
2.25.1




Christopher Clark
 

On Thu, Jun 9, 2022 at 3:01 AM Bertrand Marquis
<Bertrand.Marquis@...> wrote:

Hi Michal,

On 9 Jun 2022, at 10:57, Michal Orzel via lists.yoctoproject.org <michal.orzel=arm.com@...> wrote:

By default, highmem option is enabled for machine types later than
virt-2.12. This allows qemu to place devices and RAM in physical
address space above 32-bits. This can cause issues as according to the
documentation Xen supports up to 12GiB of physical address space.
Recently the issue was observed using runqemu, that was causing Linux
running on top of Xen to stall when trying to access ECAM space placed
by qemu at 256GiB mark. Even though this issue is most probably related
to QEMU and not Xen (the investigation showed that it can map ECAM
space correctly), it is best to avoid such issues by disabling highmem
on qemuarm.

Signed-off-by: Michal Orzel <michal.orzel@...>
Reviewed-by: Bertrand Marquis <bertrand.marquis@...>
Reviewed-by: Christopher Clark <christopher.w.clark@...>


Also tested on kirkstone and dom0 boots fine and pci is working.
Thanks,

Christopher


Thanks a lot
Cheers
Bertrand

---
classes/qemuboot-xen-defaults.bbclass | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/classes/qemuboot-xen-defaults.bbclass b/classes/qemuboot-xen-defaults.bbclass
index f1550cc..460cbe6 100644
--- a/classes/qemuboot-xen-defaults.bbclass
+++ b/classes/qemuboot-xen-defaults.bbclass
@@ -23,8 +23,10 @@ QB_DEFAULT_KERNEL:qemuarm = "xen-${MACHINE}"

# 64-bit Arm: gic version 3
QB_MACHINE:qemuarm64 = "-machine virt,gic-version=3 -machine virtualization=true"
-# 32-bit Arm
-QB_MACHINE:qemuarm = "-machine virt -machine virtualization=true"
+# 32-bit Arm: highmem=off
+# Disable highmem so that qemu does not use highmem IO regions that end up
+# being placed at the 256GiB mark (e.g. ECAM space) and can cause issues in Xen.
+QB_MACHINE:qemuarm = "-machine virt,highmem=off -machine virtualization=true"

# Increase the default qemu memory allocation to allow for the hypervisor.
# Use a weak assignment to allow for change of default and override elsewhere.
--
2.25.1