All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant
@ 2022-01-04  8:54 Philippe Mathieu-Daudé
  2022-01-04  8:54 ` [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools Philippe Mathieu-Daudé
                   ` (9 more replies)
  0 siblings, 10 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

Since v1:
- Addressed David review comment (stick to dma_addr_t type)
- Addressed Peter review comment (incorrect doc string)

Hi,

This series aims to clarify a bit the DMA API, in particular the
'size' argument which is not clear enough (as we use multiple types
for it). This helps avoiding build failures on 32-bit host [*] (and
likely overflows calculation too IMO).

Some units using the DMA API are first removed from user-mode
emulation to avoid build failure (they shouldn't be there in
the first place).

Then some variables are renamed for clarity (no functional change).

Finally we replace misuses with dma_addr_t typedef. The previous
patch which failed on 32-bit host applied on top (not failing anymore).

Regards,

Phil.

[*] https://www.mail-archive.com/qemu-devel@nongnu.org/msg858825.html

Supersedes: <20211231114901.976937-1-philmd@redhat.com>

Philippe Mathieu-Daudé (9):
  hw/nvram: Restrict stub to sysemu and tools
  hw/pci: Restrict pci-bus stub to sysemu
  hw/pci: Document pci_dma_map()
  hw/dma: Remove CONFIG_USER_ONLY check
  hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument
  hw/scsi: Rename SCSIRequest::resid as 'residual'
  hw/dma: Fix format string issues using dma_addr_t
  hw/dma: Use dma_addr_t type definition when relevant
  hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult

 hw/rdma/rdma_utils.h   |  2 +-
 include/hw/pci/pci.h   | 12 ++++++
 include/hw/scsi/scsi.h |  4 +-
 include/sysemu/dma.h   | 31 ++++++++-------
 hw/ide/ahci.c          | 10 ++---
 hw/nvme/ctrl.c         |  6 +--
 hw/rdma/rdma_utils.c   | 14 +++----
 hw/scsi/megasas.c      | 85 +++++++++++++++++++++++++++++-------------
 hw/scsi/scsi-bus.c     | 12 +++---
 hw/scsi/scsi-disk.c    |  4 +-
 softmmu/dma-helpers.c  | 34 +++++++----------
 hw/nvram/meson.build   |  6 ++-
 hw/rdma/trace-events   |  2 +-
 stubs/meson.build      |  4 +-
 14 files changed, 134 insertions(+), 92 deletions(-)

-- 
2.33.1



