----- Messaggio originale ----- > Da: "Peter Maydell" <peter.mayd...@linaro.org> > A: "Paolo Bonzini" <pbonz...@redhat.com> > Cc: "Anthony Liguori" <aligu...@us.ibm.com>, patc...@linaro.org, > qemu-devel@nongnu.org, "David Gibson" > <da...@gibson.dropbear.id.au> > Inviato: Martedì, 2 aprile 2013 22:33:48 > Oggetto: Re: [PATCH 0/2] Drop support for qdev taddr properties > > On 2 April 2013 20:09, Paolo Bonzini <pbonz...@redhat.com> wrote: > > Il 02/04/2013 19:07, Peter Maydell ha scritto: > >> It's not a problem with sysbus, it's a problem with people > >> being lazy about implementing things that do DMA. For instance > >> PCI doesn't take a MemoryRegion* for DMA, it just assumes it > >> can DMA into the system address space. > > > > PCI does provide its own DMAContext*, which includes an AddressSpace. > > This address space ("view of the world") is different for each device. > > Yes, but (unless you're using the legacy stuff spapr uses) > it generates it via get_system_memory(), which is always > wrong (though often close enough that Linux will work right).
It also respects the bus master enable bit: memory_region_init_alias(&pci_dev->bus_master_enable_region, "bus master", get_system_memory(), 0, memory_region_size(get_system_memory())); memory_region_set_enabled(&pci_dev->bus_master_enable_region, false); address_space_init(&pci_dev->bus_master_as, &pci_dev->bus_master_enable_region); > >> (it does let you pass > >> a DMAContext, but maybe that goes away with the patches you > >> mention above; it's only used for spapr.) > > > > It is extended so that it is also used for spapr with those patches. > > I'm confused. Do you mean that it's changed so that spapr passes > a MemoryRegion* rather than a DMAContext*, or so that everything > uses a DMAContext* ? (The comments in pci.c suggest that the former > is the intended approach.) Yes, the former. More precisely, everything uses an AddressSpace*, in fact (that was the part that Avi didn't write) dma-helpers.c can use AddressSpace* instead of DMAContext*. spapr right now needs a special translate pointer embedded in the DMAContext. With the iommu MemoryRegion patches, it can put the translate function pointer into a translation MemoryRegion. Then the AddressSpace points to that MemoryRegion. Paolo