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

Philippe Mathieu-Daudé posted 16 patches 3 years, 7 months ago
Test docker-quick@centos7 failed
Test docker-mingw@fedora failed
Test checkpatch failed
Test FreeBSD failed
Failed in applying to current master (apply log)
There is a newer version of this series
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(-)
[PATCH RESEND v2 00/16] hw: Let DMA/PCI API take MemTxAttrs argument and propagate MemTxResult
Posted by Philippe Mathieu-Daudé 3 years, 7 months ago
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(-)

-- 
2.26.2

Re: [PATCH RESEND v2 00/16] hw: Let DMA/PCI API take MemTxAttrs argument and propagate MemTxResult
Posted by Philippe Mathieu-Daudé 3 years, 6 months ago
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(-)
> 

Re: [PATCH RESEND v2 00/16] hw: Let DMA/PCI API take MemTxAttrs argument and propagate MemTxResult
Posted by Philippe Mathieu-Daudé 3 years, 6 months ago
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