mbox series

[RESEND,v2,00/16] hw: Let DMA/PCI API take MemTxAttrs argument and propagate MemTxResult

Message ID 20201001172519.1620782-1-philmd@redhat.com
Headers show
Series hw: Let DMA/PCI API take MemTxAttrs argument and propagate MemTxResult | expand

Message

Philippe Mathieu-Daudé Oct. 1, 2020, 5:25 p.m. UTC
This is a respin of:

"dma: Let the DMA API take MemTxAttrs argument and propagate MemTxResult"
https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html

and:
"pci: Let PCI DMA API functions propagate a MemTxResult"
https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html

(resent using correct git-profile).

The DMA API propagates MemTxResult:
- MEMTX_OK,
- MEMTX_device_ERROR,
- MEMTX_DECODE_ERROR.

Let the PCI DMA API propagate them, as they are
clearer than an undocumented 'int'.

Klaus Jensen (1):
  pci: pass along the return value of dma_memory_rw

Philippe Mathieu-Daudé (15):
  docs/devel/loads-stores: Add regexp for DMA functions
  dma: Document address_space_map/address_space_unmap() prototypes
  dma: Let dma_memory_set() propagate MemTxResult
  dma: Let dma_memory_rw() propagate MemTxResult
  dma: Let dma_memory_read() propagate MemTxResult
  dma: Let dma_memory_write() propagate MemTxResult
  dma: Let dma_memory_valid() take MemTxAttrs argument
  dma: Let dma_memory_set() take MemTxAttrs argument
  dma: Let dma_memory_rw_relaxed() take MemTxAttrs argument
  dma: Let dma_memory_rw() take MemTxAttrs argument
  dma: Let dma_memory_read/write() take MemTxAttrs argument
  dma: Let dma_memory_map() take MemTxAttrs argument
  pci: Let pci_dma_rw() propagate MemTxResult
  pci: Let pci_dma_read() propagate MemTxResult
  pci: Let pci_dma_write() propagate MemTxResult

 docs/devel/loads-stores.rst   |   2 +
 include/hw/pci/pci.h          |  57 +++++++++++--
 include/hw/ppc/spapr_vio.h    |  11 ++-
 include/sysemu/dma.h          | 155 +++++++++++++++++++++++++++-------
 dma-helpers.c                 |  16 ++--
 hw/arm/musicpal.c             |  13 +--
 hw/arm/smmu-common.c          |   3 +-
 hw/arm/smmuv3.c               |  14 +--
 hw/core/generic-loader.c      |   3 +-
 hw/display/virtio-gpu.c       |   8 +-
 hw/dma/pl330.c                |  12 ++-
 hw/dma/sparc32_dma.c          |  16 ++--
 hw/dma/xlnx-zynq-devcfg.c     |   6 +-
 hw/dma/xlnx_dpdma.c           |  10 ++-
 hw/hyperv/vmbus.c             |   8 +-
 hw/i386/amd_iommu.c           |  16 ++--
 hw/i386/intel_iommu.c         |  28 +++---
 hw/ide/ahci.c                 |   9 +-
 hw/ide/macio.c                |   2 +-
 hw/intc/spapr_xive.c          |   3 +-
 hw/intc/xive.c                |   7 +-
 hw/misc/bcm2835_property.c    |   3 +-
 hw/misc/macio/mac_dbdma.c     |  10 ++-
 hw/net/allwinner-sun8i-emac.c |  21 +++--
 hw/net/ftgmac100.c            |  25 ++++--
 hw/net/imx_fec.c              |  32 ++++---
 hw/nvram/fw_cfg.c             |  12 ++-
 hw/pci-host/pnv_phb3.c        |   5 +-
 hw/pci-host/pnv_phb3_msi.c    |   9 +-
 hw/pci-host/pnv_phb4.c        |   7 +-
 hw/sd/allwinner-sdhost.c      |  14 +--
 hw/sd/sdhci.c                 |  35 +++++---
 hw/usb/hcd-dwc2.c             |   8 +-
 hw/usb/hcd-ehci.c             |   6 +-
 hw/usb/hcd-ohci.c             |  28 +++---
 hw/usb/hcd-xhci.c             |  18 ++--
 hw/usb/libhw.c                |   3 +-
 hw/virtio/virtio.c            |   6 +-
 38 files changed, 439 insertions(+), 202 deletions(-)

Comments

Philippe Mathieu-Daudé Oct. 22, 2020, 2:44 p.m. UTC | #1
ping?

