[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-discuss] [Qemu-ppc] phys_page_find() returning §ions[PHYS_
Re: [Qemu-discuss] [Qemu-ppc] phys_page_find() returning §ions[PHYS_SECTION_UNASSIGNED]
Thu, 24 Dec 2015 18:48:43 -0500
On Dec 24, 2015, at 5:45 PM, BALATON Zoltan wrote:
> 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
>>>> §ions[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:
> But it could be your problem is different and the patch is not relevant.
> BALATON Zoltan
Thank you very much for the help. It looks like the Mac OS X driver already
sets the bus mastering bit.