All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] Vmxnet3 VMStatification
@ 2016-12-15 20:05 Dr. David Alan Gilbert (git)
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's Dr. David Alan Gilbert (git)
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state Dr. David Alan Gilbert (git)
  0 siblings, 2 replies; 10+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2016-12-15 20:05 UTC (permalink / raw)
  To: qemu-devel, dmitry; +Cc: quintela, amit.shah

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Hi,
  This patchset converts most of vmxnet3 to VMState; the
only bit remaining is the msix section (which is what I'm
actually interested in cleaning up since it's one of the
last few users of register_savevm - but it'll have to wait).

Note a migration test with this on completes, but isn't
passing traffic; but neither is a world without this change.

Dave

Dr. David Alan Gilbert (2):
  vmxnet3: Convert ring values to uint32_t's
  vmxnet3: VMStatify rx/tx q_descr and int_state

 hw/net/vmxnet3.c | 284 +++++++++++++++++++------------------------------------
 1 file changed, 96 insertions(+), 188 deletions(-)

-- 
2.9.3

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

* [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's
  2016-12-15 20:05 [Qemu-devel] [PATCH 0/2] Vmxnet3 VMStatification Dr. David Alan Gilbert (git)
@ 2016-12-15 20:05 ` Dr. David Alan Gilbert (git)
  2016-12-18  7:55   ` Dmitry Fleytman
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state Dr. David Alan Gilbert (git)
  1 sibling, 1 reply; 10+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2016-12-15 20:05 UTC (permalink / raw)
  To: qemu-devel, dmitry; +Cc: quintela, amit.shah

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The index's in the Vmxnet3Ring were migrated as 32bit ints
yet are declared as size_t's.  They appear to be derived
from 32bit values loaded from guest memory, so actually
store them as that.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/net/vmxnet3.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 2cb2731..7853174 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -141,17 +141,17 @@ typedef struct VMXNET3Class {
 /* Cyclic ring abstraction */
 typedef struct {
     hwaddr pa;
-    size_t size;
-    size_t cell_size;
-    size_t next;
+    uint32_t size;
+    uint32_t cell_size;
+    uint32_t next;
     uint8_t gen;
 } Vmxnet3Ring;
 
 static inline void vmxnet3_ring_init(PCIDevice *d,
 				     Vmxnet3Ring *ring,
                                      hwaddr pa,
-                                     size_t size,
-                                     size_t cell_size,
+                                     uint32_t size,
+                                     uint32_t cell_size,
                                      bool zero_region)
 {
     ring->pa = pa;
@@ -166,7 +166,7 @@ static inline void vmxnet3_ring_init(PCIDevice *d,
 }
 
 #define VMXNET3_RING_DUMP(macro, ring_name, ridx, r)                         \
-    macro("%s#%d: base %" PRIx64 " size %zu cell_size %zu gen %d next %zu",  \
+    macro("%s#%d: base %" PRIx64 " size %u cell_size %u gen %d next %u",  \
           (ring_name), (ridx),                                               \
           (r)->pa, (r)->size, (r)->cell_size, (r)->gen, (r)->next)
 
-- 
2.9.3

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

* [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2016-12-15 20:05 [Qemu-devel] [PATCH 0/2] Vmxnet3 VMStatification Dr. David Alan Gilbert (git)
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's Dr. David Alan Gilbert (git)
@ 2016-12-15 20:05 ` Dr. David Alan Gilbert (git)
  2016-12-16 12:19   ` Dr. David Alan Gilbert
  1 sibling, 1 reply; 10+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2016-12-15 20:05 UTC (permalink / raw)
  To: qemu-devel, dmitry; +Cc: quintela, amit.shah

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Fairly simple mechanical conversion of all fields.

TODO!!!!
The problem is vmxnet3-ring size/cell_size/next are declared as size_t
but written as 32bit.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
 1 file changed, 90 insertions(+), 182 deletions(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 7853174..4f7dbaf 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
     }
 };
 
-static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
-{
-    r->pa = qemu_get_be64(f);
-    r->size = qemu_get_be32(f);
-    r->cell_size = qemu_get_be32(f);
-    r->next = qemu_get_be32(f);
-    r->gen = qemu_get_byte(f);
-}
-
-static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
-{
-    qemu_put_be64(f, r->pa);
-    qemu_put_be32(f, r->size);
-    qemu_put_be32(f, r->cell_size);
-    qemu_put_be32(f, r->next);
-    qemu_put_byte(f, r->gen);
-}
-
-static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
-    struct UPT1_TxStats *tx_stat)
-{
-    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
-    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
-    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
-    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
-    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
-    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
-    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
-    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
-    tx_stat->pktsTxError = qemu_get_be64(f);
-    tx_stat->pktsTxDiscard = qemu_get_be64(f);
-}
-
-static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
-    struct UPT1_TxStats *tx_stat)
-{
-    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
-    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
-    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
-    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
-    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
-    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
-    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
-    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
-    qemu_put_be64(f, tx_stat->pktsTxError);
-    qemu_put_be64(f, tx_stat->pktsTxDiscard);
-}
-
-static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
-    VMStateField *field)
-{
-    Vmxnet3TxqDescr *r = pv;
-
-    vmxnet3_get_ring_from_file(f, &r->tx_ring);
-    vmxnet3_get_ring_from_file(f, &r->comp_ring);
-    r->intr_idx = qemu_get_byte(f);
-    r->tx_stats_pa = qemu_get_be64(f);
-
-    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
-
-    return 0;
-}
-
-static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
-                                 VMStateField *field, QJSON *vmdesc)
-{
-    Vmxnet3TxqDescr *r = pv;
-
-    vmxnet3_put_ring_to_file(f, &r->tx_ring);
-    vmxnet3_put_ring_to_file(f, &r->comp_ring);
-    qemu_put_byte(f, r->intr_idx);
-    qemu_put_be64(f, r->tx_stats_pa);
-    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
-
-    return 0;
-}
-
-static const VMStateInfo txq_descr_info = {
-    .name = "txq_descr",
-    .get = vmxnet3_get_txq_descr,
-    .put = vmxnet3_put_txq_descr
+static const VMStateDescription vmstate_vmxnet3_ring = {
+    .name = "vmxnet3-ring",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(pa, Vmxnet3Ring),
+        VMSTATE_UINT32(size, Vmxnet3Ring),
+        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
+        VMSTATE_UINT32(next, Vmxnet3Ring),
+        VMSTATE_UINT8(gen, Vmxnet3Ring),
+        VMSTATE_END_OF_LIST()
+    }
 };
 
-static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
-    struct UPT1_RxStats *rx_stat)
-{
-    rx_stat->LROPktsRxOK = qemu_get_be64(f);
-    rx_stat->LROBytesRxOK = qemu_get_be64(f);
-    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
-    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
-    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
-    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
-    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
-    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
-    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
-    rx_stat->pktsRxError = qemu_get_be64(f);
-}
-
-static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
-    struct UPT1_RxStats *rx_stat)
-{
-    qemu_put_be64(f, rx_stat->LROPktsRxOK);
-    qemu_put_be64(f, rx_stat->LROBytesRxOK);
-    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
-    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
-    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
-    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
-    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
-    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
-    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
-    qemu_put_be64(f, rx_stat->pktsRxError);
-}
-
-static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
-    VMStateField *field)
-{
-    Vmxnet3RxqDescr *r = pv;
-    int i;
-
-    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
-        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
+static const VMStateDescription vmstate_vmxnet3_tx_stats = {
+    .name = "vmxnet3-tx-stats",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
+        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
+        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
+        VMSTATE_END_OF_LIST()
     }
+};
 
-    vmxnet3_get_ring_from_file(f, &r->comp_ring);
-    r->intr_idx = qemu_get_byte(f);
-    r->rx_stats_pa = qemu_get_be64(f);
-
-    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
-
-    return 0;
-}
-
-static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
-                                 VMStateField *field, QJSON *vmdesc)
-{
-    Vmxnet3RxqDescr *r = pv;
-    int i;
-
-    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
-        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
+static const VMStateDescription vmstate_vmxnet3_txq_descr = {
+    .name = "vmxnet3-txq-descr",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
+                       Vmxnet3Ring),
+        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
+                       Vmxnet3Ring),
+        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
+        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
+        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
+                       struct UPT1_TxStats),
+        VMSTATE_END_OF_LIST()
     }
+};
 
-    vmxnet3_put_ring_to_file(f, &r->comp_ring);
-    qemu_put_byte(f, r->intr_idx);
-    qemu_put_be64(f, r->rx_stats_pa);
-    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
+static const VMStateDescription vmstate_vmxnet3_rx_stats = {
+    .name = "vmxnet3-rx-stats",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
+        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
+        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
+        VMSTATE_END_OF_LIST()
+    }
+};
 