^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:17   ` Richard Henderson
  2022-01-04  8:54 ` [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu Philippe Mathieu-Daudé
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

User-mode emulation doesn't need the fw_cfg stub.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 hw/nvram/meson.build | 6 ++++--
 stubs/meson.build    | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/hw/nvram/meson.build b/hw/nvram/meson.build
index 202a5466e63..f5ee9f6b88c 100644
--- a/hw/nvram/meson.build
+++ b/hw/nvram/meson.build
@@ -1,5 +1,7 @@
-# QOM interfaces must be available anytime QOM is used.
-qom_ss.add(files('fw_cfg-interface.c'))
+if have_system or have_tools
+  # QOM interfaces must be available anytime QOM is used.
+  qom_ss.add(files('fw_cfg-interface.c'))
+endif
 
 softmmu_ss.add(files('fw_cfg.c'))
 softmmu_ss.add(when: 'CONFIG_CHRP_NVRAM', if_true: files('chrp_nvram.c'))
diff --git a/stubs/meson.build b/stubs/meson.build
index 71469c1d50a..363f6fa785d 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -11,7 +11,6 @@
 stub_ss.add(files('dump.c'))
 stub_ss.add(files('error-printf.c'))
 stub_ss.add(files('fdset.c'))
-stub_ss.add(files('fw_cfg.c'))
 stub_ss.add(files('gdbstub.c'))
 stub_ss.add(files('get-vm-name.c'))
 if linux_io_uring.found()
@@ -51,6 +50,7 @@
   stub_ss.add(files('replay-tools.c'))
 endif
 if have_system
+  stub_ss.add(files('fw_cfg.c'))
   stub_ss.add(files('semihost.c'))
   stub_ss.add(files('usb-dev-stub.c'))
   stub_ss.add(files('xen-hw-stub.c'))
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
  2022-01-04  8:54 ` [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:18   ` Richard Henderson
  2022-01-10  8:43   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 3/9] hw/pci: Document pci_dma_map() Philippe Mathieu-Daudé
                   ` (7 subsequent siblings)
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Neither tools nor user-mode emulation require the PCI bus stub.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 stubs/meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/stubs/meson.build b/stubs/meson.build
index 363f6fa785d..d359cbe1ad7 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -26,7 +26,6 @@
 stub_ss.add(files('module-opts.c'))
 stub_ss.add(files('monitor.c'))
 stub_ss.add(files('monitor-core.c'))
-stub_ss.add(files('pci-bus.c'))
 stub_ss.add(files('qemu-timer-notify-cb.c'))
 stub_ss.add(files('qmp_memory_device.c'))
 stub_ss.add(files('qmp-command-available.c'))
@@ -51,6 +50,7 @@
 endif
 if have_system
   stub_ss.add(files('fw_cfg.c'))
+  stub_ss.add(files('pci-bus.c'))
   stub_ss.add(files('semihost.c'))
   stub_ss.add(files('usb-dev-stub.c'))
   stub_ss.add(files('xen-hw-stub.c'))
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 3/9] hw/pci: Document pci_dma_map()
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
  2022-01-04  8:54 ` [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools Philippe Mathieu-Daudé
  2022-01-04  8:54 ` [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:20   ` Richard Henderson
  2022-01-04  8:54 ` [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check Philippe Mathieu-Daudé
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/pci/pci.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index 5b36334a28a..07f08aa0626 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -876,6 +876,18 @@ PCI_DMA_DEFINE_LDST(q_be, q_be, 64);
 
 #undef PCI_DMA_DEFINE_LDST
 
+/**
+ * pci_dma_map: Map device PCI address space range into host virtual address
+ *
+ * May map a subset of the requested range, given by and returned in @plen.
+ * May return %NULL and set *@plen to zero(0), if resources needed to perform
+ * the mapping are exhausted.
+ *
+ * @dev: #PCIDevice to be accessed
+ * @addr: address within that device's address space
+ * @plen: pointer to length of buffer; updated on return
+ * @dir: indicates the transfer direction
+ */
 static inline void *pci_dma_map(PCIDevice *dev, dma_addr_t addr,
                                 dma_addr_t *plen, DMADirection dir)
 {
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 3/9] hw/pci: Document pci_dma_map() Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:20   ` Richard Henderson
  2022-01-10  8:45   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument Philippe Mathieu-Daudé
                   ` (5 subsequent siblings)
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

DMA API should not be included in user-mode emulation.
If so, build should fail. Remove the CONFIG_USER_ONLY check.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/sysemu/dma.h | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
index b3faef41b2f..0db2478a506 100644
--- a/include/sysemu/dma.h
+++ b/include/sysemu/dma.h
@@ -31,8 +31,6 @@ struct QEMUSGList {
     AddressSpace *as;
 };
 
-#ifndef CONFIG_USER_ONLY
-
 /*
  * When an IOMMU is present, bus addresses become distinct from
  * CPU/memory physical addresses and may be a different size.  Because
@@ -288,7 +286,6 @@ void qemu_sglist_init(QEMUSGList *qsg, DeviceState *dev, int alloc_hint,
                       AddressSpace *as);
 void qemu_sglist_add(QEMUSGList *qsg, dma_addr_t base, dma_addr_t len);
 void qemu_sglist_destroy(QEMUSGList *qsg);
-#endif
 
 typedef BlockAIOCB *DMAIOFunc(int64_t offset, QEMUIOVector *iov,
                               BlockCompletionFunc *cb, void *cb_opaque,
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (3 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:21   ` Richard Henderson
  2022-01-10  8:46   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual' Philippe Mathieu-Daudé
                   ` (4 subsequent siblings)
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Various APIs use 'pval' naming for 'pointer to val'.
rdma_pci_dma_map() uses 'plen' for 'PCI length', but since
'PCI' is already explicit in the function name, simplify
and rename the argument 'len'. No logical change.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 hw/rdma/rdma_utils.h |  2 +-
 hw/rdma/rdma_utils.c | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/hw/rdma/rdma_utils.h b/hw/rdma/rdma_utils.h
index 9fd0efd940b..0c6414e7e0a 100644
--- a/hw/rdma/rdma_utils.h
+++ b/hw/rdma/rdma_utils.h
@@ -38,7 +38,7 @@ typedef struct RdmaProtectedGSList {
     GSList *list;
 } RdmaProtectedGSList;
 
-void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen);
+void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len);
 void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len);
 void rdma_protected_gqueue_init(RdmaProtectedGQueue *list);
 void rdma_protected_gqueue_destroy(RdmaProtectedGQueue *list);
diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c
index 98df58f6897..61cb8ede0fd 100644
--- a/hw/rdma/rdma_utils.c
+++ b/hw/rdma/rdma_utils.c
@@ -17,29 +17,29 @@
 #include "trace.h"
 #include "rdma_utils.h"
 
-void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen)
+void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len)
 {
     void *p;
-    hwaddr len = plen;
+    hwaddr pci_len = len;
 
     if (!addr) {
         rdma_error_report("addr is NULL");
         return NULL;
     }
 
-    p = pci_dma_map(dev, addr, &len, DMA_DIRECTION_TO_DEVICE);
+    p = pci_dma_map(dev, addr, &pci_len, DMA_DIRECTION_TO_DEVICE);
     if (!p) {
         rdma_error_report("pci_dma_map fail, addr=0x%"PRIx64", len=%"PRId64,
-                          addr, len);
+                          addr, pci_len);
         return NULL;
     }
 
-    if (len != plen) {
-        rdma_pci_dma_unmap(dev, p, len);
+    if (pci_len != len) {
+        rdma_pci_dma_unmap(dev, p, pci_len);
         return NULL;
     }
 
-    trace_rdma_pci_dma_map(addr, p, len);
+    trace_rdma_pci_dma_map(addr, p, pci_len);
 
     return p;
 }
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual'
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (4 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:22   ` Richard Henderson
  2022-01-10  8:46   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t Philippe Mathieu-Daudé
                   ` (3 subsequent siblings)
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

The 'resid' field is slightly confusing and could be
interpreted as some ID. Rename it as 'residual' which
is clearer to review. No logical change.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/scsi/scsi.h |  4 ++--
 hw/scsi/megasas.c      | 42 +++++++++++++++++++++++++-----------------
 hw/scsi/scsi-bus.c     | 10 +++++-----
 hw/scsi/scsi-disk.c    |  4 ++--
 softmmu/dma-helpers.c  | 26 +++++++++++++-------------
 5 files changed, 47 insertions(+), 39 deletions(-)

diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index 2ef80af6dca..b27d133b113 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -30,7 +30,7 @@ struct SCSIRequest {
     int16_t           status;
     int16_t           host_status;
     void              *hba_private;
-    size_t            resid;
+    size_t            residual;
     SCSICommand       cmd;
     NotifierList      cancel_notifiers;
 
@@ -125,7 +125,7 @@ struct SCSIBusInfo {
                      void *hba_private);
     void (*transfer_data)(SCSIRequest *req, uint32_t arg);
     void (*fail)(SCSIRequest *req);
-    void (*complete)(SCSIRequest *req, size_t resid);
+    void (*complete)(SCSIRequest *req, size_t residual);
     void (*cancel)(SCSIRequest *req);
     void (*change)(SCSIBus *bus, SCSIDevice *dev, SCSISense sense);
     QEMUSGList *(*get_sg_list)(SCSIRequest *req);
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index dc9bbdb740e..cb019549371 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -1045,7 +1045,8 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
     uint64_t pd_size;
     uint16_t pd_id = ((sdev->id & 0xFF) << 8) | (lun & 0xFF);
     uint8_t cmdbuf[6];
-    size_t len, resid;
+    size_t len;
+    size_t residual;
 
     if (!cmd->iov_buf) {
         cmd->iov_buf = g_malloc0(dcmd_size);
@@ -1112,9 +1113,10 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
     info->connected_port_bitmap = 0x1;
     info->device_speed = 1;
     info->link_speed = 1;
-    resid = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    residual = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg,
+                            MEMTXATTRS_UNSPECIFIED);
     g_free(cmd->iov_buf);
-    cmd->iov_size = dcmd_size - resid;
+    cmd->iov_size = dcmd_size - residual;
     cmd->iov_buf = NULL;
     return MFI_STAT_OK;
 }
@@ -1149,7 +1151,8 @@ static int megasas_dcmd_pd_get_info(MegasasState *s, MegasasCmd *cmd)
 static int megasas_dcmd_ld_get_list(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_ld_list info;
-    size_t dcmd_size = sizeof(info), resid;
+    size_t dcmd_size = sizeof(info);
+    size_t residual;
     uint32_t num_ld_disks = 0, max_ld_disks;
     uint64_t ld_size;
     BusChild *kid;
@@ -1184,8 +1187,9 @@ static int megasas_dcmd_ld_get_list(MegasasState *s, MegasasCmd *cmd)
     info.ld_count = cpu_to_le32(num_ld_disks);
     trace_megasas_dcmd_ld_get_list(cmd->index, num_ld_disks, max_ld_disks);
 
-    resid = dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
-    cmd->iov_size = dcmd_size - resid;
+    residual = dma_buf_read(&info, dcmd_size, &cmd->qsg,
+                            MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size = dcmd_size - residual;
     return MFI_STAT_OK;
 }
 
@@ -1193,7 +1197,8 @@ static int megasas_dcmd_ld_list_query(MegasasState *s, MegasasCmd *cmd)
 {
     uint16_t flags;
     struct mfi_ld_targetid_list info;
-    size_t dcmd_size = sizeof(info), resid;
+    size_t dcmd_size = sizeof(info);
+    size_t residual;
     uint32_t num_ld_disks = 0, max_ld_disks = s->fw_luns;
     BusChild *kid;
 
@@ -1233,8 +1238,9 @@ static int megasas_dcmd_ld_list_query(MegasasState *s, MegasasCmd *cmd)
     info.size = dcmd_size;
     trace_megasas_dcmd_ld_get_list(cmd->index, num_ld_disks, max_ld_disks);
 
-    resid = dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
-    cmd->iov_size = dcmd_size - resid;
+    residual = dma_buf_read(&info, dcmd_size, &cmd->qsg,
+                            MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size = dcmd_size - residual;
     return MFI_STAT_OK;
 }
 
@@ -1244,7 +1250,8 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
     struct mfi_ld_info *info = cmd->iov_buf;
     size_t dcmd_size = sizeof(struct mfi_ld_info);
     uint8_t cdb[6];
-    ssize_t len, resid;
+    ssize_t len;
+    size_t residual;
     uint16_t sdev_id = ((sdev->id & 0xFF) << 8) | (lun & 0xFF);
     uint64_t ld_size;
 
@@ -1283,9 +1290,10 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
     info->ld_config.span[0].num_blocks = info->size;
     info->ld_config.span[0].array_ref = cpu_to_le16(sdev_id);
 
-    resid = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    residual = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg,
+                            MEMTXATTRS_UNSPECIFIED);
     g_free(cmd->iov_buf);
-    cmd->iov_size = dcmd_size - resid;
+    cmd->iov_size = dcmd_size - residual;
     cmd->iov_buf = NULL;
     return MFI_STAT_OK;
 }
@@ -1617,13 +1625,13 @@ static int megasas_handle_dcmd(MegasasState *s, MegasasCmd *cmd)
 }
 
 static int megasas_finish_internal_dcmd(MegasasCmd *cmd,
-                                        SCSIRequest *req, size_t resid)
+                                        SCSIRequest *req, size_t residual)
 {
     int retval = MFI_STAT_OK;
     int lun = req->lun;
 
     trace_megasas_dcmd_internal_finish(cmd->index, cmd->dcmd_opcode, lun);
-    cmd->iov_size -= resid;
+    cmd->iov_size -= residual;
     switch (cmd->dcmd_opcode) {
     case MFI_DCMD_PD_GET_INFO:
         retval = megasas_pd_get_info_submit(req->dev, lun, cmd);
@@ -1865,12 +1873,12 @@ static void megasas_xfer_complete(SCSIRequest *req, uint32_t len)
     }
 }
 
-static void megasas_command_complete(SCSIRequest *req, size_t resid)
+static void megasas_command_complete(SCSIRequest *req, size_t residual)
 {
     MegasasCmd *cmd = req->hba_private;
     uint8_t cmd_status = MFI_STAT_OK;
 
-    trace_megasas_command_complete(cmd->index, req->status, resid);
+    trace_megasas_command_complete(cmd->index, req->status, residual);
 
     if (req->io_canceled) {
         return;
@@ -1880,7 +1888,7 @@ static void megasas_command_complete(SCSIRequest *req, size_t resid)
         /*
          * Internal command complete
          */
-        cmd_status = megasas_finish_internal_dcmd(cmd, req, resid);
+        cmd_status = megasas_finish_internal_dcmd(cmd, req, residual);
         if (cmd_status == MFI_STAT_INVALID_STATUS) {
             return;
         }
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index 2b5e9dca311..3466e680ac7 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -760,7 +760,7 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
     }
 
     req->cmd = cmd;
-    req->resid = req->cmd.xfer;
+    req->residual = req->cmd.xfer;
 
     switch (buf[0]) {
     case INQUIRY:
@@ -1408,7 +1408,7 @@ void scsi_req_data(SCSIRequest *req, int len)
     trace_scsi_req_data(req->dev->id, req->lun, req->tag, len);
     assert(req->cmd.mode != SCSI_XFER_NONE);
     if (!req->sg) {
-        req->resid -= len;
+        req->residual -= len;
         req->bus->info->transfer_data(req, len);
         return;
     }
@@ -1421,9 +1421,9 @@ void scsi_req_data(SCSIRequest *req, int len)
 
     buf = scsi_req_get_buf(req);
     if (req->cmd.mode == SCSI_XFER_FROM_DEV) {
-        req->resid = dma_buf_read(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
+        req->residual = dma_buf_read(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
     } else {
-        req->resid = dma_buf_write(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
+        req->residual = dma_buf_write(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
     }
     scsi_req_continue(req);
 }
@@ -1512,7 +1512,7 @@ void scsi_req_complete(SCSIRequest *req, int status)
 
     scsi_req_ref(req);
     scsi_req_dequeue(req);
-    req->bus->info->complete(req, req->resid);
+    req->bus->info->complete(req, req->residual);
 
     /* Cancelled requests might end up being completed instead of cancelled */
     notifier_list_notify(&req->cancel_notifiers, req);
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index d4914178ea0..9c0dc7b9468 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -420,7 +420,7 @@ static void scsi_do_read(SCSIDiskReq *r, int ret)
 
     if (r->req.sg) {
         dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_READ);
-        r->req.resid -= r->req.sg->size;
+        r->req.residual -= r->req.sg->size;
         r->req.aiocb = dma_blk_io(blk_get_aio_context(s->qdev.conf.blk),
                                   r->req.sg, r->sector << BDRV_SECTOR_BITS,
                                   BDRV_SECTOR_SIZE,
@@ -580,7 +580,7 @@ static void scsi_write_data(SCSIRequest *req)
 
     if (r->req.sg) {
         dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, BLOCK_ACCT_WRITE);
-        r->req.resid -= r->req.sg->size;
+        r->req.residual -= r->req.sg->size;
         r->req.aiocb = dma_blk_io(blk_get_aio_context(s->qdev.conf.blk),
                                   r->req.sg, r->sector << BDRV_SECTOR_BITS,
                                   BDRV_SECTOR_SIZE,
diff --git a/softmmu/dma-helpers.c b/softmmu/dma-helpers.c
index b0be1564797..4563a775aa7 100644
--- a/softmmu/dma-helpers.c
+++ b/softmmu/dma-helpers.c
@@ -294,49 +294,49 @@ BlockAIOCB *dma_blk_write(BlockBackend *blk,
 }
 
 
-static MemTxResult dma_buf_rw(void *buf, int32_t len, uint64_t *residp,
+static MemTxResult dma_buf_rw(void *buf, int32_t len, uint64_t *residual,
                               QEMUSGList *sg, DMADirection dir,
                               MemTxAttrs attrs)
 {
     uint8_t *ptr = buf;
-    uint64_t resid;
+    uint64_t xresidual;
     int sg_cur_index;
     MemTxResult res = MEMTX_OK;
 
-    resid = sg->size;
+    xresidual = sg->size;
     sg_cur_index = 0;
-    len = MIN(len, resid);
+    len = MIN(len, xresidual);
     while (len > 0) {
         ScatterGatherEntry entry = sg->sg[sg_cur_index++];
         int32_t xfer = MIN(len, entry.len);
         res |= dma_memory_rw(sg->as, entry.base, ptr, xfer, dir, attrs);
         ptr += xfer;
         len -= xfer;
-        resid -= xfer;
+        xresidual -= xfer;
     }
 
-    if (residp) {
-        *residp = resid;
+    if (residual) {
+        *residual = xresidual;
     }
     return res;
 }
 
 uint64_t dma_buf_read(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs)
 {
-    uint64_t resid;
+    uint64_t residual;
 
-    dma_buf_rw(ptr, len, &resid, sg, DMA_DIRECTION_FROM_DEVICE, attrs);
+    dma_buf_rw(ptr, len, &residual, sg, DMA_DIRECTION_FROM_DEVICE, attrs);
 
-    return resid;
+    return residual;
 }
 
 uint64_t dma_buf_write(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs)
 {
-    uint64_t resid;
+    uint64_t residual;
 
-    dma_buf_rw(ptr, len, &resid, sg, DMA_DIRECTION_TO_DEVICE, attrs);
+    dma_buf_rw(ptr, len, &residual, sg, DMA_DIRECTION_TO_DEVICE, attrs);
 
-    return resid;
+    return residual;
 }
 
 void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie,
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (5 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual' Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-07  0:24   ` Richard Henderson
  2022-01-10  8:47   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 hw/ide/ahci.c        | 2 +-
 hw/rdma/trace-events | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 205dfdc6622..6c727dd0c08 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1159,7 +1159,7 @@ static void process_ncq_command(AHCIState *s, int port, const uint8_t *cmd_fis,
     ahci_populate_sglist(ad, &ncq_tfs->sglist, ncq_tfs->cmdh, size, 0);
 
     if (ncq_tfs->sglist.size < size) {
-        error_report("ahci: PRDT length for NCQ command (0x%zx) "
+        error_report("ahci: PRDT length for NCQ command (0x" DMA_ADDR_FMT ") "
                      "is smaller than the requested size (0x%zx)",
                      ncq_tfs->sglist.size, size);
         ncq_err(ncq_tfs);
diff --git a/hw/rdma/trace-events b/hw/rdma/trace-events
index 9accb149734..c23175120e1 100644
--- a/hw/rdma/trace-events
+++ b/hw/rdma/trace-events
@@ -27,5 +27,5 @@ rdma_rm_alloc_qp(uint32_t rm_qpn, uint32_t backend_qpn, uint8_t qp_type) "rm_qpn
 rdma_rm_modify_qp(uint32_t qpn, uint32_t attr_mask, int qp_state, uint8_t sgid_idx) "qpn=0x%x, attr_mask=0x%x, qp_state=%d, sgid_idx=%d"
 
 # rdma_utils.c
-rdma_pci_dma_map(uint64_t addr, void *vaddr, uint64_t len) "0x%"PRIx64" -> %p (len=%" PRId64")"
+rdma_pci_dma_map(uint64_t addr, void *vaddr, uint64_t len) "0x%"PRIx64" -> %p (len=%" PRIu64")"
 rdma_pci_dma_unmap(void *vaddr) "%p"
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (6 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-04  9:55   ` Peter Xu
  2022-01-10  8:49   ` David Hildenbrand
  2022-01-04  8:54 ` [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult Philippe Mathieu-Daudé
  2022-01-06 11:08 ` [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Michael S. Tsirkin
  9 siblings, 2 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Update the obvious places where dma_addr_t should be used
(instead of uint64_t, hwaddr, size_t, int32_t types).

This allows to have &dma_addr_t type portable on 32/64-bit
hosts.

Move QEMUSGList declaration after dma_addr_t declaration
so this structure can use the new type.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/sysemu/dma.h  | 22 +++++++++++-----------
 hw/nvme/ctrl.c        |  2 +-
 hw/rdma/rdma_utils.c  |  2 +-
 hw/scsi/megasas.c     | 10 +++++-----
 softmmu/dma-helpers.c |  6 +++---
 5 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
index 0db2478a506..7a8ae4fcd0b 100644
--- a/include/sysemu/dma.h
+++ b/include/sysemu/dma.h
@@ -15,22 +15,11 @@
 #include "block/block.h"
 #include "block/accounting.h"
 
-typedef struct ScatterGatherEntry ScatterGatherEntry;
-
 typedef enum {
     DMA_DIRECTION_TO_DEVICE = 0,
     DMA_DIRECTION_FROM_DEVICE = 1,
 } DMADirection;
 
-struct QEMUSGList {
-    ScatterGatherEntry *sg;
-    int nsg;
-    int nalloc;
-    size_t size;
-    DeviceState *dev;
-    AddressSpace *as;
-};
-
 /*
  * When an IOMMU is present, bus addresses become distinct from
  * CPU/memory physical addresses and may be a different size.  Because
@@ -43,6 +32,17 @@ typedef uint64_t dma_addr_t;
 #define DMA_ADDR_BITS 64
 #define DMA_ADDR_FMT "%" PRIx64
 
+typedef struct ScatterGatherEntry ScatterGatherEntry;
+
+struct QEMUSGList {
+    ScatterGatherEntry *sg;
+    int nsg;
+    int nalloc;
+    dma_addr_t size;
+    DeviceState *dev;
+    AddressSpace *as;
+};
+
 static inline void dma_barrier(AddressSpace *as, DMADirection dir)
 {
     /*
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 462f79a1f60..c3c49176110 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -1147,7 +1147,7 @@ static uint16_t nvme_tx(NvmeCtrl *n, NvmeSg *sg, uint8_t *ptr, uint32_t len,
 
     if (sg->flags & NVME_SG_DMA) {
         const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
-        uint64_t residual;
+        dma_addr_t residual;
 
         if (dir == NVME_TX_DIRECTION_TO_DEVICE) {
             residual = dma_buf_write(ptr, len, &sg->qsg, attrs);
diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c
index 61cb8ede0fd..5a7ef63ad28 100644
--- a/hw/rdma/rdma_utils.c
+++ b/hw/rdma/rdma_utils.c
@@ -20,7 +20,7 @@
 void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len)
 {
     void *p;
-    hwaddr pci_len = len;
+    dma_addr_t pci_len = len;
 
     if (!addr) {
         rdma_error_report("addr is NULL");
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index cb019549371..6c1ae6b980f 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -1046,7 +1046,7 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
     uint16_t pd_id = ((sdev->id & 0xFF) << 8) | (lun & 0xFF);
     uint8_t cmdbuf[6];
     size_t len;
-    size_t residual;
+    dma_addr_t residual;
 
     if (!cmd->iov_buf) {
         cmd->iov_buf = g_malloc0(dcmd_size);
@@ -1152,7 +1152,7 @@ static int megasas_dcmd_ld_get_list(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_ld_list info;
     size_t dcmd_size = sizeof(info);
-    size_t residual;
+    dma_addr_t residual;
     uint32_t num_ld_disks = 0, max_ld_disks;
     uint64_t ld_size;
     BusChild *kid;
@@ -1198,7 +1198,7 @@ static int megasas_dcmd_ld_list_query(MegasasState *s, MegasasCmd *cmd)
     uint16_t flags;
     struct mfi_ld_targetid_list info;
     size_t dcmd_size = sizeof(info);
-    size_t residual;
+    dma_addr_t residual;
     uint32_t num_ld_disks = 0, max_ld_disks = s->fw_luns;
     BusChild *kid;
 
@@ -1251,7 +1251,7 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
     size_t dcmd_size = sizeof(struct mfi_ld_info);
     uint8_t cdb[6];
     ssize_t len;
-    size_t residual;
+    dma_addr_t residual;
     uint16_t sdev_id = ((sdev->id & 0xFF) << 8) | (lun & 0xFF);
     uint64_t ld_size;
 
@@ -1625,7 +1625,7 @@ static int megasas_handle_dcmd(MegasasState *s, MegasasCmd *cmd)
 }
 
 static int megasas_finish_internal_dcmd(MegasasCmd *cmd,
-                                        SCSIRequest *req, size_t residual)
+                                        SCSIRequest *req, dma_addr_t residual)
 {
     int retval = MFI_STAT_OK;
     int lun = req->lun;
diff --git a/softmmu/dma-helpers.c b/softmmu/dma-helpers.c
index 4563a775aa7..54340929334 100644
--- a/softmmu/dma-helpers.c
+++ b/softmmu/dma-helpers.c
@@ -294,12 +294,12 @@ BlockAIOCB *dma_blk_write(BlockBackend *blk,
 }
 
 
-static MemTxResult dma_buf_rw(void *buf, int32_t len, uint64_t *residual,
+static MemTxResult dma_buf_rw(void *buf, dma_addr_t len, dma_addr_t *residual,
                               QEMUSGList *sg, DMADirection dir,
                               MemTxAttrs attrs)
 {
     uint8_t *ptr = buf;
-    uint64_t xresidual;
+    dma_addr_t xresidual;
     int sg_cur_index;
     MemTxResult res = MEMTX_OK;
 
@@ -308,7 +308,7 @@ static MemTxResult dma_buf_rw(void *buf, int32_t len, uint64_t *residual,
     len = MIN(len, xresidual);
     while (len > 0) {
         ScatterGatherEntry entry = sg->sg[sg_cur_index++];
-        int32_t xfer = MIN(len, entry.len);
+        dma_addr_t xfer = MIN(len, entry.len);
         res |= dma_memory_rw(sg->as, entry.base, ptr, xfer, dir, attrs);
         ptr += xfer;
         len -= xfer;
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (7 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
@ 2022-01-04  8:54 ` Philippe Mathieu-Daudé
  2022-01-10  8:51   ` David Hildenbrand
  2022-01-06 11:08 ` [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Michael S. Tsirkin
  9 siblings, 1 reply; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-04  8:54 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, Philippe Mathieu-Daudé,
	Peter Xu, Yuval Shaia, Klaus Jensen, Klaus Jensen, Keith Busch,
	Paolo Bonzini, John Snow

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Since the previous commit, dma_buf_rw() returns a MemTxResult
type. Do not discard it, return it to the caller.

Since both dma_buf_read/dma_buf_write functions were previously
returning the QEMUSGList size not consumed, add an extra argument
where the unconsummed size can be stored.

Update the few callers.

Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 include/hw/scsi/scsi.h |  2 +-
 include/sysemu/dma.h   |  6 +++--
 hw/ide/ahci.c          |  8 +++---
 hw/nvme/ctrl.c         |  4 +--
 hw/scsi/megasas.c      | 59 ++++++++++++++++++++++++++++++------------
 hw/scsi/scsi-bus.c     |  6 +++--
 softmmu/dma-helpers.c  | 18 +++++--------
 7 files changed, 63 insertions(+), 40 deletions(-)

diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index b27d133b113..1ffb367f94f 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -30,7 +30,7 @@ struct SCSIRequest {
     int16_t           status;
     int16_t           host_status;
     void              *hba_private;
-    size_t            residual;
+    uint64_t          residual;
     SCSICommand       cmd;
     NotifierList      cancel_notifiers;
 
diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
index 7a8ae4fcd0b..a1ac5bc1b54 100644
--- a/include/sysemu/dma.h
+++ b/include/sysemu/dma.h
@@ -301,8 +301,10 @@ BlockAIOCB *dma_blk_read(BlockBackend *blk,
 BlockAIOCB *dma_blk_write(BlockBackend *blk,
                           QEMUSGList *sg, uint64_t offset, uint32_t align,
                           BlockCompletionFunc *cb, void *opaque);
-uint64_t dma_buf_read(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs);
-uint64_t dma_buf_write(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs);
+MemTxResult dma_buf_read(void *ptr, dma_addr_t len, dma_addr_t *residual,
+                         QEMUSGList *sg, MemTxAttrs attrs);
+MemTxResult dma_buf_write(void *ptr, dma_addr_t len, dma_addr_t *residual,
+                          QEMUSGList *sg, MemTxAttrs attrs);
 
 void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie,
                     QEMUSGList *sg, enum BlockAcctType type);
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 6c727dd0c08..7ce001cacdb 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1384,9 +1384,9 @@ static void ahci_pio_transfer(const IDEDMA *dma)
         const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
 
         if (is_write) {
-            dma_buf_write(s->data_ptr, size, &s->sg, attrs);
+            dma_buf_write(s->data_ptr, size, NULL, &s->sg, attrs);
         } else {
-            dma_buf_read(s->data_ptr, size, &s->sg, attrs);
+            dma_buf_read(s->data_ptr, size, NULL, &s->sg, attrs);
         }
     }
 
@@ -1479,9 +1479,9 @@ static int ahci_dma_rw_buf(const IDEDMA *dma, bool is_write)
     }
 
     if (is_write) {
-        dma_buf_read(p, l, &s->sg, MEMTXATTRS_UNSPECIFIED);
+        dma_buf_read(p, l, NULL, &s->sg, MEMTXATTRS_UNSPECIFIED);
     } else {
-        dma_buf_write(p, l, &s->sg, MEMTXATTRS_UNSPECIFIED);
+        dma_buf_write(p, l, NULL, &s->sg, MEMTXATTRS_UNSPECIFIED);
     }
 
     /* free sglist, update byte count */
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index c3c49176110..1f62116af98 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -1150,9 +1150,9 @@ static uint16_t nvme_tx(NvmeCtrl *n, NvmeSg *sg, uint8_t *ptr, uint32_t len,
         dma_addr_t residual;
 
         if (dir == NVME_TX_DIRECTION_TO_DEVICE) {
-            residual = dma_buf_write(ptr, len, &sg->qsg, attrs);
+            dma_buf_write(ptr, len, &residual, &sg->qsg, attrs);
         } else {
-            residual = dma_buf_read(ptr, len, &sg->qsg, attrs);
+            dma_buf_read(ptr, len, &residual, &sg->qsg, attrs);
         }
 
         if (unlikely(residual)) {
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index 6c1ae6b980f..de613c8b355 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -750,6 +750,7 @@ static int megasas_ctrl_get_info(MegasasState *s, MegasasCmd *cmd)
     size_t dcmd_size = sizeof(info);
     BusChild *kid;
     int num_pd_disks = 0;
+    dma_addr_t residual;
 
     memset(&info, 0x0, dcmd_size);
     if (cmd->iov_size < dcmd_size) {
@@ -860,7 +861,9 @@ static int megasas_ctrl_get_info(MegasasState *s, MegasasCmd *cmd)
                                        MFI_INFO_PDMIX_SATA |
                                        MFI_INFO_PDMIX_LD);
 
-    cmd->iov_size -= dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -868,6 +871,7 @@ static int megasas_mfc_get_defaults(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_defaults info;
     size_t dcmd_size = sizeof(struct mfi_defaults);
+    dma_addr_t residual;
 
     memset(&info, 0x0, dcmd_size);
     if (cmd->iov_size < dcmd_size) {
@@ -890,7 +894,9 @@ static int megasas_mfc_get_defaults(MegasasState *s, MegasasCmd *cmd)
     info.disable_preboot_cli = 1;
     info.cluster_disable = 1;
 
-    cmd->iov_size -= dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -898,6 +904,7 @@ static int megasas_dcmd_get_bios_info(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_bios_data info;
     size_t dcmd_size = sizeof(info);
+    dma_addr_t residual;
 
     memset(&info, 0x0, dcmd_size);
     if (cmd->iov_size < dcmd_size) {
@@ -911,7 +918,9 @@ static int megasas_dcmd_get_bios_info(MegasasState *s, MegasasCmd *cmd)
         info.expose_all_drives = 1;
     }
 
-    cmd->iov_size -= dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -919,10 +928,13 @@ static int megasas_dcmd_get_fw_time(MegasasState *s, MegasasCmd *cmd)
 {
     uint64_t fw_time;
     size_t dcmd_size = sizeof(fw_time);
+    dma_addr_t residual;
 
     fw_time = cpu_to_le64(megasas_fw_time());
 
-    cmd->iov_size -= dma_buf_read(&fw_time, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&fw_time, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -942,6 +954,7 @@ static int megasas_event_info(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_evt_log_state info;
     size_t dcmd_size = sizeof(info);
+    dma_addr_t residual;
 
     memset(&info, 0, dcmd_size);
 
@@ -949,7 +962,9 @@ static int megasas_event_info(MegasasState *s, MegasasCmd *cmd)
     info.shutdown_seq_num = cpu_to_le32(s->shutdown_event);
     info.boot_seq_num = cpu_to_le32(s->boot_event);
 
-    cmd->iov_size -= dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -979,6 +994,7 @@ static int megasas_dcmd_pd_get_list(MegasasState *s, MegasasCmd *cmd)
     size_t dcmd_size = sizeof(info);
     BusChild *kid;
     uint32_t offset, dcmd_limit, num_pd_disks = 0, max_pd_disks;
+    dma_addr_t residual;
 
     memset(&info, 0, dcmd_size);
     offset = 8;
@@ -1018,7 +1034,9 @@ static int megasas_dcmd_pd_get_list(MegasasState *s, MegasasCmd *cmd)
     info.size = cpu_to_le32(offset);
     info.count = cpu_to_le32(num_pd_disks);
 
-    cmd->iov_size -= dma_buf_read(&info, offset, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, offset, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -1113,8 +1131,9 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
     info->connected_port_bitmap = 0x1;
     info->device_speed = 1;
     info->link_speed = 1;
-    residual = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg,
-                            MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(cmd->iov_buf, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     g_free(cmd->iov_buf);
     cmd->iov_size = dcmd_size - residual;
     cmd->iov_buf = NULL;
@@ -1187,8 +1206,8 @@ static int megasas_dcmd_ld_get_list(MegasasState *s, MegasasCmd *cmd)
     info.ld_count = cpu_to_le32(num_ld_disks);
     trace_megasas_dcmd_ld_get_list(cmd->index, num_ld_disks, max_ld_disks);
 
-    residual = dma_buf_read(&info, dcmd_size, &cmd->qsg,
-                            MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
     cmd->iov_size = dcmd_size - residual;
     return MFI_STAT_OK;
 }
@@ -1238,8 +1257,8 @@ static int megasas_dcmd_ld_list_query(MegasasState *s, MegasasCmd *cmd)
     info.size = dcmd_size;
     trace_megasas_dcmd_ld_get_list(cmd->index, num_ld_disks, max_ld_disks);
 
-    residual = dma_buf_read(&info, dcmd_size, &cmd->qsg,
-                            MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
     cmd->iov_size = dcmd_size - residual;
     return MFI_STAT_OK;
 }
@@ -1290,8 +1309,8 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
     info->ld_config.span[0].num_blocks = info->size;
     info->ld_config.span[0].array_ref = cpu_to_le16(sdev_id);
 
-    residual = dma_buf_read(cmd->iov_buf, dcmd_size, &cmd->qsg,
-                            MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(cmd->iov_buf, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
     g_free(cmd->iov_buf);
     cmd->iov_size = dcmd_size - residual;
     cmd->iov_buf = NULL;
@@ -1336,6 +1355,7 @@ static int megasas_dcmd_cfg_read(MegasasState *s, MegasasCmd *cmd)
     struct mfi_config_data *info;
     int num_pd_disks = 0, array_offset, ld_offset;
     BusChild *kid;
+    dma_addr_t residual;
 
     if (cmd->iov_size > 4096) {
         return MFI_STAT_INVALID_PARAMETER;
@@ -1410,7 +1430,9 @@ static int megasas_dcmd_cfg_read(MegasasState *s, MegasasCmd *cmd)
         ld_offset += sizeof(struct mfi_ld_config);
     }
 
-    cmd->iov_size -= dma_buf_read(data, info->size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(data, info->size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -1418,6 +1440,7 @@ static int megasas_dcmd_get_properties(MegasasState *s, MegasasCmd *cmd)
 {
     struct mfi_ctrl_props info;
     size_t dcmd_size = sizeof(info);
+    dma_addr_t residual;
 
     memset(&info, 0x0, dcmd_size);
     if (cmd->iov_size < dcmd_size) {
@@ -1440,7 +1463,9 @@ static int megasas_dcmd_get_properties(MegasasState *s, MegasasCmd *cmd)
     info.ecc_bucket_leak_rate = cpu_to_le16(1440);
     info.expose_encl_devices = 1;
 
-    cmd->iov_size -= dma_buf_read(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_read(&info, dcmd_size, &residual, &cmd->qsg,
+                 MEMTXATTRS_UNSPECIFIED);
+    cmd->iov_size -= residual;
     return MFI_STAT_OK;
 }
 
@@ -1485,7 +1510,7 @@ static int megasas_dcmd_set_properties(MegasasState *s, MegasasCmd *cmd)
                                             dcmd_size);
         return MFI_STAT_INVALID_PARAMETER;
     }
-    dma_buf_write(&info, dcmd_size, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
+    dma_buf_write(&info, dcmd_size, NULL, &cmd->qsg, MEMTXATTRS_UNSPECIFIED);
     trace_megasas_dcmd_unsupported(cmd->index, cmd->iov_size);
     return MFI_STAT_OK;
 }
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index 3466e680ac7..4057e04ce89 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -1421,9 +1421,11 @@ void scsi_req_data(SCSIRequest *req, int len)
 
     buf = scsi_req_get_buf(req);
     if (req->cmd.mode == SCSI_XFER_FROM_DEV) {
-        req->residual = dma_buf_read(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
+        dma_buf_read(buf, len, &req->residual, req->sg,
+                     MEMTXATTRS_UNSPECIFIED);
     } else {
-        req->residual = dma_buf_write(buf, len, req->sg, MEMTXATTRS_UNSPECIFIED);
+        dma_buf_write(buf, len, &req->residual, req->sg,
+                      MEMTXATTRS_UNSPECIFIED);
     }
     scsi_req_continue(req);
 }
diff --git a/softmmu/dma-helpers.c b/softmmu/dma-helpers.c
index 54340929334..1c6fba6a112 100644
--- a/softmmu/dma-helpers.c
+++ b/softmmu/dma-helpers.c
@@ -321,22 +321,16 @@ static MemTxResult dma_buf_rw(void *buf, dma_addr_t len, dma_addr_t *residual,
     return res;
 }
 
-uint64_t dma_buf_read(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs)
+MemTxResult dma_buf_read(void *ptr, dma_addr_t len, dma_addr_t *residual,
+                         QEMUSGList *sg, MemTxAttrs attrs)
 {
-    uint64_t residual;
-
-    dma_buf_rw(ptr, len, &residual, sg, DMA_DIRECTION_FROM_DEVICE, attrs);
-
-    return residual;
+    return dma_buf_rw(ptr, len, residual, sg, DMA_DIRECTION_FROM_DEVICE, attrs);
 }
 
-uint64_t dma_buf_write(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs attrs)
+MemTxResult dma_buf_write(void *ptr, dma_addr_t len, dma_addr_t *residual,
+                          QEMUSGList *sg, MemTxAttrs attrs)
 {
-    uint64_t residual;
-
-    dma_buf_rw(ptr, len, &residual, sg, DMA_DIRECTION_TO_DEVICE, attrs);
-
-    return residual;
+    return dma_buf_rw(ptr, len, residual, sg, DMA_DIRECTION_TO_DEVICE, attrs);
 }
 
 void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie,
-- 
2.33.1



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-04  8:54 ` [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
@ 2022-01-04  9:55   ` Peter Xu
  2022-01-10  8:49   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Peter Xu @ 2022-01-04  9:55 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	David Hildenbrand, qemu-devel, Yuval Shaia, Klaus Jensen,
	Keith Busch, Paolo Bonzini, John Snow

On Tue, Jan 04, 2022 at 09:54:30AM +0100, Philippe Mathieu-Daudé wrote:
> diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
> index 462f79a1f60..c3c49176110 100644
> --- a/hw/nvme/ctrl.c
> +++ b/hw/nvme/ctrl.c
> @@ -1147,7 +1147,7 @@ static uint16_t nvme_tx(NvmeCtrl *n, NvmeSg *sg, uint8_t *ptr, uint32_t len,
>  
>      if (sg->flags & NVME_SG_DMA) {
>          const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
> -        uint64_t residual;
> +        dma_addr_t residual;
>  
>          if (dir == NVME_TX_DIRECTION_TO_DEVICE) {
>              residual = dma_buf_write(ptr, len, &sg->qsg, attrs);

If there's a new version: Maybe also change the return value types of
dma_buf_write|read() to dma_addr_t?

It'll be changed anyway in the next patch, so not a big deal.

The rest patches looks good to me.  Thanks.

-- 
Peter Xu



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
                   ` (8 preceding siblings ...)
  2022-01-04  8:54 ` [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult Philippe Mathieu-Daudé
@ 2022-01-06 11:08 ` Michael S. Tsirkin
  2022-01-11 18:47   ` Philippe Mathieu-Daudé
  9 siblings, 1 reply; 30+ messages in thread
From: Michael S. Tsirkin @ 2022-01-06 11:08 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	qemu-devel, Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch,
	Paolo Bonzini, John Snow

On Tue, Jan 04, 2022 at 09:54:22AM +0100, Philippe Mathieu-Daudé wrote:
> Since v1:
> - Addressed David review comment (stick to dma_addr_t type)
> - Addressed Peter review comment (incorrect doc string)


PCI things:

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>

who's merging all this? Yourself?

> Hi,
> 
> This series aims to clarify a bit the DMA API, in particular the
> 'size' argument which is not clear enough (as we use multiple types
> for it). This helps avoiding build failures on 32-bit host [*] (and
> likely overflows calculation too IMO).
> 
> Some units using the DMA API are first removed from user-mode
> emulation to avoid build failure (they shouldn't be there in
> the first place).
> 
> Then some variables are renamed for clarity (no functional change).
> 
> Finally we replace misuses with dma_addr_t typedef. The previous
> patch which failed on 32-bit host applied on top (not failing anymore).
> 
> Regards,
> 
> Phil.
> 
> [*] https://www.mail-archive.com/qemu-devel@nongnu.org/msg858825.html
> 
> Supersedes: <20211231114901.976937-1-philmd@redhat.com>
> 
> Philippe Mathieu-Daudé (9):
>   hw/nvram: Restrict stub to sysemu and tools
>   hw/pci: Restrict pci-bus stub to sysemu
>   hw/pci: Document pci_dma_map()
>   hw/dma: Remove CONFIG_USER_ONLY check
>   hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument
>   hw/scsi: Rename SCSIRequest::resid as 'residual'
>   hw/dma: Fix format string issues using dma_addr_t
>   hw/dma: Use dma_addr_t type definition when relevant
>   hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult
> 
>  hw/rdma/rdma_utils.h   |  2 +-
>  include/hw/pci/pci.h   | 12 ++++++
>  include/hw/scsi/scsi.h |  4 +-
>  include/sysemu/dma.h   | 31 ++++++++-------
>  hw/ide/ahci.c          | 10 ++---
>  hw/nvme/ctrl.c         |  6 +--
>  hw/rdma/rdma_utils.c   | 14 +++----
>  hw/scsi/megasas.c      | 85 +++++++++++++++++++++++++++++-------------
>  hw/scsi/scsi-bus.c     | 12 +++---
>  hw/scsi/scsi-disk.c    |  4 +-
>  softmmu/dma-helpers.c  | 34 +++++++----------
>  hw/nvram/meson.build   |  6 ++-
>  hw/rdma/trace-events   |  2 +-
>  stubs/meson.build      |  4 +-
>  14 files changed, 134 insertions(+), 92 deletions(-)
> 
> -- 
> 2.33.1
> 



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools
  2022-01-04  8:54 ` [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools Philippe Mathieu-Daudé
@ 2022-01-07  0:17   ` Richard Henderson
  2022-01-11 10:43     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:17 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> +if have_system or have_tools
...
>   if have_system
> +  stub_ss.add(files('fw_cfg.c'))

Disconnect in tests?


r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu
  2022-01-04  8:54 ` [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu Philippe Mathieu-Daudé
@ 2022-01-07  0:18   ` Richard Henderson
  2022-01-10  8:43   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:18 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé<philmd@redhat.com>
> 
> Neither tools nor user-mode emulation require the PCI bus stub.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
> ---
>   stubs/meson.build | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 3/9] hw/pci: Document pci_dma_map()
  2022-01-04  8:54 ` [PATCH v2 3/9] hw/pci: Document pci_dma_map() Philippe Mathieu-Daudé
@ 2022-01-07  0:20   ` Richard Henderson
  0 siblings, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:20 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>   include/hw/pci/pci.h | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index 5b36334a28a..07f08aa0626 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -876,6 +876,18 @@ PCI_DMA_DEFINE_LDST(q_be, q_be, 64);
>   
>   #undef PCI_DMA_DEFINE_LDST
>   
> +/**
> + * pci_dma_map: Map device PCI address space range into host virtual address
> + *
> + * May map a subset of the requested range, given by and returned in @plen.
> + * May return %NULL and set *@plen to zero(0), if resources needed to perform
> + * the mapping are exhausted.
> + *
> + * @dev: #PCIDevice to be accessed
> + * @addr: address within that device's address space
> + * @plen: pointer to length of buffer; updated on return
> + * @dir: indicates the transfer direction
> + */

As Peter recently mentioned, the ** format is off.
The description goes below the arguments.

Otherwise,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check
  2022-01-04  8:54 ` [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check Philippe Mathieu-Daudé
@ 2022-01-07  0:20   ` Richard Henderson
  2022-01-10  8:45   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:20 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé<philmd@redhat.com>
> 
> DMA API should not be included in user-mode emulation.
> If so, build should fail. Remove the CONFIG_USER_ONLY check.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
> ---
>   include/sysemu/dma.h | 3 ---
>   1 file changed, 3 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument
  2022-01-04  8:54 ` [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument Philippe Mathieu-Daudé
@ 2022-01-07  0:21   ` Richard Henderson
  2022-01-10  8:46   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:21 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé<philmd@redhat.com>
> 
> Various APIs use 'pval' naming for 'pointer to val'.
> rdma_pci_dma_map() uses 'plen' for 'PCI length', but since
> 'PCI' is already explicit in the function name, simplify
> and rename the argument 'len'. No logical change.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
> ---
>   hw/rdma/rdma_utils.h |  2 +-
>   hw/rdma/rdma_utils.c | 14 +++++++-------
>   2 files changed, 8 insertions(+), 8 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual'
  2022-01-04  8:54 ` [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual' Philippe Mathieu-Daudé
@ 2022-01-07  0:22   ` Richard Henderson
  2022-01-10  8:46   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:22 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé<philmd@redhat.com>
> 
> The 'resid' field is slightly confusing and could be
> interpreted as some ID. Rename it as 'residual' which
> is clearer to review. No logical change.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
> ---
>   include/hw/scsi/scsi.h |  4 ++--
>   hw/scsi/megasas.c      | 42 +++++++++++++++++++++++++-----------------
>   hw/scsi/scsi-bus.c     | 10 +++++-----
>   hw/scsi/scsi-disk.c    |  4 ++--
>   softmmu/dma-helpers.c  | 26 +++++++++++++-------------
>   5 files changed, 47 insertions(+), 39 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t
  2022-01-04  8:54 ` [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t Philippe Mathieu-Daudé
@ 2022-01-07  0:24   ` Richard Henderson
  2022-01-10  8:47   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: Richard Henderson @ 2022-01-07  0:24 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	Michael S. Tsirkin, Yuval Shaia, Peter Xu, Keith Busch,
	Klaus Jensen, Paolo Bonzini, John Snow

On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
> ---
>   hw/ide/ahci.c        | 2 +-
>   hw/rdma/trace-events | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu
  2022-01-04  8:54 ` [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu Philippe Mathieu-Daudé
  2022-01-07  0:18   ` Richard Henderson
@ 2022-01-10  8:43   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:43 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Neither tools nor user-mode emulation require the PCI bus stub.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  stubs/meson.build | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/stubs/meson.build b/stubs/meson.build
> index 363f6fa785d..d359cbe1ad7 100644
> --- a/stubs/meson.build
> +++ b/stubs/meson.build
> @@ -26,7 +26,6 @@
>  stub_ss.add(files('module-opts.c'))
>  stub_ss.add(files('monitor.c'))
>  stub_ss.add(files('monitor-core.c'))
> -stub_ss.add(files('pci-bus.c'))
>  stub_ss.add(files('qemu-timer-notify-cb.c'))
>  stub_ss.add(files('qmp_memory_device.c'))
>  stub_ss.add(files('qmp-command-available.c'))
> @@ -51,6 +50,7 @@
>  endif
>  if have_system
>    stub_ss.add(files('fw_cfg.c'))
> +  stub_ss.add(files('pci-bus.c'))
>    stub_ss.add(files('semihost.c'))
>    stub_ss.add(files('usb-dev-stub.c'))
>    stub_ss.add(files('xen-hw-stub.c'))

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check
  2022-01-04  8:54 ` [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check Philippe Mathieu-Daudé
  2022-01-07  0:20   ` Richard Henderson
@ 2022-01-10  8:45   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:45 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> DMA API should not be included in user-mode emulation.
> If so, build should fail. Remove the CONFIG_USER_ONLY check.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  include/sysemu/dma.h | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
> index b3faef41b2f..0db2478a506 100644
> --- a/include/sysemu/dma.h
> +++ b/include/sysemu/dma.h
> @@ -31,8 +31,6 @@ struct QEMUSGList {
>      AddressSpace *as;
>  };
>  
> -#ifndef CONFIG_USER_ONLY
> -
>  /*
>   * When an IOMMU is present, bus addresses become distinct from
>   * CPU/memory physical addresses and may be a different size.  Because
> @@ -288,7 +286,6 @@ void qemu_sglist_init(QEMUSGList *qsg, DeviceState *dev, int alloc_hint,
>                        AddressSpace *as);
>  void qemu_sglist_add(QEMUSGList *qsg, dma_addr_t base, dma_addr_t len);
>  void qemu_sglist_destroy(QEMUSGList *qsg);
> -#endif
>  
>  typedef BlockAIOCB *DMAIOFunc(int64_t offset, QEMUIOVector *iov,
>                                BlockCompletionFunc *cb, void *cb_opaque,

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument
  2022-01-04  8:54 ` [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument Philippe Mathieu-Daudé
  2022-01-07  0:21   ` Richard Henderson
@ 2022-01-10  8:46   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:46 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Various APIs use 'pval' naming for 'pointer to val'.
> rdma_pci_dma_map() uses 'plen' for 'PCI length', but since
> 'PCI' is already explicit in the function name, simplify
> and rename the argument 'len'. No logical change.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  hw/rdma/rdma_utils.h |  2 +-
>  hw/rdma/rdma_utils.c | 14 +++++++-------
>  2 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/rdma/rdma_utils.h b/hw/rdma/rdma_utils.h
> index 9fd0efd940b..0c6414e7e0a 100644
> --- a/hw/rdma/rdma_utils.h
> +++ b/hw/rdma/rdma_utils.h
> @@ -38,7 +38,7 @@ typedef struct RdmaProtectedGSList {
>      GSList *list;
>  } RdmaProtectedGSList;
>  
> -void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen);
> +void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len);
>  void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len);
>  void rdma_protected_gqueue_init(RdmaProtectedGQueue *list);
>  void rdma_protected_gqueue_destroy(RdmaProtectedGQueue *list);
> diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c
> index 98df58f6897..61cb8ede0fd 100644
> --- a/hw/rdma/rdma_utils.c
> +++ b/hw/rdma/rdma_utils.c
> @@ -17,29 +17,29 @@
>  #include "trace.h"
>  #include "rdma_utils.h"
>  
> -void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen)
> +void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len)
>  {
>      void *p;
> -    hwaddr len = plen;
> +    hwaddr pci_len = len;
>  
>      if (!addr) {
>          rdma_error_report("addr is NULL");
>          return NULL;
>      }
>  
> -    p = pci_dma_map(dev, addr, &len, DMA_DIRECTION_TO_DEVICE);
> +    p = pci_dma_map(dev, addr, &pci_len, DMA_DIRECTION_TO_DEVICE);
>      if (!p) {
>          rdma_error_report("pci_dma_map fail, addr=0x%"PRIx64", len=%"PRId64,
> -                          addr, len);
> +                          addr, pci_len);
>          return NULL;
>      }
>  
> -    if (len != plen) {
> -        rdma_pci_dma_unmap(dev, p, len);
> +    if (pci_len != len) {
> +        rdma_pci_dma_unmap(dev, p, pci_len);
>          return NULL;
>      }
>  
> -    trace_rdma_pci_dma_map(addr, p, len);
> +    trace_rdma_pci_dma_map(addr, p, pci_len);
>  
>      return p;
>  }

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual'
  2022-01-04  8:54 ` [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual' Philippe Mathieu-Daudé
  2022-01-07  0:22   ` Richard Henderson
@ 2022-01-10  8:46   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:46 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> The 'resid' field is slightly confusing and could be
> interpreted as some ID. Rename it as 'residual' which
> is clearer to review. No logical change.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t
  2022-01-04  8:54 ` [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t Philippe Mathieu-Daudé
  2022-01-07  0:24   ` Richard Henderson
@ 2022-01-10  8:47   ` David Hildenbrand
  1 sibling, 0 replies; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:47 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  hw/ide/ahci.c        | 2 +-
>  hw/rdma/trace-events | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> index 205dfdc6622..6c727dd0c08 100644
> --- a/hw/ide/ahci.c
> +++ b/hw/ide/ahci.c
> @@ -1159,7 +1159,7 @@ static void process_ncq_command(AHCIState *s, int port, const uint8_t *cmd_fis,
>      ahci_populate_sglist(ad, &ncq_tfs->sglist, ncq_tfs->cmdh, size, 0);
>  
>      if (ncq_tfs->sglist.size < size) {
> -        error_report("ahci: PRDT length for NCQ command (0x%zx) "
> +        error_report("ahci: PRDT length for NCQ command (0x" DMA_ADDR_FMT ") "
>                       "is smaller than the requested size (0x%zx)",
>                       ncq_tfs->sglist.size, size);
>          ncq_err(ncq_tfs);
> diff --git a/hw/rdma/trace-events b/hw/rdma/trace-events
> index 9accb149734..c23175120e1 100644
> --- a/hw/rdma/trace-events
> +++ b/hw/rdma/trace-events
> @@ -27,5 +27,5 @@ rdma_rm_alloc_qp(uint32_t rm_qpn, uint32_t backend_qpn, uint8_t qp_type) "rm_qpn
>  rdma_rm_modify_qp(uint32_t qpn, uint32_t attr_mask, int qp_state, uint8_t sgid_idx) "qpn=0x%x, attr_mask=0x%x, qp_state=%d, sgid_idx=%d"
>  
>  # rdma_utils.c
> -rdma_pci_dma_map(uint64_t addr, void *vaddr, uint64_t len) "0x%"PRIx64" -> %p (len=%" PRId64")"
> +rdma_pci_dma_map(uint64_t addr, void *vaddr, uint64_t len) "0x%"PRIx64" -> %p (len=%" PRIu64")"
>  rdma_pci_dma_unmap(void *vaddr) "%p"

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-04  8:54 ` [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
  2022-01-04  9:55   ` Peter Xu
@ 2022-01-10  8:49   ` David Hildenbrand
  2022-01-10  9:05     ` Philippe Mathieu-Daudé
  1 sibling, 1 reply; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:49 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Update the obvious places where dma_addr_t should be used
> (instead of uint64_t, hwaddr, size_t, int32_t types).
> 
> This allows to have &dma_addr_t type portable on 32/64-bit
> hosts.
> 
> Move QEMUSGList declaration after dma_addr_t declaration
> so this structure can use the new type.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  include/sysemu/dma.h  | 22 +++++++++++-----------
>  hw/nvme/ctrl.c        |  2 +-
>  hw/rdma/rdma_utils.c  |  2 +-
>  hw/scsi/megasas.c     | 10 +++++-----
>  softmmu/dma-helpers.c |  6 +++---
>  5 files changed, 21 insertions(+), 21 deletions(-)
> 
> diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
> index 0db2478a506..7a8ae4fcd0b 100644
> --- a/include/sysemu/dma.h
> +++ b/include/sysemu/dma.h
> @@ -15,22 +15,11 @@
>  #include "block/block.h"
>  #include "block/accounting.h"
>  
> -typedef struct ScatterGatherEntry ScatterGatherEntry;
> -
>  typedef enum {
>      DMA_DIRECTION_TO_DEVICE = 0,
>      DMA_DIRECTION_FROM_DEVICE = 1,
>  } DMADirection;
>  
> -struct QEMUSGList {
> -    ScatterGatherEntry *sg;
> -    int nsg;
> -    int nalloc;
> -    size_t size;
> -    DeviceState *dev;
> -    AddressSpace *as;
> -};
> -
>  /*
>   * When an IOMMU is present, bus addresses become distinct from
>   * CPU/memory physical addresses and may be a different size.  Because
> @@ -43,6 +32,17 @@ typedef uint64_t dma_addr_t;
>  #define DMA_ADDR_BITS 64
>  #define DMA_ADDR_FMT "%" PRIx64
>  
> +typedef struct ScatterGatherEntry ScatterGatherEntry;
> +
> +struct QEMUSGList {
> +    ScatterGatherEntry *sg;
> +    int nsg;
> +    int nalloc;
> +    dma_addr_t size;
> +    DeviceState *dev;
> +    AddressSpace *as;
> +};

Changing one member while moving is sneaky. Why the move in this patch?

Apart from that and Peters comment

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult
  2022-01-04  8:54 ` [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult Philippe Mathieu-Daudé
@ 2022-01-10  8:51   ` David Hildenbrand
  2022-01-10  9:07     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 30+ messages in thread
From: David Hildenbrand @ 2022-01-10  8:51 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Klaus Jensen, Keith Busch,
	Paolo Bonzini, John Snow

On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
> From: Philippe Mathieu-Daudé <philmd@redhat.com>
> 
> Since the previous commit, dma_buf_rw() returns a MemTxResult
> type. Do not discard it, return it to the caller.
> 
> Since both dma_buf_read/dma_buf_write functions were previously
> returning the QEMUSGList size not consumed, add an extra argument
> where the unconsummed size can be stored.
> 
> Update the few callers.

I feel like this patch doesn't fit into the context of this series.
Especially as the cover letter mentiones "Finally we replace misuses
with dma_addr_t typedef."

Am I missing something?

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-10  8:49   ` David Hildenbrand
@ 2022-01-10  9:05     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-10  9:05 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Keith Busch, Paolo Bonzini,
	John Snow

On 1/10/22 09:49, David Hildenbrand wrote:
> On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
>> From: Philippe Mathieu-Daudé <philmd@redhat.com>
>>
>> Update the obvious places where dma_addr_t should be used
>> (instead of uint64_t, hwaddr, size_t, int32_t types).
>>
>> This allows to have &dma_addr_t type portable on 32/64-bit
>> hosts.
>>
>> Move QEMUSGList declaration after dma_addr_t declaration
>> so this structure can use the new type.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>>  include/sysemu/dma.h  | 22 +++++++++++-----------
>>  hw/nvme/ctrl.c        |  2 +-
>>  hw/rdma/rdma_utils.c  |  2 +-
>>  hw/scsi/megasas.c     | 10 +++++-----
>>  softmmu/dma-helpers.c |  6 +++---
>>  5 files changed, 21 insertions(+), 21 deletions(-)
>>
>> diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h
>> index 0db2478a506..7a8ae4fcd0b 100644
>> --- a/include/sysemu/dma.h
>> +++ b/include/sysemu/dma.h
>> @@ -15,22 +15,11 @@
>>  #include "block/block.h"
>>  #include "block/accounting.h"
>>  
>> -typedef struct ScatterGatherEntry ScatterGatherEntry;
>> -
>>  typedef enum {
>>      DMA_DIRECTION_TO_DEVICE = 0,
>>      DMA_DIRECTION_FROM_DEVICE = 1,
>>  } DMADirection;
>>  
>> -struct QEMUSGList {
>> -    ScatterGatherEntry *sg;
>> -    int nsg;
>> -    int nalloc;
>> -    size_t size;
>> -    DeviceState *dev;
>> -    AddressSpace *as;
>> -};
>> -
>>  /*
>>   * When an IOMMU is present, bus addresses become distinct from
>>   * CPU/memory physical addresses and may be a different size.  Because
>> @@ -43,6 +32,17 @@ typedef uint64_t dma_addr_t;
>>  #define DMA_ADDR_BITS 64
>>  #define DMA_ADDR_FMT "%" PRIx64
>>  
>> +typedef struct ScatterGatherEntry ScatterGatherEntry;
>> +
>> +struct QEMUSGList {
>> +    ScatterGatherEntry *sg;
>> +    int nsg;
>> +    int nalloc;
>> +    dma_addr_t size;
>> +    DeviceState *dev;
>> +    AddressSpace *as;
>> +};
> 
> Changing one member while moving is sneaky. Why the move in this patch?

Because dma_addr_t is declared before QEMUSGList. I will add an
intermediate patch.

> Apart from that and Peters comment
> 
> Reviewed-by: David Hildenbrand <david@redhat.com>

Thanks (Peter's comment addressed).


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult
  2022-01-10  8:51   ` David Hildenbrand
@ 2022-01-10  9:07     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-10  9:07 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, Michael S. Tsirkin,
	Philippe Mathieu-Daudé,
	Yuval Shaia, Peter Xu, Klaus Jensen, Klaus Jensen, Keith Busch,
	Paolo Bonzini, John Snow

On 1/10/22 09:51, David Hildenbrand wrote:
> On 04.01.22 09:54, Philippe Mathieu-Daudé wrote:
>> From: Philippe Mathieu-Daudé <philmd@redhat.com>
>>
>> Since the previous commit, dma_buf_rw() returns a MemTxResult
>> type. Do not discard it, return it to the caller.
>>
>> Since both dma_buf_read/dma_buf_write functions were previously
>> returning the QEMUSGList size not consumed, add an extra argument
>> where the unconsummed size can be stored.
>>
>> Update the few callers.
> 
> I feel like this patch doesn't fit into the context of this series.
> Especially as the cover letter mentiones "Finally we replace misuses
> with dma_addr_t typedef."
> 
> Am I missing something?

OK, I will simply repost it once this series gets merged.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools
  2022-01-07  0:17   ` Richard Henderson
@ 2022-01-11 10:43     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-11 10:43 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	John Snow, Michael S. Tsirkin, Yuval Shaia, Peter Xu,
	Keith Busch, Klaus Jensen, Paolo Bonzini,
	Philippe Mathieu-Daudé

On 1/7/22 01:17, Richard Henderson wrote:
> On 1/4/22 12:54 AM, Philippe Mathieu-Daudé wrote:
>> +if have_system or have_tools
> ...
>>   if have_system
>> +  stub_ss.add(files('fw_cfg.c'))
> 
> Disconnect in tests?

(I assume s/tests/stubs/).

fw_cfg-interface.c exposes the fw_cfg QOM interface, which is not
used by tools, but since interfaces are checked when QOM object is
created, we must include it to be able to use qemu-storage-daemon.

fw_cfg.c add a fw_cfg_arch_key_name() stub which is only required
for sysemu.

So no, there is no disconnect. I will however split this patch in
2 and better describe each change.

Thanks,

Phil.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant
  2022-01-06 11:08 ` [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Michael S. Tsirkin
@ 2022-01-11 18:47   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 30+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-01-11 18:47 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Fam Zheng, Hannes Reinecke, qemu-block, David Hildenbrand,
	qemu-devel, Peter Xu, Yuval Shaia, Klaus Jensen, Keith Busch,
	Paolo Bonzini, John Snow

On 1/6/22 12:08, Michael S. Tsirkin wrote:
> On Tue, Jan 04, 2022 at 09:54:22AM +0100, Philippe Mathieu-Daudé wrote:
>> Since v1:
>> - Addressed David review comment (stick to dma_addr_t type)
>> - Addressed Peter review comment (incorrect doc string)
> 
> 
> PCI things:
> 
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>

Thanks.

> who's merging all this? Yourself?

I just posted a v3 addressing review comments on this series.
Usually Paolo takes such patches, but I am happy to help sending
PR when this is trivial content (such this series).

Regards,

Phil.


^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2022-01-11 19:06 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-04  8:54 [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
2022-01-04  8:54 ` [PATCH v2 1/9] hw/nvram: Restrict stub to sysemu and tools Philippe Mathieu-Daudé
2022-01-07  0:17   ` Richard Henderson
2022-01-11 10:43     ` Philippe Mathieu-Daudé
2022-01-04  8:54 ` [PATCH v2 2/9] hw/pci: Restrict pci-bus stub to sysemu Philippe Mathieu-Daudé
2022-01-07  0:18   ` Richard Henderson
2022-01-10  8:43   ` David Hildenbrand
2022-01-04  8:54 ` [PATCH v2 3/9] hw/pci: Document pci_dma_map() Philippe Mathieu-Daudé
2022-01-07  0:20   ` Richard Henderson
2022-01-04  8:54 ` [PATCH v2 4/9] hw/dma: Remove CONFIG_USER_ONLY check Philippe Mathieu-Daudé
2022-01-07  0:20   ` Richard Henderson
2022-01-10  8:45   ` David Hildenbrand
2022-01-04  8:54 ` [PATCH v2 5/9] hw/rdma/rdma_utils: Rename rdma_pci_dma_map 'len' argument Philippe Mathieu-Daudé
2022-01-07  0:21   ` Richard Henderson
2022-01-10  8:46   ` David Hildenbrand
2022-01-04  8:54 ` [PATCH v2 6/9] hw/scsi: Rename SCSIRequest::resid as 'residual' Philippe Mathieu-Daudé
2022-01-07  0:22   ` Richard Henderson
2022-01-10  8:46   ` David Hildenbrand
2022-01-04  8:54 ` [PATCH v2 7/9] hw/dma: Fix format string issues using dma_addr_t Philippe Mathieu-Daudé
2022-01-07  0:24   ` Richard Henderson
2022-01-10  8:47   ` David Hildenbrand
2022-01-04  8:54 ` [PATCH v2 8/9] hw/dma: Use dma_addr_t type definition when relevant Philippe Mathieu-Daudé
2022-01-04  9:55   ` Peter Xu
2022-01-10  8:49   ` David Hildenbrand
2022-01-10  9:05     ` Philippe Mathieu-Daudé
2022-01-04  8:54 ` [PATCH v2 9/9] hw/dma: Let dma_buf_read() / dma_buf_write() propagate MemTxResult Philippe Mathieu-Daudé
2022-01-10  8:51   ` David Hildenbrand
2022-01-10  9:07     ` Philippe Mathieu-Daudé
2022-01-06 11:08 ` [PATCH v2 0/9] hw/dma: Use dma_addr_t type definition when relevant Michael S. Tsirkin
2022-01-11 18:47   ` Philippe Mathieu-Daudé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.