On 10/1/20 7:25 PM, Philippe Mathieu-Daudé wrote:
> This is a respin of:
> 
> "dma: Let the DMA API take MemTxAttrs argument and propagate MemTxResult"
> https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html
> 
> and:
> "pci: Let PCI DMA API functions propagate a MemTxResult"
> https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html
> 
> (resent using correct git-profile).
> 
> The DMA API propagates MemTxResult:
> - MEMTX_OK,
> - MEMTX_device_ERROR,
> - MEMTX_DECODE_ERROR.
> 
> Let the PCI DMA API propagate them, as they are
> clearer than an undocumented 'int'.
> 
> Klaus Jensen (1):
>    pci: pass along the return value of dma_memory_rw
> 
> Philippe Mathieu-Daudé (15):
>    docs/devel/loads-stores: Add regexp for DMA functions
>    dma: Document address_space_map/address_space_unmap() prototypes
>    dma: Let dma_memory_set() propagate MemTxResult
>    dma: Let dma_memory_rw() propagate MemTxResult
>    dma: Let dma_memory_read() propagate MemTxResult
>    dma: Let dma_memory_write() propagate MemTxResult
>    dma: Let dma_memory_valid() take MemTxAttrs argument
>    dma: Let dma_memory_set() take MemTxAttrs argument
>    dma: Let dma_memory_rw_relaxed() take MemTxAttrs argument
>    dma: Let dma_memory_rw() take MemTxAttrs argument
>    dma: Let dma_memory_read/write() take MemTxAttrs argument
>    dma: Let dma_memory_map() take MemTxAttrs argument
>    pci: Let pci_dma_rw() propagate MemTxResult
>    pci: Let pci_dma_read() propagate MemTxResult
>    pci: Let pci_dma_write() propagate MemTxResult
> 
>   docs/devel/loads-stores.rst   |   2 +
>   include/hw/pci/pci.h          |  57 +++++++++++--
>   include/hw/ppc/spapr_vio.h    |  11 ++-
>   include/sysemu/dma.h          | 155 +++++++++++++++++++++++++++-------
>   dma-helpers.c                 |  16 ++--
>   hw/arm/musicpal.c             |  13 +--
>   hw/arm/smmu-common.c          |   3 +-
>   hw/arm/smmuv3.c               |  14 +--
>   hw/core/generic-loader.c      |   3 +-
>   hw/display/virtio-gpu.c       |   8 +-
>   hw/dma/pl330.c                |  12 ++-
>   hw/dma/sparc32_dma.c          |  16 ++--
>   hw/dma/xlnx-zynq-devcfg.c     |   6 +-
>   hw/dma/xlnx_dpdma.c           |  10 ++-
>   hw/hyperv/vmbus.c             |   8 +-
>   hw/i386/amd_iommu.c           |  16 ++--
>   hw/i386/intel_iommu.c         |  28 +++---
>   hw/ide/ahci.c                 |   9 +-
>   hw/ide/macio.c                |   2 +-
>   hw/intc/spapr_xive.c          |   3 +-
>   hw/intc/xive.c                |   7 +-
>   hw/misc/bcm2835_property.c    |   3 +-
>   hw/misc/macio/mac_dbdma.c     |  10 ++-
>   hw/net/allwinner-sun8i-emac.c |  21 +++--
>   hw/net/ftgmac100.c            |  25 ++++--
>   hw/net/imx_fec.c              |  32 ++++---
>   hw/nvram/fw_cfg.c             |  12 ++-
>   hw/pci-host/pnv_phb3.c        |   5 +-
>   hw/pci-host/pnv_phb3_msi.c    |   9 +-
>   hw/pci-host/pnv_phb4.c        |   7 +-
>   hw/sd/allwinner-sdhost.c      |  14 +--
>   hw/sd/sdhci.c                 |  35 +++++---
>   hw/usb/hcd-dwc2.c             |   8 +-
>   hw/usb/hcd-ehci.c             |   6 +-
>   hw/usb/hcd-ohci.c             |  28 +++---
>   hw/usb/hcd-xhci.c             |  18 ++--
>   hw/usb/libhw.c                |   3 +-
>   hw/virtio/virtio.c            |   6 +-
>   38 files changed, 439 insertions(+), 202 deletions(-)
>
Philippe Mathieu-Daudé Oct. 23, 2020, 3:09 p.m. UTC | #2
Hi Paolo,

On 10/22/20 4:44 PM, Philippe Mathieu-Daudé wrote:
> ping?

In case the rationale is not clear, the motivation
for this series is to make the API more robust to
enforce correct use by the consumers.

Currently the MemTxResult return value is not
propagated, so lost.

If adding the MemTxAttrs argument could introduce
security issues and you need more time to consider
this change, I can repost only the MemTxResult
propagation patches, and we'll discuss the MemTxAttrs
after the 5.2 release.

Laszlo Ersek pointed me to commit f794aa4a2fd
("target-i386: introduce cpu_get_mem_attrs") to
understand how MemTxAttrs is used by SMM on X86.

 From the review comment from Edgar in v1, I understand
there should not be security issues with the current
codebase.
https://www.mail-archive.com/qemu-block@nongnu.org/msg74077.html

Regards,

Phil.

> 
> On 10/1/20 7:25 PM, Philippe Mathieu-Daudé wrote:
>> This is a respin of:
>>
>> "dma: Let the DMA API take MemTxAttrs argument and propagate MemTxResult"
>> https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html
>>
>> and:
>> "pci: Let PCI DMA API functions propagate a MemTxResult"
>> https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg02048.html
>>
>> (resent using correct git-profile).
>>
>> The DMA API propagates MemTxResult:
>> - MEMTX_OK,
>> - MEMTX_device_ERROR,
>> - MEMTX_DECODE_ERROR.
>>
>> Let the PCI DMA API propagate them, as they are
>> clearer than an undocumented 'int'.
>>
>> Klaus Jensen (1):
>>    pci: pass along the return value of dma_memory_rw
>>
>> Philippe Mathieu-Daudé (15):
>>    docs/devel/loads-stores: Add regexp for DMA functions
>>    dma: Document address_space_map/address_space_unmap() prototypes
>>    dma: Let dma_memory_set() propagate MemTxResult
>>    dma: Let dma_memory_rw() propagate MemTxResult
>>    dma: Let dma_memory_read() propagate MemTxResult
>>    dma: Let dma_memory_write() propagate MemTxResult
>>    dma: Let dma_memory_valid() take MemTxAttrs argument
>>    dma: Let dma_memory_set() take MemTxAttrs argument
>>    dma: Let dma_memory_rw_relaxed() take MemTxAttrs argument
>>    dma: Let dma_memory_rw() take MemTxAttrs argument
>>    dma: Let dma_memory_read/write() take MemTxAttrs argument
>>    dma: Let dma_memory_map() take MemTxAttrs argument
>>    pci: Let pci_dma_rw() propagate MemTxResult
>>    pci: Let pci_dma_read() propagate MemTxResult
>>    pci: Let pci_dma_write() propagate MemTxResult