qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [5849] Change MMIO callbacks to use offsets, not absol


From: Robert Reif
Subject: Re: [Qemu-devel] [5849] Change MMIO callbacks to use offsets, not absolute addresses.
Date: Mon, 23 Feb 2009 19:08:33 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14

Paul Brook wrote:
On Monday 23 February 2009, Robert Reif wrote:
Paul Brook wrote:
Should be fixed now.
Not really.  This fixes that specific case but it doesn't fix the
general case where a hardware device needs to call do_unassigned_access
because the hardware device still only has the offset.

qemu has precisely zero devices that do this.
Just because something is currently not implemented properly is
not a good reason to prevent a proper solution from ever being
implemented in the future.
Also note that the current do_unaligned_access is bogus. You can't raise synchronous exceptions from IO handlers. MMU exceptions have special handling to make sure CPU state is consistent, and trap instructions explicitly synchronise virtual CPU state before raising the exception.

This is a problem that currently prevents sun open boot images from passing
their built in self tests.  The BIST does something that should generate an
immediate response but the response doesn't happen until sometime later so
the tests fail and then later complainswhen the response finally happens.
This has been explained to me as a limitation of QEMU.
You could store the physical base in each hardware device and recreate
the physical address but that requires changing all hardware devices
that need to do that.  Why should the hardware drivers go through the
trouble to recreate a physical address when just a few instructions
before then the physical address was known but irreversibly destroyed
when it was converted to an offset.

Part of the reason for making this change is that it's a first step towards making devices bus agnostic. If you have an IOMMU then the address the device sees is different to the address the CPU sees. The most effective way to avoid problems with this to have the device not know/care.

Paul



Sparc devices are passed in their physical addresses. They are currently hard wired because there is no proper bus/slot layer and only on-broad devices are implemented anyway. However each system may have the same hardware located at different locations so this may not be typical QEMU behavior. Real hardware deals with real addresses. An IOMMU is irrelevant because the IOMMU emulation will take care of the virtual
to physical translation.





reply via email to

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