-    return 0;
-}
+static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
+    .name = "vmxnet3-rxq-descr",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
+                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
+                             vmstate_vmxnet3_ring, Vmxnet3Ring),
+        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
+                       Vmxnet3Ring),
+        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
+        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
+        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
+                       struct UPT1_RxStats),
+        VMSTATE_END_OF_LIST()
+    }
+};
 
 static int vmxnet3_post_load(void *opaque, int version_id)
 {
@@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
     return 0;
 }
 
-static const VMStateInfo rxq_descr_info = {
-    .name = "rxq_descr",
-    .get = vmxnet3_get_rxq_descr,
-    .put = vmxnet3_put_rxq_descr
-};
-
-static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
-    VMStateField *field)
-{
-    Vmxnet3IntState *r = pv;
-
-    r->is_masked = qemu_get_byte(f);
-    r->is_pending = qemu_get_byte(f);
-    r->is_asserted = qemu_get_byte(f);
-
-    return 0;
-}
-
-static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
-                                 VMStateField *field, QJSON *vmdesc)
-{
-    Vmxnet3IntState *r = pv;
-
-    qemu_put_byte(f, r->is_masked);
-    qemu_put_byte(f, r->is_pending);
-    qemu_put_byte(f, r->is_asserted);
-
-    return 0;
-}
-
-static const VMStateInfo int_state_info = {
-    .name = "int_state",
-    .get = vmxnet3_get_int_state,
-    .put = vmxnet3_put_int_state
+static const VMStateDescription vmstate_vmxnet3_int_state = {
+    .name = "vmxnet3-int-state",
+    .version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
+        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
+        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
+        VMSTATE_END_OF_LIST()
+    }
 };
 
 static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
@@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
             VMSTATE_UINT64(drv_shmem, VMXNET3State),
             VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
 
-            VMSTATE_ARRAY(txq_descr, VMXNET3State,
-                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
+            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
+                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
                 Vmxnet3TxqDescr),
-            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
-                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
+            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
+                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
                 Vmxnet3RxqDescr),
-            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
-                0, int_state_info, Vmxnet3IntState),
+            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
+                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
+                Vmxnet3IntState),
 
             VMSTATE_END_OF_LIST()
     },
-- 
2.9.3

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state Dr. David Alan Gilbert (git)
@ 2016-12-16 12:19   ` Dr. David Alan Gilbert
  2016-12-18  7:54     ` Dmitry Fleytman
  0 siblings, 1 reply; 10+ messages in thread
From: Dr. David Alan Gilbert @ 2016-12-16 12:19 UTC (permalink / raw)
  To: qemu-devel, dmitry; +Cc: quintela, amit.shah

* Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> Fairly simple mechanical conversion of all fields.
> 
> TODO!!!!
> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
> but written as 32bit.

Oops, I should have removed that warning in the commit message when
I added the 1st patch in.

Dave

> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>  hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
>  1 file changed, 90 insertions(+), 182 deletions(-)
> 
> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> index 7853174..4f7dbaf 100644
> --- a/hw/net/vmxnet3.c
> +++ b/hw/net/vmxnet3.c
> @@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
>      }
>  };
>  
> -static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
> -{
> -    r->pa = qemu_get_be64(f);
> -    r->size = qemu_get_be32(f);
> -    r->cell_size = qemu_get_be32(f);
> -    r->next = qemu_get_be32(f);
> -    r->gen = qemu_get_byte(f);
> -}
> -
> -static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
> -{
> -    qemu_put_be64(f, r->pa);
> -    qemu_put_be32(f, r->size);
> -    qemu_put_be32(f, r->cell_size);
> -    qemu_put_be32(f, r->next);
> -    qemu_put_byte(f, r->gen);
> -}
> -
> -static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
> -    struct UPT1_TxStats *tx_stat)
> -{
> -    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
> -    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
> -    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
> -    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
> -    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
> -    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
> -    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
> -    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
> -    tx_stat->pktsTxError = qemu_get_be64(f);
> -    tx_stat->pktsTxDiscard = qemu_get_be64(f);
> -}
> -
> -static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
> -    struct UPT1_TxStats *tx_stat)
> -{
> -    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
> -    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
> -    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
> -    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
> -    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
> -    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
> -    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
> -    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
> -    qemu_put_be64(f, tx_stat->pktsTxError);
> -    qemu_put_be64(f, tx_stat->pktsTxDiscard);
> -}
> -
> -static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
> -    VMStateField *field)
> -{
> -    Vmxnet3TxqDescr *r = pv;
> -
> -    vmxnet3_get_ring_from_file(f, &r->tx_ring);
> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> -    r->intr_idx = qemu_get_byte(f);
> -    r->tx_stats_pa = qemu_get_be64(f);
> -
> -    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
> -
> -    return 0;
> -}
> -
> -static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
> -                                 VMStateField *field, QJSON *vmdesc)
> -{
> -    Vmxnet3TxqDescr *r = pv;
> -
> -    vmxnet3_put_ring_to_file(f, &r->tx_ring);
> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> -    qemu_put_byte(f, r->intr_idx);
> -    qemu_put_be64(f, r->tx_stats_pa);
> -    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
> -
> -    return 0;
> -}
> -
> -static const VMStateInfo txq_descr_info = {
> -    .name = "txq_descr",
> -    .get = vmxnet3_get_txq_descr,
> -    .put = vmxnet3_put_txq_descr
> +static const VMStateDescription vmstate_vmxnet3_ring = {
> +    .name = "vmxnet3-ring",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_UINT64(pa, Vmxnet3Ring),
> +        VMSTATE_UINT32(size, Vmxnet3Ring),
> +        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
> +        VMSTATE_UINT32(next, Vmxnet3Ring),
> +        VMSTATE_UINT8(gen, Vmxnet3Ring),
> +        VMSTATE_END_OF_LIST()
> +    }
>  };
>  
> -static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
> -    struct UPT1_RxStats *rx_stat)
> -{
> -    rx_stat->LROPktsRxOK = qemu_get_be64(f);
> -    rx_stat->LROBytesRxOK = qemu_get_be64(f);
> -    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
> -    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
> -    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
> -    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
> -    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
> -    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
> -    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
> -    rx_stat->pktsRxError = qemu_get_be64(f);
> -}
> -
> -static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
> -    struct UPT1_RxStats *rx_stat)
> -{
> -    qemu_put_be64(f, rx_stat->LROPktsRxOK);
> -    qemu_put_be64(f, rx_stat->LROBytesRxOK);
> -    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
> -    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
> -    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
> -    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
> -    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
> -    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
> -    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
> -    qemu_put_be64(f, rx_stat->pktsRxError);
> -}
> -
> -static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
> -    VMStateField *field)
> -{
> -    Vmxnet3RxqDescr *r = pv;
> -    int i;
> -
> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> -        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
> +static const VMStateDescription vmstate_vmxnet3_tx_stats = {
> +    .name = "vmxnet3-tx-stats",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
> +        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
> +        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
> +        VMSTATE_END_OF_LIST()
>      }
> +};
>  
> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> -    r->intr_idx = qemu_get_byte(f);
> -    r->rx_stats_pa = qemu_get_be64(f);
> -
> -    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
> -
> -    return 0;
> -}
> -
> -static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
> -                                 VMStateField *field, QJSON *vmdesc)
> -{
> -    Vmxnet3RxqDescr *r = pv;
> -    int i;
> -
> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> -        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
> +static const VMStateDescription vmstate_vmxnet3_txq_descr = {
> +    .name = "vmxnet3-txq-descr",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> +                       Vmxnet3Ring),
> +        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> +                       Vmxnet3Ring),
> +        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
> +        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
> +        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
> +                       struct UPT1_TxStats),
> +        VMSTATE_END_OF_LIST()
>      }
> +};
>  
> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> -    qemu_put_byte(f, r->intr_idx);
> -    qemu_put_be64(f, r->rx_stats_pa);
> -    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
> +static const VMStateDescription vmstate_vmxnet3_rx_stats = {
> +    .name = "vmxnet3-rx-stats",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
> +        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
> +        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
> +        VMSTATE_END_OF_LIST()
> +    }
> +};
>  
> -    return 0;
> -}
> +static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
> +    .name = "vmxnet3-rxq-descr",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
> +                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
> +                             vmstate_vmxnet3_ring, Vmxnet3Ring),
> +        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
> +                       Vmxnet3Ring),
> +        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
> +        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
> +        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
> +                       struct UPT1_RxStats),
> +        VMSTATE_END_OF_LIST()
> +    }
> +};
>  
>  static int vmxnet3_post_load(void *opaque, int version_id)
>  {
> @@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
>      return 0;
>  }
>  
> -static const VMStateInfo rxq_descr_info = {
> -    .name = "rxq_descr",
> -    .get = vmxnet3_get_rxq_descr,
> -    .put = vmxnet3_put_rxq_descr
> -};
> -
> -static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
> -    VMStateField *field)
> -{
> -    Vmxnet3IntState *r = pv;
> -
> -    r->is_masked = qemu_get_byte(f);
> -    r->is_pending = qemu_get_byte(f);
> -    r->is_asserted = qemu_get_byte(f);
> -
> -    return 0;
> -}
> -
> -static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
> -                                 VMStateField *field, QJSON *vmdesc)
> -{
> -    Vmxnet3IntState *r = pv;
> -
> -    qemu_put_byte(f, r->is_masked);
> -    qemu_put_byte(f, r->is_pending);
> -    qemu_put_byte(f, r->is_asserted);
> -
> -    return 0;
> -}
> -
> -static const VMStateInfo int_state_info = {
> -    .name = "int_state",
> -    .get = vmxnet3_get_int_state,
> -    .put = vmxnet3_put_int_state
> +static const VMStateDescription vmstate_vmxnet3_int_state = {
> +    .name = "vmxnet3-int-state",
> +    .version_id = 0,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
> +        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
> +        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
> +        VMSTATE_END_OF_LIST()
> +    }
>  };
>  
>  static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
> @@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
>              VMSTATE_UINT64(drv_shmem, VMXNET3State),
>              VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
>  
> -            VMSTATE_ARRAY(txq_descr, VMXNET3State,
> -                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
> +            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
> +                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
>                  Vmxnet3TxqDescr),
> -            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
> -                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
> +            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
> +                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
>                  Vmxnet3RxqDescr),
> -            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
> -                0, int_state_info, Vmxnet3IntState),
> +            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
> +                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
> +                Vmxnet3IntState),
>  
>              VMSTATE_END_OF_LIST()
>      },
> -- 
> 2.9.3
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2016-12-16 12:19   ` Dr. David Alan Gilbert
@ 2016-12-18  7:54     ` Dmitry Fleytman
  2017-01-03 19:40       ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Fleytman @ 2016-12-18  7:54 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: qemu-devel, quintela, amit.shah

