[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface |
Date: |
Wed, 01 Jun 2011 08:09:29 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc15 Thunderbird/3.1.10 |
On 06/01/2011 07:52 AM, Eduard - Gabriel Munteanu wrote:
> The main selling point is there are more chances to screw up if every
> bus layer implements these manually. And it's really convenient,
> especially if we get to add another ld/st.
If we drop the ld/st, we're talking about 5 lines for every bus layer.
If I recall, there was just the one driver that actually uses the ld/st
interface; most used the read/write interface.
> If I understand correctly you need some sort of shared state between
> IOMMUs or units residing on different buses. Then you should be able to
> get to it even with this API, just like I do with my AMD IOMMU state by
> upcasting. It doesn't seem to matter whether you've got an opaque, that
> opaque could very well be reachable by upcasting.
>
> Did I get this wrong?
Can you honestly tell me that
> +static int amd_iommu_translate(DMADevice *dev,
> + dma_addr_t addr,
> + dma_addr_t *paddr,
> + dma_addr_t *len,
> + int is_write)
> +{
> + PCIDevice *pci_dev = container_of(dev, PCIDevice, dma);
> + PCIDevice *iommu_dev = DO_UPCAST(PCIDevice, qdev, dev->mmu->iommu);
> + AMDIOMMUState *s = DO_UPCAST(AMDIOMMUState, dev, iommu_dev);
THREE (3) upcasts is a sane to write maintainable software?
The margin for error here is absolutely enormous.
If you had just passed in that AMDIOMMUState* as the opaque
value, it would be trivial to look at the initialization
statement and the callback function to verify that the right
value is being passed.
r~
- [Qemu-devel] [RFC PATCH 00/13] AMD IOMMU emulation patches, another try, Eduard - Gabriel Munteanu, 2011/06/01
- [Qemu-devel] [RFC PATCH 02/13] pci: add IOMMU support via the generic DMA layer, Eduard - Gabriel Munteanu, 2011/06/01
- [Qemu-devel] [RFC PATCH 03/13] AMD IOMMU emulation, Eduard - Gabriel Munteanu, 2011/06/01
- [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
- Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
- Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface,
Richard Henderson <=
- Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
- Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface, Richard Henderson, 2011/06/01
- Re: [Qemu-devel] [RFC PATCH 01/13] Generic DMA memory access interface, David Gibson, 2011/06/02
[Qemu-devel] [RFC PATCH 04/13] ide: use the DMA memory access interface for PCI IDE controllers, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 05/13] rtl8139: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 06/13] eepro100: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 07/13] ac97: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 08/13] es1370: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 09/13] e1000: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01
[Qemu-devel] [RFC PATCH 10/13] lsi53c895a: use the DMA memory access interface, Eduard - Gabriel Munteanu, 2011/06/01