* [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.