> 
> On 16 Dec 2016, at 14:19 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
> 
> * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>> 
>> Fairly simple mechanical conversion of all fields.
>> 
>> TODO!!!!
>> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
>> but written as 32bit.
> 
> Oops, I should have removed that warning in the commit message when
> I added the 1st patch in.



Acked-by: Dmitry Fleytman <dmitry@daynix.com>

> 
> Dave
> 
>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>> ---
>> hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
>> 1 file changed, 90 insertions(+), 182 deletions(-)
>> 
>> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
>> index 7853174..4f7dbaf 100644
>> --- a/hw/net/vmxnet3.c
>> +++ b/hw/net/vmxnet3.c
>> @@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
>>     }
>> };
>> 
>> -static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
>> -{
>> -    r->pa = qemu_get_be64(f);
>> -    r->size = qemu_get_be32(f);
>> -    r->cell_size = qemu_get_be32(f);
>> -    r->next = qemu_get_be32(f);
>> -    r->gen = qemu_get_byte(f);
>> -}
>> -
>> -static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
>> -{
>> -    qemu_put_be64(f, r->pa);
>> -    qemu_put_be32(f, r->size);
>> -    qemu_put_be32(f, r->cell_size);
>> -    qemu_put_be32(f, r->next);
>> -    qemu_put_byte(f, r->gen);
>> -}
>> -
>> -static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
>> -    struct UPT1_TxStats *tx_stat)
>> -{
>> -    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
>> -    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
>> -    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
>> -    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
>> -    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
>> -    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
>> -    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
>> -    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
>> -    tx_stat->pktsTxError = qemu_get_be64(f);
>> -    tx_stat->pktsTxDiscard = qemu_get_be64(f);
>> -}
>> -
>> -static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
>> -    struct UPT1_TxStats *tx_stat)
>> -{
>> -    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
>> -    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
>> -    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
>> -    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
>> -    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
>> -    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
>> -    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
>> -    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
>> -    qemu_put_be64(f, tx_stat->pktsTxError);
>> -    qemu_put_be64(f, tx_stat->pktsTxDiscard);
>> -}
>> -
>> -static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
>> -    VMStateField *field)
>> -{
>> -    Vmxnet3TxqDescr *r = pv;
>> -
>> -    vmxnet3_get_ring_from_file(f, &r->tx_ring);
>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
>> -    r->intr_idx = qemu_get_byte(f);
>> -    r->tx_stats_pa = qemu_get_be64(f);
>> -
>> -    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
>> -
>> -    return 0;
>> -}
>> -
>> -static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
>> -                                 VMStateField *field, QJSON *vmdesc)
>> -{
>> -    Vmxnet3TxqDescr *r = pv;
>> -
>> -    vmxnet3_put_ring_to_file(f, &r->tx_ring);
>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
>> -    qemu_put_byte(f, r->intr_idx);
>> -    qemu_put_be64(f, r->tx_stats_pa);
>> -    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
>> -
>> -    return 0;
>> -}
>> -
>> -static const VMStateInfo txq_descr_info = {
>> -    .name = "txq_descr",
>> -    .get = vmxnet3_get_txq_descr,
>> -    .put = vmxnet3_put_txq_descr
>> +static const VMStateDescription vmstate_vmxnet3_ring = {
>> +    .name = "vmxnet3-ring",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_UINT64(pa, Vmxnet3Ring),
>> +        VMSTATE_UINT32(size, Vmxnet3Ring),
>> +        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
>> +        VMSTATE_UINT32(next, Vmxnet3Ring),
>> +        VMSTATE_UINT8(gen, Vmxnet3Ring),
>> +        VMSTATE_END_OF_LIST()
>> +    }
>> };
>> 
>> -static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
>> -    struct UPT1_RxStats *rx_stat)
>> -{
>> -    rx_stat->LROPktsRxOK = qemu_get_be64(f);
>> -    rx_stat->LROBytesRxOK = qemu_get_be64(f);
>> -    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
>> -    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
>> -    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
>> -    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
>> -    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
>> -    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
>> -    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
>> -    rx_stat->pktsRxError = qemu_get_be64(f);
>> -}
>> -
>> -static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
>> -    struct UPT1_RxStats *rx_stat)
>> -{
>> -    qemu_put_be64(f, rx_stat->LROPktsRxOK);
>> -    qemu_put_be64(f, rx_stat->LROBytesRxOK);
>> -    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
>> -    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
>> -    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
>> -    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
>> -    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
>> -    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
>> -    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
>> -    qemu_put_be64(f, rx_stat->pktsRxError);
>> -}
>> -
>> -static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
>> -    VMStateField *field)
>> -{
>> -    Vmxnet3RxqDescr *r = pv;
>> -    int i;
>> -
>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
>> -        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
>> +static const VMStateDescription vmstate_vmxnet3_tx_stats = {
>> +    .name = "vmxnet3-tx-stats",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
>> +        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
>> +        VMSTATE_END_OF_LIST()
>>     }
>> +};
>> 
>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
>> -    r->intr_idx = qemu_get_byte(f);
>> -    r->rx_stats_pa = qemu_get_be64(f);
>> -
>> -    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
>> -
>> -    return 0;
>> -}
>> -
>> -static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
>> -                                 VMStateField *field, QJSON *vmdesc)
>> -{
>> -    Vmxnet3RxqDescr *r = pv;
>> -    int i;
>> -
>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
>> -        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
>> +static const VMStateDescription vmstate_vmxnet3_txq_descr = {
>> +    .name = "vmxnet3-txq-descr",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
>> +                       Vmxnet3Ring),
>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
>> +                       Vmxnet3Ring),
>> +        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
>> +        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
>> +        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
>> +                       struct UPT1_TxStats),
>> +        VMSTATE_END_OF_LIST()
>>     }
>> +};
>> 
>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
>> -    qemu_put_byte(f, r->intr_idx);
>> -    qemu_put_be64(f, r->rx_stats_pa);
>> -    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
>> +static const VMStateDescription vmstate_vmxnet3_rx_stats = {
>> +    .name = "vmxnet3-rx-stats",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
>> +        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
>> +        VMSTATE_END_OF_LIST()
>> +    }
>> +};
>> 
>> -    return 0;
>> -}
>> +static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
>> +    .name = "vmxnet3-rxq-descr",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
>> +                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
>> +                             vmstate_vmxnet3_ring, Vmxnet3Ring),
>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
>> +                       Vmxnet3Ring),
>> +        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
>> +        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
>> +        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
>> +                       struct UPT1_RxStats),
>> +        VMSTATE_END_OF_LIST()
>> +    }
>> +};
>> 
>> static int vmxnet3_post_load(void *opaque, int version_id)
>> {
>> @@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
>>     return 0;
>> }
>> 
>> -static const VMStateInfo rxq_descr_info = {
>> -    .name = "rxq_descr",
>> -    .get = vmxnet3_get_rxq_descr,
>> -    .put = vmxnet3_put_rxq_descr
>> -};
>> -
>> -static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
>> -    VMStateField *field)
>> -{
>> -    Vmxnet3IntState *r = pv;
>> -
>> -    r->is_masked = qemu_get_byte(f);
>> -    r->is_pending = qemu_get_byte(f);
>> -    r->is_asserted = qemu_get_byte(f);
>> -
>> -    return 0;
>> -}
>> -
>> -static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
>> -                                 VMStateField *field, QJSON *vmdesc)
>> -{
>> -    Vmxnet3IntState *r = pv;
>> -
>> -    qemu_put_byte(f, r->is_masked);
>> -    qemu_put_byte(f, r->is_pending);
>> -    qemu_put_byte(f, r->is_asserted);
>> -
>> -    return 0;
>> -}
>> -
>> -static const VMStateInfo int_state_info = {
>> -    .name = "int_state",
>> -    .get = vmxnet3_get_int_state,
>> -    .put = vmxnet3_put_int_state
>> +static const VMStateDescription vmstate_vmxnet3_int_state = {
>> +    .name = "vmxnet3-int-state",
>> +    .version_id = 0,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
>> +        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
>> +        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
>> +        VMSTATE_END_OF_LIST()
>> +    }
>> };
>> 
>> static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
>> @@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
>>             VMSTATE_UINT64(drv_shmem, VMXNET3State),
>>             VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
>> 
>> -            VMSTATE_ARRAY(txq_descr, VMXNET3State,
>> -                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
>> +            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
>> +                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
>>                 Vmxnet3TxqDescr),
>> -            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
>> -                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
>> +            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
>> +                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
>>                 Vmxnet3RxqDescr),
>> -            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
>> -                0, int_state_info, Vmxnet3IntState),
>> +            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
>> +                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
>> +                Vmxnet3IntState),
>> 
>>             VMSTATE_END_OF_LIST()
>>     },
>> -- 
>> 2.9.3
>> 
>> 
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

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

