+ __atomic_add_fetch(&vring->used->idx, 1, __ATOMIC_RELAXED);
+ }
+}
+
+int
+virtio_user_send_status_update(struct virtio_user_dev *dev, uint8_t status)
+{
+ int ret;
+ uint64_t arg = status;
+
+ if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_USER)
+ ret = dev->ops->send_request(dev,
+ VHOST_USER_SET_STATUS, &arg);
+ else if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_VDPA)
+ ret = dev->ops->send_request(dev,
+ VHOST_USER_SET_STATUS, &status);
+ else
+ return 0;
+
+ if (ret) {
+ PMD_INIT_LOG(ERR, "VHOST_USER_SET_STATUS failed (%d): %s", ret,
+ strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+virtio_user_update_status(struct virtio_user_dev *dev)
+{
+ uint64_t ret;
+ uint8_t status;
+ int err;
+
+ if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_USER) {
+ err = dev->ops->send_request(dev, VHOST_USER_GET_STATUS, &ret);
+ if (!err && ret > UINT8_MAX) {
+ PMD_INIT_LOG(ERR, "Invalid VHOST_USER_GET_STATUS "
+ "response 0x%" PRIx64 "\n", ret);
+ return -1;
+ }
+
+ status = ret;
+ } else if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_VDPA) {
+ err = dev->ops->send_request(dev, VHOST_USER_GET_STATUS,
+ &status);
+ } else {
+ return 0;