qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] QEMU etc/e820 and fw_cfg


From: Gordan Bobic
Subject: Re: [Qemu-devel] QEMU etc/e820 and fw_cfg
Date: Wed, 04 Mar 2015 19:12:10 +0000
User-agent: Roundcube Webmail/1.0.3

On 2015-03-04 13:20, Gerd Hoffmann wrote:
On Di, 2015-03-03 at 10:32 +0000, Gordan Bobic wrote:
I need to pass a custom e820 map to a virtual machine for
troubleshooting purposes and working around IOMMU hardware
bugs.

I have found references to a custom map being providable
via an external file, mentioned as "etc/e820" and "fw_cfg".

That is the (filesystem-like) interface between qemu and firmware
(seabios usually), it doesn't refer to a on-disk file.

Unfortunately, I have not found any documentation that
explains how to use this from userspace when invoking
qemu.

You can't.

Passing a different e820 map requires patching qemu (or seabios, which
mangles the e820 table to add reservations for acpi etc).

What exactly do you need?

Thank you for responding. The situation I have is that my PCIe
bridges are buggy and they seem to bypass the upstream PCIe hub
IOMMU. The problem with this is that when the guest accesses
RAM within it's emulated address space that overlaps with
PCI I/O memory ranges in the host's address space, what should
have ended up in RAM in the guest ends up trampling over the
IOMEM on the host. This typically results in crashing the
host (or worse, if it happens to trample any IOMEM regions
mapped to disk controllers).

The solution seems to be to prevent the guest from accessing
the areas of memory that are mapped as something other than
RAM on the host.

So what I need to be able to do is set a bseline e820 map
that marks all areas as reserved if they are not marked
as usable on the host.

I wrote a prototype patch (an ugly bodge not for public
consumption) for Xen to test the theory of whether this
would fix the problem, and it did. But I would like to
use KVM now instead. I tried using the max-ram-below-4g
option to --machine, and that fixes a part of the problem,
but because it doesn't mark the memory between the set
value and 4GB as reserved, it ends up mapping the PCI
devices passed through to the guest into that area, which
similarly ends up trampling over the host's IOMEM area
and crashing the machine. So I need a way to explicitly
reserve certain memory ranges in the map.

What is the most sensible way to do this with QEMU?

Gordan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]