* Re: [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's
  2016-12-15 20:05 ` [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's Dr. David Alan Gilbert (git)
@ 2016-12-18  7:55   ` Dmitry Fleytman
  0 siblings, 0 replies; 10+ messages in thread
From: Dmitry Fleytman @ 2016-12-18  7:55 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git); +Cc: qemu-devel, quintela, amit.shah


Acked-by: Dmitry Fleytman <dmitry@daynix.com>

> On 15 Dec 2016, at 22:05 PM, Dr. David Alan Gilbert (git) <dgilbert@redhat.com> wrote:
> 
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> The index's in the Vmxnet3Ring were migrated as 32bit ints
> yet are declared as size_t's.  They appear to be derived
> from 32bit values loaded from guest memory, so actually
> store them as that.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> hw/net/vmxnet3.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> index 2cb2731..7853174 100644
> --- a/hw/net/vmxnet3.c
> +++ b/hw/net/vmxnet3.c
> @@ -141,17 +141,17 @@ typedef struct VMXNET3Class {
> /* Cyclic ring abstraction */
> typedef struct {
>     hwaddr pa;
> -    size_t size;
> -    size_t cell_size;
> -    size_t next;
> +    uint32_t size;
> +    uint32_t cell_size;
> +    uint32_t next;
>     uint8_t gen;
> } Vmxnet3Ring;
> 
> static inline void vmxnet3_ring_init(PCIDevice *d,
> 				     Vmxnet3Ring *ring,
>                                      hwaddr pa,
> -                                     size_t size,
> -                                     size_t cell_size,
> +                                     uint32_t size,
> +                                     uint32_t cell_size,
>                                      bool zero_region)
> {
>     ring->pa = pa;
> @@ -166,7 +166,7 @@ static inline void vmxnet3_ring_init(PCIDevice *d,
> }
> 
> #define VMXNET3_RING_DUMP(macro, ring_name, ridx, r)                         \
> -    macro("%s#%d: base %" PRIx64 " size %zu cell_size %zu gen %d next %zu",  \
> +    macro("%s#%d: base %" PRIx64 " size %u cell_size %u gen %d next %u",  \
>           (ring_name), (ridx),                                               \
>           (r)->pa, (r)->size, (r)->cell_size, (r)->gen, (r)->next)
> 
> -- 
> 2.9.3
> 

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2016-12-18  7:54     ` Dmitry Fleytman
@ 2017-01-03 19:40       ` Dr. David Alan Gilbert
  2017-01-04  8:02         ` Dmitry Fleytman
  0 siblings, 1 reply; 10+ messages in thread
From: Dr. David Alan Gilbert @ 2017-01-03 19:40 UTC (permalink / raw)
  To: Dmitry Fleytman; +Cc: qemu-devel, quintela, amit.shah

* Dmitry Fleytman (dmitry@daynix.com) wrote:
> > 
> > On 16 Dec 2016, at 14:19 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
> > 
> > * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
> >> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >> 
> >> Fairly simple mechanical conversion of all fields.
> >> 
> >> TODO!!!!
> >> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
> >> but written as 32bit.
> > 
> > Oops, I should have removed that warning in the commit message when
> > I added the 1st patch in.
> 
> 
> 
> Acked-by: Dmitry Fleytman <dmitry@daynix.com>

Any reason for Acked-by rather than Reviewed-by ?
Are you going to pull those? 

Dave

> 
> > 
> > Dave
> > 
> >> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> >> ---
> >> hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
> >> 1 file changed, 90 insertions(+), 182 deletions(-)
> >> 
> >> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> >> index 7853174..4f7dbaf 100644
> >> --- a/hw/net/vmxnet3.c
> >> +++ b/hw/net/vmxnet3.c
> >> @@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
> >>     }
> >> };
> >> 
> >> -static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
> >> -{
> >> -    r->pa = qemu_get_be64(f);
> >> -    r->size = qemu_get_be32(f);
> >> -    r->cell_size = qemu_get_be32(f);
> >> -    r->next = qemu_get_be32(f);
> >> -    r->gen = qemu_get_byte(f);
> >> -}
> >> -
> >> -static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
> >> -{
> >> -    qemu_put_be64(f, r->pa);
> >> -    qemu_put_be32(f, r->size);
> >> -    qemu_put_be32(f, r->cell_size);
> >> -    qemu_put_be32(f, r->next);
> >> -    qemu_put_byte(f, r->gen);
> >> -}
> >> -
> >> -static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
> >> -    struct UPT1_TxStats *tx_stat)
> >> -{
> >> -    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
> >> -    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
> >> -    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
> >> -    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
> >> -    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
> >> -    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
> >> -    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
> >> -    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
> >> -    tx_stat->pktsTxError = qemu_get_be64(f);
> >> -    tx_stat->pktsTxDiscard = qemu_get_be64(f);
> >> -}
> >> -
> >> -static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
> >> -    struct UPT1_TxStats *tx_stat)
> >> -{
> >> -    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
> >> -    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
> >> -    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
> >> -    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
> >> -    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
> >> -    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
> >> -    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
> >> -    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
> >> -    qemu_put_be64(f, tx_stat->pktsTxError);
> >> -    qemu_put_be64(f, tx_stat->pktsTxDiscard);
> >> -}
> >> -
> >> -static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
> >> -    VMStateField *field)
> >> -{
> >> -    Vmxnet3TxqDescr *r = pv;
> >> -
> >> -    vmxnet3_get_ring_from_file(f, &r->tx_ring);
> >> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> >> -    r->intr_idx = qemu_get_byte(f);
> >> -    r->tx_stats_pa = qemu_get_be64(f);
> >> -
> >> -    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
> >> -
> >> -    return 0;
> >> -}
> >> -
> >> -static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
> >> -                                 VMStateField *field, QJSON *vmdesc)
> >> -{
> >> -    Vmxnet3TxqDescr *r = pv;
> >> -
> >> -    vmxnet3_put_ring_to_file(f, &r->tx_ring);
> >> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> >> -    qemu_put_byte(f, r->intr_idx);
> >> -    qemu_put_be64(f, r->tx_stats_pa);
> >> -    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
> >> -
> >> -    return 0;
> >> -}
> >> -
> >> -static const VMStateInfo txq_descr_info = {
> >> -    .name = "txq_descr",
> >> -    .get = vmxnet3_get_txq_descr,
> >> -    .put = vmxnet3_put_txq_descr
> >> +static const VMStateDescription vmstate_vmxnet3_ring = {
> >> +    .name = "vmxnet3-ring",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_UINT64(pa, Vmxnet3Ring),
> >> +        VMSTATE_UINT32(size, Vmxnet3Ring),
> >> +        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
> >> +        VMSTATE_UINT32(next, Vmxnet3Ring),
> >> +        VMSTATE_UINT8(gen, Vmxnet3Ring),
> >> +        VMSTATE_END_OF_LIST()
> >> +    }
> >> };
> >> 
> >> -static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
> >> -    struct UPT1_RxStats *rx_stat)
> >> -{
> >> -    rx_stat->LROPktsRxOK = qemu_get_be64(f);
> >> -    rx_stat->LROBytesRxOK = qemu_get_be64(f);
> >> -    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
> >> -    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
> >> -    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
> >> -    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
> >> -    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
> >> -    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
> >> -    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
> >> -    rx_stat->pktsRxError = qemu_get_be64(f);
> >> -}
> >> -
> >> -static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
> >> -    struct UPT1_RxStats *rx_stat)
> >> -{
> >> -    qemu_put_be64(f, rx_stat->LROPktsRxOK);
> >> -    qemu_put_be64(f, rx_stat->LROBytesRxOK);
> >> -    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
> >> -    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
> >> -    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
> >> -    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
> >> -    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
> >> -    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
> >> -    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
> >> -    qemu_put_be64(f, rx_stat->pktsRxError);
> >> -}
> >> -
> >> -static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
> >> -    VMStateField *field)
> >> -{
> >> -    Vmxnet3RxqDescr *r = pv;
> >> -    int i;
> >> -
> >> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> >> -        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
> >> +static const VMStateDescription vmstate_vmxnet3_tx_stats = {
> >> +    .name = "vmxnet3-tx-stats",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
> >> +        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
> >> +        VMSTATE_END_OF_LIST()
> >>     }
> >> +};
> >> 
> >> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> >> -    r->intr_idx = qemu_get_byte(f);
> >> -    r->rx_stats_pa = qemu_get_be64(f);
> >> -
> >> -    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
> >> -
> >> -    return 0;
> >> -}
> >> -
> >> -static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
> >> -                                 VMStateField *field, QJSON *vmdesc)
> >> -{
> >> -    Vmxnet3RxqDescr *r = pv;
> >> -    int i;
> >> -
> >> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> >> -        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
> >> +static const VMStateDescription vmstate_vmxnet3_txq_descr = {
> >> +    .name = "vmxnet3-txq-descr",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> >> +                       Vmxnet3Ring),
> >> +        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> >> +                       Vmxnet3Ring),
> >> +        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
> >> +        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
> >> +        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
> >> +                       struct UPT1_TxStats),
> >> +        VMSTATE_END_OF_LIST()
> >>     }
> >> +};
> >> 
> >> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> >> -    qemu_put_byte(f, r->intr_idx);
> >> -    qemu_put_be64(f, r->rx_stats_pa);
> >> -    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
> >> +static const VMStateDescription vmstate_vmxnet3_rx_stats = {
> >> +    .name = "vmxnet3-rx-stats",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
> >> +        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
> >> +        VMSTATE_END_OF_LIST()
> >> +    }
> >> +};
> >> 
> >> -    return 0;
> >> -}
> >> +static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
> >> +    .name = "vmxnet3-rxq-descr",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
> >> +                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
> >> +                             vmstate_vmxnet3_ring, Vmxnet3Ring),
> >> +        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
> >> +                       Vmxnet3Ring),
> >> +        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
> >> +        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
> >> +        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
> >> +                       struct UPT1_RxStats),
> >> +        VMSTATE_END_OF_LIST()
> >> +    }
> >> +};
> >> 
> >> static int vmxnet3_post_load(void *opaque, int version_id)
> >> {
> >> @@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
> >>     return 0;
> >> }
> >> 
> >> -static const VMStateInfo rxq_descr_info = {
> >> -    .name = "rxq_descr",
> >> -    .get = vmxnet3_get_rxq_descr,
> >> -    .put = vmxnet3_put_rxq_descr
> >> -};
> >> -
> >> -static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
> >> -    VMStateField *field)
> >> -{
> >> -    Vmxnet3IntState *r = pv;
> >> -
> >> -    r->is_masked = qemu_get_byte(f);
> >> -    r->is_pending = qemu_get_byte(f);
> >> -    r->is_asserted = qemu_get_byte(f);
> >> -
> >> -    return 0;
> >> -}
> >> -
> >> -static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
> >> -                                 VMStateField *field, QJSON *vmdesc)
> >> -{
> >> -    Vmxnet3IntState *r = pv;
> >> -
> >> -    qemu_put_byte(f, r->is_masked);
> >> -    qemu_put_byte(f, r->is_pending);
> >> -    qemu_put_byte(f, r->is_asserted);
> >> -
> >> -    return 0;
> >> -}
> >> -
> >> -static const VMStateInfo int_state_info = {
> >> -    .name = "int_state",
> >> -    .get = vmxnet3_get_int_state,
> >> -    .put = vmxnet3_put_int_state
> >> +static const VMStateDescription vmstate_vmxnet3_int_state = {
> >> +    .name = "vmxnet3-int-state",
> >> +    .version_id = 0,
> >> +    .fields = (VMStateField[]) {
> >> +        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
> >> +        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
> >> +        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
> >> +        VMSTATE_END_OF_LIST()
> >> +    }
> >> };
> >> 
> >> static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
> >> @@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
> >>             VMSTATE_UINT64(drv_shmem, VMXNET3State),
> >>             VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
> >> 
> >> -            VMSTATE_ARRAY(txq_descr, VMXNET3State,
> >> -                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
> >> +            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
> >> +                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
> >>                 Vmxnet3TxqDescr),
> >> -            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
> >> -                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
> >> +            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
> >> +                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
> >>                 Vmxnet3RxqDescr),
> >> -            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
> >> -                0, int_state_info, Vmxnet3IntState),
> >> +            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
> >> +                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
> >> +                Vmxnet3IntState),
> >> 
> >>             VMSTATE_END_OF_LIST()
> >>     },
> >> -- 
> >> 2.9.3
> >> 
> >> 
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2017-01-03 19:40       ` Dr. David Alan Gilbert
@ 2017-01-04  8:02         ` Dmitry Fleytman
  2017-01-31 19:44           ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 10+ messages in thread
From: Dmitry Fleytman @ 2017-01-04  8:02 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: Qemu Developers, Juan Quintela, amit.shah


> On 3 Jan 2017, at 21:40 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
> 
> * Dmitry Fleytman (dmitry@daynix.com <mailto:dmitry@daynix.com>) wrote:
>>> 
>>> On 16 Dec 2016, at 14:19 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
>>> 
>>> * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
>>>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>>>> 
>>>> Fairly simple mechanical conversion of all fields.
>>>> 
>>>> TODO!!!!
>>>> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
>>>> but written as 32bit.
>>> 
>>> Oops, I should have removed that warning in the commit message when
>>> I added the 1st patch in.
>> 
>> 
>> 
>> Acked-by: Dmitry Fleytman <dmitry@daynix.com>
> 
> Any reason for Acked-by rather than Reviewed-by ?
> Are you going to pull those? 

Hi,

There is no specific reason, the patch is OK as for me.
Reviewed-by: Dmitry Fleytman <dmitry@daynix.com>

Jason, would you pick up this patch?

~Dmitry

> 
> Dave
> 
>> 
>>> 
>>> Dave
>>> 
>>>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>>>> ---
>>>> hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
>>>> 1 file changed, 90 insertions(+), 182 deletions(-)
>>>> 
>>>> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
>>>> index 7853174..4f7dbaf 100644
>>>> --- a/hw/net/vmxnet3.c
>>>> +++ b/hw/net/vmxnet3.c
>>>> @@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
>>>>    }
>>>> };
>>>> 
>>>> -static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
>>>> -{
>>>> -    r->pa = qemu_get_be64(f);
>>>> -    r->size = qemu_get_be32(f);
>>>> -    r->cell_size = qemu_get_be32(f);
>>>> -    r->next = qemu_get_be32(f);
>>>> -    r->gen = qemu_get_byte(f);
>>>> -}
>>>> -
>>>> -static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
>>>> -{
>>>> -    qemu_put_be64(f, r->pa);
>>>> -    qemu_put_be32(f, r->size);
>>>> -    qemu_put_be32(f, r->cell_size);
>>>> -    qemu_put_be32(f, r->next);
>>>> -    qemu_put_byte(f, r->gen);
>>>> -}
>>>> -
>>>> -static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
>>>> -    struct UPT1_TxStats *tx_stat)
>>>> -{
>>>> -    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
>>>> -    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
>>>> -    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
>>>> -    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
>>>> -    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
>>>> -    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
>>>> -    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
>>>> -    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
>>>> -    tx_stat->pktsTxError = qemu_get_be64(f);
>>>> -    tx_stat->pktsTxDiscard = qemu_get_be64(f);
>>>> -}
>>>> -
>>>> -static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
>>>> -    struct UPT1_TxStats *tx_stat)
>>>> -{
>>>> -    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
>>>> -    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
>>>> -    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
>>>> -    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
>>>> -    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
>>>> -    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
>>>> -    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
>>>> -    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
>>>> -    qemu_put_be64(f, tx_stat->pktsTxError);
>>>> -    qemu_put_be64(f, tx_stat->pktsTxDiscard);
>>>> -}
>>>> -
>>>> -static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
>>>> -    VMStateField *field)
>>>> -{
>>>> -    Vmxnet3TxqDescr *r = pv;
>>>> -
>>>> -    vmxnet3_get_ring_from_file(f, &r->tx_ring);
>>>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
>>>> -    r->intr_idx = qemu_get_byte(f);
>>>> -    r->tx_stats_pa = qemu_get_be64(f);
>>>> -
>>>> -    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>>>> -static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
>>>> -                                 VMStateField *field, QJSON *vmdesc)
>>>> -{
>>>> -    Vmxnet3TxqDescr *r = pv;
>>>> -
>>>> -    vmxnet3_put_ring_to_file(f, &r->tx_ring);
>>>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
>>>> -    qemu_put_byte(f, r->intr_idx);
>>>> -    qemu_put_be64(f, r->tx_stats_pa);
>>>> -    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>>>> -static const VMStateInfo txq_descr_info = {
>>>> -    .name = "txq_descr",
>>>> -    .get = vmxnet3_get_txq_descr,
>>>> -    .put = vmxnet3_put_txq_descr
>>>> +static const VMStateDescription vmstate_vmxnet3_ring = {
>>>> +    .name = "vmxnet3-ring",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_UINT64(pa, Vmxnet3Ring),
>>>> +        VMSTATE_UINT32(size, Vmxnet3Ring),
>>>> +        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
>>>> +        VMSTATE_UINT32(next, Vmxnet3Ring),
>>>> +        VMSTATE_UINT8(gen, Vmxnet3Ring),
>>>> +        VMSTATE_END_OF_LIST()
>>>> +    }
>>>> };
>>>> 
>>>> -static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
>>>> -    struct UPT1_RxStats *rx_stat)
>>>> -{
>>>> -    rx_stat->LROPktsRxOK = qemu_get_be64(f);
>>>> -    rx_stat->LROBytesRxOK = qemu_get_be64(f);
>>>> -    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
>>>> -    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
>>>> -    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
>>>> -    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
>>>> -    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
>>>> -    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
>>>> -    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
>>>> -    rx_stat->pktsRxError = qemu_get_be64(f);
>>>> -}
>>>> -
>>>> -static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
>>>> -    struct UPT1_RxStats *rx_stat)
>>>> -{
>>>> -    qemu_put_be64(f, rx_stat->LROPktsRxOK);
>>>> -    qemu_put_be64(f, rx_stat->LROBytesRxOK);
>>>> -    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
>>>> -    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
>>>> -    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
>>>> -    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
>>>> -    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
>>>> -    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
>>>> -    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
>>>> -    qemu_put_be64(f, rx_stat->pktsRxError);
>>>> -}
>>>> -
>>>> -static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
>>>> -    VMStateField *field)
>>>> -{
>>>> -    Vmxnet3RxqDescr *r = pv;
>>>> -    int i;
>>>> -
>>>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
>>>> -        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
>>>> +static const VMStateDescription vmstate_vmxnet3_tx_stats = {
>>>> +    .name = "vmxnet3-tx-stats",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
>>>> +        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
>>>> +        VMSTATE_END_OF_LIST()
>>>>    }
>>>> +};
>>>> 
>>>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
>>>> -    r->intr_idx = qemu_get_byte(f);
>>>> -    r->rx_stats_pa = qemu_get_be64(f);
>>>> -
>>>> -    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>>>> -static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
>>>> -                                 VMStateField *field, QJSON *vmdesc)
>>>> -{
>>>> -    Vmxnet3RxqDescr *r = pv;
>>>> -    int i;
>>>> -
>>>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
>>>> -        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
>>>> +static const VMStateDescription vmstate_vmxnet3_txq_descr = {
>>>> +    .name = "vmxnet3-txq-descr",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
>>>> +                       Vmxnet3Ring),
>>>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
>>>> +                       Vmxnet3Ring),
>>>> +        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
>>>> +        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
>>>> +        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
>>>> +                       struct UPT1_TxStats),
>>>> +        VMSTATE_END_OF_LIST()
>>>>    }
>>>> +};
>>>> 
>>>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
>>>> -    qemu_put_byte(f, r->intr_idx);
>>>> -    qemu_put_be64(f, r->rx_stats_pa);
>>>> -    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
>>>> +static const VMStateDescription vmstate_vmxnet3_rx_stats = {
>>>> +    .name = "vmxnet3-rx-stats",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
>>>> +        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
>>>> +        VMSTATE_END_OF_LIST()
>>>> +    }
>>>> +};
>>>> 
>>>> -    return 0;
>>>> -}
>>>> +static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
>>>> +    .name = "vmxnet3-rxq-descr",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
>>>> +                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
>>>> +                             vmstate_vmxnet3_ring, Vmxnet3Ring),
>>>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
>>>> +                       Vmxnet3Ring),
>>>> +        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
>>>> +        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
>>>> +        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
>>>> +                       struct UPT1_RxStats),
>>>> +        VMSTATE_END_OF_LIST()
>>>> +    }
>>>> +};
>>>> 
>>>> static int vmxnet3_post_load(void *opaque, int version_id)
>>>> {
>>>> @@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
>>>>    return 0;
>>>> }
>>>> 
>>>> -static const VMStateInfo rxq_descr_info = {
>>>> -    .name = "rxq_descr",
>>>> -    .get = vmxnet3_get_rxq_descr,
>>>> -    .put = vmxnet3_put_rxq_descr
>>>> -};
>>>> -
>>>> -static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
>>>> -    VMStateField *field)
>>>> -{
>>>> -    Vmxnet3IntState *r = pv;
>>>> -
>>>> -    r->is_masked = qemu_get_byte(f);
>>>> -    r->is_pending = qemu_get_byte(f);
>>>> -    r->is_asserted = qemu_get_byte(f);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>>>> -static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
>>>> -                                 VMStateField *field, QJSON *vmdesc)
>>>> -{
>>>> -    Vmxnet3IntState *r = pv;
>>>> -
>>>> -    qemu_put_byte(f, r->is_masked);
>>>> -    qemu_put_byte(f, r->is_pending);
>>>> -    qemu_put_byte(f, r->is_asserted);
>>>> -
>>>> -    return 0;
>>>> -}
>>>> -
>>>> -static const VMStateInfo int_state_info = {
>>>> -    .name = "int_state",
>>>> -    .get = vmxnet3_get_int_state,
>>>> -    .put = vmxnet3_put_int_state
>>>> +static const VMStateDescription vmstate_vmxnet3_int_state = {
>>>> +    .name = "vmxnet3-int-state",
>>>> +    .version_id = 0,
>>>> +    .fields = (VMStateField[]) {
>>>> +        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
>>>> +        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
>>>> +        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
>>>> +        VMSTATE_END_OF_LIST()
>>>> +    }
>>>> };
>>>> 
>>>> static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
>>>> @@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
>>>>            VMSTATE_UINT64(drv_shmem, VMXNET3State),
>>>>            VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
>>>> 
>>>> -            VMSTATE_ARRAY(txq_descr, VMXNET3State,
>>>> -                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
>>>> +            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
>>>> +                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
>>>>                Vmxnet3TxqDescr),
>>>> -            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
>>>> -                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
>>>> +            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
>>>> +                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
>>>>                Vmxnet3RxqDescr),
>>>> -            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
>>>> -                0, int_state_info, Vmxnet3IntState),
>>>> +            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
>>>> +                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
>>>> +                Vmxnet3IntState),
>>>> 
>>>>            VMSTATE_END_OF_LIST()
>>>>    },
>>>> -- 
>>>> 2.9.3
>>>> 
>>>> 
>>> --
>>> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>> 
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com <mailto:dgilbert@redhat.com> / Manchester, UK

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2017-01-04  8:02         ` Dmitry Fleytman
@ 2017-01-31 19:44           ` Dr. David Alan Gilbert
  2017-02-24  1:39             ` Jason Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Dr. David Alan Gilbert @ 2017-01-31 19:44 UTC (permalink / raw)
  To: Dmitry Fleytman, jasowang; +Cc: Qemu Developers, Juan Quintela, amit.shah

* Dmitry Fleytman (dmitry@daynix.com) wrote:
> 
> > On 3 Jan 2017, at 21:40 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
> > 
> > * Dmitry Fleytman (dmitry@daynix.com <mailto:dmitry@daynix.com>) wrote:
> >>> 
> >>> On 16 Dec 2016, at 14:19 PM, Dr. David Alan Gilbert <dgilbert@redhat.com> wrote:
> >>> 
> >>> * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
> >>>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >>>> 
> >>>> Fairly simple mechanical conversion of all fields.
> >>>> 
> >>>> TODO!!!!
> >>>> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
> >>>> but written as 32bit.
> >>> 
> >>> Oops, I should have removed that warning in the commit message when
> >>> I added the 1st patch in.
> >> 
> >> 
> >> 
> >> Acked-by: Dmitry Fleytman <dmitry@daynix.com>
> > 
> > Any reason for Acked-by rather than Reviewed-by ?
> > Are you going to pull those? 
> 
> Hi,
> 
> There is no specific reason, the patch is OK as for me.
> Reviewed-by: Dmitry Fleytman <dmitry@daynix.com>
> 
> Jason, would you pick up this patch?

Hi Jason,
  Did you see ^^^^

Dave

> ~Dmitry
> 
> > 
> > Dave
> > 
> >> 
> >>> 
> >>> Dave
> >>> 
> >>>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> >>>> ---
> >>>> hw/net/vmxnet3.c | 272 ++++++++++++++++++-------------------------------------
> >>>> 1 file changed, 90 insertions(+), 182 deletions(-)
> >>>> 
> >>>> diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> >>>> index 7853174..4f7dbaf 100644
> >>>> --- a/hw/net/vmxnet3.c
> >>>> +++ b/hw/net/vmxnet3.c
> >>>> @@ -2403,155 +2403,87 @@ static const VMStateDescription vmxstate_vmxnet3_mcast_list = {
> >>>>    }
> >>>> };
> >>>> 
> >>>> -static void vmxnet3_get_ring_from_file(QEMUFile *f, Vmxnet3Ring *r)
> >>>> -{
> >>>> -    r->pa = qemu_get_be64(f);
> >>>> -    r->size = qemu_get_be32(f);
> >>>> -    r->cell_size = qemu_get_be32(f);
> >>>> -    r->next = qemu_get_be32(f);
> >>>> -    r->gen = qemu_get_byte(f);
> >>>> -}
> >>>> -
> >>>> -static void vmxnet3_put_ring_to_file(QEMUFile *f, Vmxnet3Ring *r)
> >>>> -{
> >>>> -    qemu_put_be64(f, r->pa);
> >>>> -    qemu_put_be32(f, r->size);
> >>>> -    qemu_put_be32(f, r->cell_size);
> >>>> -    qemu_put_be32(f, r->next);
> >>>> -    qemu_put_byte(f, r->gen);
> >>>> -}
> >>>> -
> >>>> -static void vmxnet3_get_tx_stats_from_file(QEMUFile *f,
> >>>> -    struct UPT1_TxStats *tx_stat)
> >>>> -{
> >>>> -    tx_stat->TSOPktsTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->TSOBytesTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->ucastPktsTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->ucastBytesTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->mcastPktsTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->mcastBytesTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->bcastPktsTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->bcastBytesTxOK = qemu_get_be64(f);
> >>>> -    tx_stat->pktsTxError = qemu_get_be64(f);
> >>>> -    tx_stat->pktsTxDiscard = qemu_get_be64(f);
> >>>> -}
> >>>> -
> >>>> -static void vmxnet3_put_tx_stats_to_file(QEMUFile *f,
> >>>> -    struct UPT1_TxStats *tx_stat)
> >>>> -{
> >>>> -    qemu_put_be64(f, tx_stat->TSOPktsTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->TSOBytesTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->ucastPktsTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->ucastBytesTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->mcastPktsTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->mcastBytesTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->bcastPktsTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->bcastBytesTxOK);
> >>>> -    qemu_put_be64(f, tx_stat->pktsTxError);
> >>>> -    qemu_put_be64(f, tx_stat->pktsTxDiscard);
> >>>> -}
> >>>> -
> >>>> -static int vmxnet3_get_txq_descr(QEMUFile *f, void *pv, size_t size,
> >>>> -    VMStateField *field)
> >>>> -{
> >>>> -    Vmxnet3TxqDescr *r = pv;
> >>>> -
> >>>> -    vmxnet3_get_ring_from_file(f, &r->tx_ring);
> >>>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> >>>> -    r->intr_idx = qemu_get_byte(f);
> >>>> -    r->tx_stats_pa = qemu_get_be64(f);
> >>>> -
> >>>> -    vmxnet3_get_tx_stats_from_file(f, &r->txq_stats);
> >>>> -
> >>>> -    return 0;
> >>>> -}
> >>>> -
> >>>> -static int vmxnet3_put_txq_descr(QEMUFile *f, void *pv, size_t size,
> >>>> -                                 VMStateField *field, QJSON *vmdesc)
> >>>> -{
> >>>> -    Vmxnet3TxqDescr *r = pv;
> >>>> -
> >>>> -    vmxnet3_put_ring_to_file(f, &r->tx_ring);
> >>>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> >>>> -    qemu_put_byte(f, r->intr_idx);
> >>>> -    qemu_put_be64(f, r->tx_stats_pa);
> >>>> -    vmxnet3_put_tx_stats_to_file(f, &r->txq_stats);
> >>>> -
> >>>> -    return 0;
> >>>> -}
> >>>> -
> >>>> -static const VMStateInfo txq_descr_info = {
> >>>> -    .name = "txq_descr",
> >>>> -    .get = vmxnet3_get_txq_descr,
> >>>> -    .put = vmxnet3_put_txq_descr
> >>>> +static const VMStateDescription vmstate_vmxnet3_ring = {
> >>>> +    .name = "vmxnet3-ring",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_UINT64(pa, Vmxnet3Ring),
> >>>> +        VMSTATE_UINT32(size, Vmxnet3Ring),
> >>>> +        VMSTATE_UINT32(cell_size, Vmxnet3Ring),
> >>>> +        VMSTATE_UINT32(next, Vmxnet3Ring),
> >>>> +        VMSTATE_UINT8(gen, Vmxnet3Ring),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>> +    }
> >>>> };
> >>>> 
> >>>> -static void vmxnet3_get_rx_stats_from_file(QEMUFile *f,
> >>>> -    struct UPT1_RxStats *rx_stat)
> >>>> -{
> >>>> -    rx_stat->LROPktsRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->LROBytesRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->ucastPktsRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->ucastBytesRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->mcastPktsRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->mcastBytesRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->bcastPktsRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->bcastBytesRxOK = qemu_get_be64(f);
> >>>> -    rx_stat->pktsRxOutOfBuf = qemu_get_be64(f);
> >>>> -    rx_stat->pktsRxError = qemu_get_be64(f);
> >>>> -}
> >>>> -
> >>>> -static void vmxnet3_put_rx_stats_to_file(QEMUFile *f,
> >>>> -    struct UPT1_RxStats *rx_stat)
> >>>> -{
> >>>> -    qemu_put_be64(f, rx_stat->LROPktsRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->LROBytesRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->ucastPktsRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->ucastBytesRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->mcastPktsRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->mcastBytesRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->bcastPktsRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->bcastBytesRxOK);
> >>>> -    qemu_put_be64(f, rx_stat->pktsRxOutOfBuf);
> >>>> -    qemu_put_be64(f, rx_stat->pktsRxError);
> >>>> -}
> >>>> -
> >>>> -static int vmxnet3_get_rxq_descr(QEMUFile *f, void *pv, size_t size,
> >>>> -    VMStateField *field)
> >>>> -{
> >>>> -    Vmxnet3RxqDescr *r = pv;
> >>>> -    int i;
> >>>> -
> >>>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> >>>> -        vmxnet3_get_ring_from_file(f, &r->rx_ring[i]);
> >>>> +static const VMStateDescription vmstate_vmxnet3_tx_stats = {
> >>>> +    .name = "vmxnet3-tx-stats",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_UINT64(TSOPktsTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(TSOBytesTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(ucastPktsTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(ucastBytesTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(mcastPktsTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(mcastBytesTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(bcastPktsTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(bcastBytesTxOK, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(pktsTxError, struct UPT1_TxStats),
> >>>> +        VMSTATE_UINT64(pktsTxDiscard, struct UPT1_TxStats),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>>    }
> >>>> +};
> >>>> 
> >>>> -    vmxnet3_get_ring_from_file(f, &r->comp_ring);
> >>>> -    r->intr_idx = qemu_get_byte(f);
> >>>> -    r->rx_stats_pa = qemu_get_be64(f);
> >>>> -
> >>>> -    vmxnet3_get_rx_stats_from_file(f, &r->rxq_stats);
> >>>> -
> >>>> -    return 0;
> >>>> -}
> >>>> -
> >>>> -static int vmxnet3_put_rxq_descr(QEMUFile *f, void *pv, size_t size,
> >>>> -                                 VMStateField *field, QJSON *vmdesc)
> >>>> -{
> >>>> -    Vmxnet3RxqDescr *r = pv;
> >>>> -    int i;
> >>>> -
> >>>> -    for (i = 0; i < VMXNET3_RX_RINGS_PER_QUEUE; i++) {
> >>>> -        vmxnet3_put_ring_to_file(f, &r->rx_ring[i]);
> >>>> +static const VMStateDescription vmstate_vmxnet3_txq_descr = {
> >>>> +    .name = "vmxnet3-txq-descr",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_STRUCT(tx_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> >>>> +                       Vmxnet3Ring),
> >>>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_ring,
> >>>> +                       Vmxnet3Ring),
> >>>> +        VMSTATE_UINT8(intr_idx, Vmxnet3TxqDescr),
> >>>> +        VMSTATE_UINT64(tx_stats_pa, Vmxnet3TxqDescr),
> >>>> +        VMSTATE_STRUCT(txq_stats, Vmxnet3TxqDescr, 0, vmstate_vmxnet3_tx_stats,
> >>>> +                       struct UPT1_TxStats),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>>    }
> >>>> +};
> >>>> 
> >>>> -    vmxnet3_put_ring_to_file(f, &r->comp_ring);
> >>>> -    qemu_put_byte(f, r->intr_idx);
> >>>> -    qemu_put_be64(f, r->rx_stats_pa);
> >>>> -    vmxnet3_put_rx_stats_to_file(f, &r->rxq_stats);
> >>>> +static const VMStateDescription vmstate_vmxnet3_rx_stats = {
> >>>> +    .name = "vmxnet3-rx-stats",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_UINT64(LROPktsRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(LROBytesRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(ucastPktsRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(ucastBytesRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(mcastPktsRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(mcastBytesRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(bcastPktsRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(bcastBytesRxOK, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(pktsRxOutOfBuf, struct UPT1_RxStats),
> >>>> +        VMSTATE_UINT64(pktsRxError, struct UPT1_RxStats),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>> +    }
> >>>> +};
> >>>> 
> >>>> -    return 0;
> >>>> -}
> >>>> +static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
> >>>> +    .name = "vmxnet3-rxq-descr",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_STRUCT_ARRAY(rx_ring, Vmxnet3RxqDescr,
> >>>> +                             VMXNET3_RX_RINGS_PER_QUEUE, 0,
> >>>> +                             vmstate_vmxnet3_ring, Vmxnet3Ring),
> >>>> +        VMSTATE_STRUCT(comp_ring, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_ring,
> >>>> +                       Vmxnet3Ring),
> >>>> +        VMSTATE_UINT8(intr_idx, Vmxnet3RxqDescr),
> >>>> +        VMSTATE_UINT64(rx_stats_pa, Vmxnet3RxqDescr),
> >>>> +        VMSTATE_STRUCT(rxq_stats, Vmxnet3RxqDescr, 0, vmstate_vmxnet3_rx_stats,
> >>>> +                       struct UPT1_RxStats),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>> +    }
> >>>> +};
> >>>> 
> >>>> static int vmxnet3_post_load(void *opaque, int version_id)
> >>>> {
> >>>> @@ -2577,40 +2509,15 @@ static int vmxnet3_post_load(void *opaque, int version_id)
> >>>>    return 0;
> >>>> }
> >>>> 
> >>>> -static const VMStateInfo rxq_descr_info = {
> >>>> -    .name = "rxq_descr",
> >>>> -    .get = vmxnet3_get_rxq_descr,
> >>>> -    .put = vmxnet3_put_rxq_descr
> >>>> -};
> >>>> -
> >>>> -static int vmxnet3_get_int_state(QEMUFile *f, void *pv, size_t size,
> >>>> -    VMStateField *field)
> >>>> -{
> >>>> -    Vmxnet3IntState *r = pv;
> >>>> -
> >>>> -    r->is_masked = qemu_get_byte(f);
> >>>> -    r->is_pending = qemu_get_byte(f);
> >>>> -    r->is_asserted = qemu_get_byte(f);
> >>>> -
> >>>> -    return 0;
> >>>> -}
> >>>> -
> >>>> -static int vmxnet3_put_int_state(QEMUFile *f, void *pv, size_t size,
> >>>> -                                 VMStateField *field, QJSON *vmdesc)
> >>>> -{
> >>>> -    Vmxnet3IntState *r = pv;
> >>>> -
> >>>> -    qemu_put_byte(f, r->is_masked);
> >>>> -    qemu_put_byte(f, r->is_pending);
> >>>> -    qemu_put_byte(f, r->is_asserted);
> >>>> -
> >>>> -    return 0;
> >>>> -}
> >>>> -
> >>>> -static const VMStateInfo int_state_info = {
> >>>> -    .name = "int_state",
> >>>> -    .get = vmxnet3_get_int_state,
> >>>> -    .put = vmxnet3_put_int_state
> >>>> +static const VMStateDescription vmstate_vmxnet3_int_state = {
> >>>> +    .name = "vmxnet3-int-state",
> >>>> +    .version_id = 0,
> >>>> +    .fields = (VMStateField[]) {
> >>>> +        VMSTATE_BOOL(is_masked, Vmxnet3IntState),
> >>>> +        VMSTATE_BOOL(is_pending, Vmxnet3IntState),
> >>>> +        VMSTATE_BOOL(is_asserted, Vmxnet3IntState),
> >>>> +        VMSTATE_END_OF_LIST()
> >>>> +    }
> >>>> };
> >>>> 
> >>>> static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
> >>>> @@ -2667,14 +2574,15 @@ static const VMStateDescription vmstate_vmxnet3 = {
> >>>>            VMSTATE_UINT64(drv_shmem, VMXNET3State),
> >>>>            VMSTATE_UINT64(temp_shared_guest_driver_memory, VMXNET3State),
> >>>> 
> >>>> -            VMSTATE_ARRAY(txq_descr, VMXNET3State,
> >>>> -                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, txq_descr_info,
> >>>> +            VMSTATE_STRUCT_ARRAY(txq_descr, VMXNET3State,
> >>>> +                VMXNET3_DEVICE_MAX_TX_QUEUES, 0, vmstate_vmxnet3_txq_descr,
> >>>>                Vmxnet3TxqDescr),
> >>>> -            VMSTATE_ARRAY(rxq_descr, VMXNET3State,
> >>>> -                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, rxq_descr_info,
> >>>> +            VMSTATE_STRUCT_ARRAY(rxq_descr, VMXNET3State,
> >>>> +                VMXNET3_DEVICE_MAX_RX_QUEUES, 0, vmstate_vmxnet3_rxq_descr,
> >>>>                Vmxnet3RxqDescr),
> >>>> -            VMSTATE_ARRAY(interrupt_states, VMXNET3State, VMXNET3_MAX_INTRS,
> >>>> -                0, int_state_info, Vmxnet3IntState),
> >>>> +            VMSTATE_STRUCT_ARRAY(interrupt_states, VMXNET3State,
> >>>> +                VMXNET3_MAX_INTRS, 0, vmstate_vmxnet3_int_state,
> >>>> +                Vmxnet3IntState),
> >>>> 
> >>>>            VMSTATE_END_OF_LIST()
> >>>>    },
> >>>> -- 
> >>>> 2.9.3
> >>>> 
> >>>> 
> >>> --
> >>> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> >> 
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com <mailto:dgilbert@redhat.com> / Manchester, UK
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

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

* Re: [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state
  2017-01-31 19:44           ` Dr. David Alan Gilbert
@ 2017-02-24  1:39             ` Jason Wang
  0 siblings, 0 replies; 10+ messages in thread
From: Jason Wang @ 2017-02-24  1:39 UTC (permalink / raw)
  To: Dr. David Alan Gilbert, Dmitry Fleytman
  Cc: Qemu Developers, Juan Quintela, amit.shah



On 2017年02月01日 03:44, Dr. David Alan Gilbert wrote:
> * Dmitry Fleytman (dmitry@daynix.com) wrote:
>>> On 3 Jan 2017, at 21:40 PM, Dr. David Alan Gilbert<dgilbert@redhat.com>  wrote:
>>>
>>> * Dmitry Fleytman (dmitry@daynix.com  <mailto:dmitry@daynix.com>) wrote:
>>>>> On 16 Dec 2016, at 14:19 PM, Dr. David Alan Gilbert<dgilbert@redhat.com>  wrote:
>>>>>
>>>>> * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
>>>>>> From: "Dr. David Alan Gilbert"<dgilbert@redhat.com>
>>>>>>
>>>>>> Fairly simple mechanical conversion of all fields.
>>>>>>
>>>>>> TODO!!!!
>>>>>> The problem is vmxnet3-ring size/cell_size/next are declared as size_t
>>>>>> but written as 32bit.
>>>>> Oops, I should have removed that warning in the commit message when
>>>>> I added the 1st patch in.
>>>>
>>>> Acked-by: Dmitry Fleytman<dmitry@daynix.com>
>>> Any reason for Acked-by rather than Reviewed-by ?
>>> Are you going to pull those?
>> Hi,
>>
>> There is no specific reason, the patch is OK as for me.
>> Reviewed-by: Dmitry Fleytman<dmitry@daynix.com>
>>
>> Jason, would you pick up this patch?
> Hi Jason,
>    Did you see ^^^^
>
> Dave
>

Applied to -net, thanks.

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

end of thread, other threads:[~2017-02-24  1:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-15 20:05 [Qemu-devel] [PATCH 0/2] Vmxnet3 VMStatification Dr. David Alan Gilbert (git)
2016-12-15 20:05 ` [Qemu-devel] [PATCH 1/2] vmxnet3: Convert ring values to uint32_t's Dr. David Alan Gilbert (git)
2016-12-18  7:55   ` Dmitry Fleytman
2016-12-15 20:05 ` [Qemu-devel] [PATCH 2/2] vmxnet3: VMStatify rx/tx q_descr and int_state Dr. David Alan Gilbert (git)
2016-12-16 12:19   ` Dr. David Alan Gilbert
2016-12-18  7:54     ` Dmitry Fleytman
2017-01-03 19:40       ` Dr. David Alan Gilbert
2017-01-04  8:02         ` Dmitry Fleytman
2017-01-31 19:44           ` Dr. David Alan Gilbert
2017-02-24  1:39             ` Jason Wang

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.