qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [Qemu-ppc] [Qemu-discuss] phys_page_find() returning &s


From: BALATON Zoltan
Subject: Re: [Qemu-devel] [Qemu-ppc] [Qemu-discuss] phys_page_find() returning &sections[PHYS_SECTION_UNASSIGNED]
Date: Thu, 24 Dec 2015 23:45:10 +0100 (CET)
User-agent: Alpine 2.20 (BSF 67 2015-01-07)

On Thu, 24 Dec 2015, Programmingkid wrote:
On Dec 24, 2015, at 10:34 AM, Peter Maydell wrote:
On 24 December 2015 at 01:00, Programmingkid <address@hidden> wrote:
I'm having problems with the pci_dma_read() function. When using
a Mac OS X guest, the data that this function returns is all zeros.
After doing a lot of instruction tracing, I tracked the problem to a
function called phys_page_find(). It always returns
&sections[PHYS_SECTION_UNASSIGNED]. What I would like to know is
what is an unassigned section? How is memory suppose to be assigned?

Unassigned here is an area of the physical address space which has
nothing in it (no RAM, no device, just nothing). Depending on the
guest CPU architecture, accessing this might cause a bus fault
or might just return a dummy value. (It looks like it's the latter
for your case.)

One way to get this is if the guest mis-programs the PCI DMA
so that it tries to do DMA from a wrong address. Or maybe the
PCI host controller emulation isn't right and we're not
using the right DMA address. Or there's some RAM or something
that the guest expects to be present in the machine but which
is not implemented by us.

You need to find out why we're trying to DMA to/from this
bogus address, I think.

Mac OS X has to give the RTL8139 network interface card an address to a memory buffer. It is used to send packets to the network interface card from the guest. How the address is allocated in Mac OS X seems simple enough. This address is a physical address and not a virtual address, so that seems good. One address that is used is 0x13d9000. I think that would be around the 19 MB area. It should be ok for the rtl8139 to access because it is in the "system" memory region.

Not sure this is relevant here but previously I've found a patch was necessary to OpenBIOS for me to make DMA work with RTL8139 otherwise sending data was not working correctly. Here's the patch in case it could help or give you an idea:

http://www.openfirmware.info/pipermail/openbios/2014-June/008363.html

But it could be your problem is different and the patch is not relevant.

Regards,
BALATON Zoltan



reply via email to

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