Enable postcopy protocol feature except if dequeue
zero-copy is enabled. In this case, guest memory requires
to be populated, which is not compatible with userfaultfd.

Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com>
Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com>
---
 lib/librte_vhost/vhost_user.c | 7 +++++++
 lib/librte_vhost/vhost_user.h | 3 ++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index ee7337ac8..9d08f4af0 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -1317,6 +1317,13 @@ vhost_user_get_protocol_features(struct virtio_net 
**pdev,
        if (!(features & (1ULL << VIRTIO_F_IOMMU_PLATFORM)))
                protocol_features &= ~(1ULL << VHOST_USER_PROTOCOL_F_REPLY_ACK);
 
+       /*
+        * If dequeue zerocopy is enabled, guest memory requires to be
+        * populated, which is not compatible with postcopy.
+        */
+       if (dev->dequeue_zero_copy)
+               protocol_features &= ~(1ULL << VHOST_USER_PROTOCOL_F_PAGEFAULT);
+
        msg->payload.u64 = protocol_features;
        msg->size = sizeof(msg->payload.u64);
        msg->fd_num = 0;
diff --git a/lib/librte_vhost/vhost_user.h b/lib/librte_vhost/vhost_user.h
index 73b1fe2b9..dc97be843 100644
--- a/lib/librte_vhost/vhost_user.h
+++ b/lib/librte_vhost/vhost_user.h
@@ -22,7 +22,8 @@
                                         (1ULL << 
VHOST_USER_PROTOCOL_F_SLAVE_REQ) | \
                                         (1ULL << 
VHOST_USER_PROTOCOL_F_CRYPTO_SESSION) | \
                                         (1ULL << 
VHOST_USER_PROTOCOL_F_SLAVE_SEND_FD) | \
-                                        (1ULL << 
VHOST_USER_PROTOCOL_F_HOST_NOTIFIER))
+                                        (1ULL << 
VHOST_USER_PROTOCOL_F_HOST_NOTIFIER) | \
+                                        (1ULL << 
VHOST_USER_PROTOCOL_F_PAGEFAULT))
 
 typedef enum VhostUserRequest {
        VHOST_USER_NONE = 0,
-- 
2.17.1

Reply via email to