* [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
* 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
* [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 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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).