So that we will not break ABI in future extension by adding few more
fields.

Struct vhost_virtqueue is reserved with 16 qwords (the later vhost-live
migration support would at least consume 3 of them), and struct virtio_net
is reserved with a bit more, 64 qwords, as there is only one instance for
a virtio nic instance.

Note that both reservation are not placed at the end of the struct, but
instead before the last field, since both the last field at the two struct
take a lot spaces. Putting the reservation after it would divide those
reserved fields to another cacheline. (we might need fix them in future, btw)

CC: Panu Matilainen <pmatilai at redhat.com>
CC: Thomas Monjalon <thomas.monjalon at 6wind.com>
CC: Michael S. Tsirkin <mst at redhat.com>
CC: Victor Kaplansky <vkaplans at redhat.com>
Suggested-by: Panu Matilainen <pmatilai at redhat.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com>
---

Is the reservation a bit too large? :)
---
 lib/librte_vhost/rte_virtio_net.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/librte_vhost/rte_virtio_net.h 
b/lib/librte_vhost/rte_virtio_net.h
index 5687452..10dcb90 100644
--- a/lib/librte_vhost/rte_virtio_net.h
+++ b/lib/librte_vhost/rte_virtio_net.h
@@ -90,6 +90,7 @@ struct vhost_virtqueue {
        int                     callfd;                 /**< Used to notify the 
guest (trigger interrupt). */
        int                     kickfd;                 /**< Currently unused 
as polling mode is enabled. */
        int                     enabled;
+       uint64_t                reserved[16];           /**< Reserve some 
spaces for future extension. */
        struct buf_vector       buf_vec[BUF_VECTOR_MAX];        /**< for 
scatter RX. */
 } __rte_cache_aligned;

@@ -128,6 +129,7 @@ struct virtio_net {
        char                    ifname[IF_NAME_SZ];     /**< Name of the tap 
device or socket path. */
        uint32_t                virt_qp_nb;     /**< number of queue pair we 
have allocated */
        void                    *priv;          /**< private context */
+       uint64_t                reserved[64];   /**< Reserve some spaces for 
future extension. */
        struct vhost_virtqueue  *virtqueue[VHOST_MAX_QUEUE_PAIRS * 2];  /**< 
Contains all virtqueue information. */
 } __rte_cache_aligned;

-- 
1.9.0

Reply via email to