All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Vincent Whitchurch <vincent.whitchurch@axis.com>
Cc: qemu-devel@nongnu.org, slp@redhat.com, mst@redhat.com,
	marcandre.lureau@redhat.com, stefanha@redhat.com,
	mathieu.poirier@linaro.org, viresh.kumar@linaro.org
Subject: Re: [PATCH v2 05/15] hw/virtio: add boilerplate for vhost-user-gpio device
Date: Wed, 06 Jul 2022 14:37:07 +0100	[thread overview]
Message-ID: <87sfnejr63.fsf@linaro.org> (raw)
In-Reply-To: <20220610083747.GA29012@axis.com>


Vincent Whitchurch <vincent.whitchurch@axis.com> writes:

> On Tue, May 24, 2022 at 04:40:46PM +0100, Alex Bennée wrote:
>> +static int vu_gpio_start(VirtIODevice *vdev)
>> +{
>> +    BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
>> +    VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
>> +    VHostUserGPIO *gpio = VHOST_USER_GPIO(vdev);
>> +    int ret, i;
>> +
>> +    if (!k->set_guest_notifiers) {
>> +        error_report("binding does not support guest notifiers");
>> +        return -ENOSYS;
>> +    }
>> +
>> +    ret = vhost_dev_enable_notifiers(&gpio->vhost_dev, vdev);
>> +    if (ret < 0) {
>> +        error_report("Error enabling host notifiers: %d", ret);
>> +        return ret;
>> +    }
>> +
>> +    ret = k->set_guest_notifiers(qbus->parent, gpio->vhost_dev.nvqs, true);
>> +    if (ret < 0) {
>> +        error_report("Error binding guest notifier: %d", ret);
>> +        goto err_host_notifiers;
>> +    }
>> +
>> +    /*
>> +     * Before we start up we need to ensure we have the final feature
>> +     * set needed for the vhost configuration.
>> +     */
>> +    vhost_ack_features(&gpio->vhost_dev, feature_bits, vdev->backend_features);
>
> This is doing the feature handling differently from the other
> vhost-user-* implementations, and it doesn't seem to work for me.
> Negotiated features (I noticed it with VIRTIO_RING_F_EVENT_IDX) never
> make it to VHOST_USER_SET_FEATURES.
>
> If I change this code to match vhost-user-i2c and the other
> implementations like in the patch below, it works.

Unfortunately the virtio-i2c backend doesn't need
VHOST_USER_F_PROTOCOL_FEATURES which gets squashed with the bellow
changes which is the cause of the eventual failure in the qos-test:

  # Start of read-guest-mem tests                                                        
  vu_net_set_features: 0                                                                  
  **                                                                                     
  ERROR:../../tests/qtest/vhost-user-test.c:1031:vu_net_set_features: assertion failed: (msg->payload.u64 & (0x1ULL << VHOST_USER_F_PROTOCOL_FEATURES))

which adds to my confusion about the exact route the negotiation of
vhost-user feature bits is meant to make through the code.

>
> The guest is Linux v5.18.  The backend uses libvhost-user and is the one
> posted here (with a few fixes):
>
>  https://lore.kernel.org/lkml/20220311162445.346685-3-vincent.whitchurch@axis.com/
>
> 8<-------
> diff --git a/hw/virtio/vhost-user-gpio.c b/hw/virtio/vhost-user-gpio.c
> index 87e3976880..1dc7af6b03 100644
> --- a/hw/virtio/vhost-user-gpio.c
> +++ b/hw/virtio/vhost-user-gpio.c
> @@ -73,7 +73,7 @@ static int vu_gpio_start(VirtIODevice *vdev)
>       * Before we start up we need to ensure we have the final feature
>       * set needed for the vhost configuration.
>       */
> -    vhost_ack_features(&gpio->vhost_dev, feature_bits, vdev->backend_features);
> +    gpio->vhost_dev.acked_features = vdev->guest_features;
>  
>      ret = vhost_dev_start(&gpio->vhost_dev, vdev);
>      if (ret < 0) {
> @@ -156,9 +156,7 @@ static uint64_t vu_gpio_get_features(VirtIODevice *vdev, uint64_t features,
>      virtio_add_feature(&features, VIRTIO_GPIO_F_IRQ);
>      virtio_add_feature(&features, VIRTIO_F_VERSION_1);
>  
> -    vdev->backend_features = vhost_get_features(&gpio->vhost_dev, feature_bits,
> -                                                features);
> -    return vdev->backend_features;
> +    return vhost_get_features(&gpio->vhost_dev, feature_bits, features);
>  }
>  
>  static void vu_gpio_handle_output(VirtIODevice *vdev, VirtQueue *vq)


-- 
Alex Bennée


  reply	other threads:[~2022-07-06 13:42 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-24 15:40 [PATCH v2 00/15] virtio-gpio and various virtio cleanups Alex Bennée
2022-05-24 15:40 ` [PATCH v2 01/15] contrib/vhost-user-blk: fix 32 bit build and enable Alex Bennée
2022-05-25 16:03   ` Stefan Hajnoczi
2022-05-31  4:29   ` Raphael Norwitz
2022-05-24 15:40 ` [PATCH v2 02/15] include/hw/virtio: more comment for VIRTIO_F_BAD_FEATURE Alex Bennée
2022-05-25 16:04   ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 03/15] include/hw/virtio: document vhost_get_features Alex Bennée
2022-05-25 16:06   ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 04/15] include/hw/virtio: document vhost_ack_features Alex Bennée
2022-05-25 16:11   ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 05/15] hw/virtio: add boilerplate for vhost-user-gpio device Alex Bennée
2022-06-10  8:37   ` Vincent Whitchurch
2022-07-06 13:37     ` Alex Bennée [this message]
2022-05-24 15:40 ` [PATCH v2 06/15] hw/virtio: add vhost-user-gpio-pci boilerplate Alex Bennée
2022-05-24 15:40 ` [PATCH v2 07/15] tests/qtest: pass stdout/stderr down to subtests Alex Bennée
2022-05-24 15:43   ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 08/15] tests/qtest: add a timeout for subprocess_run_one_test Alex Bennée
2022-05-24 15:46   ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 09/15] tests/qtest: use qos_printf instead of g_test_message Alex Bennée
2022-05-24 15:40 ` [PATCH v2 10/15] tests/qtest: catch unhandled vhost-user messages Alex Bennée
2022-05-24 15:40 ` [PATCH v2 11/15] tests/qtest: use g_autofree for test_server_create_chr Alex Bennée
2022-05-24 15:40 ` [PATCH v2 12/15] tests/qtest: plain g_assert for VHOST_USER_F_PROTOCOL_FEATURES Alex Bennée
2022-06-02 16:26   ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 13/15] tests/qtest: implement stub for VHOST_USER_GET_CONFIG Alex Bennée
2022-05-24 15:40 ` [PATCH v2 14/15] tests/qtest: add a get_features op to vhost-user-test Alex Bennée
2022-05-24 15:40 ` [PATCH v2 15/15] tests/qtest: enable tests for virtio-gpio Alex Bennée
2022-05-25 16:17   ` Stefan Hajnoczi
2022-05-25 22:35     ` Alex Bennée
2022-05-26  8:06       ` Stefan Hajnoczi
2022-05-25 16:14 ` [PATCH v2 00/15] virtio-gpio and various virtio cleanups Stefan Hajnoczi
2022-07-07 13:38   ` Alex Bennée
2022-07-07 14:03     ` Stefan Hajnoczi
2022-07-07 15:20       ` Alex Bennée
2022-07-07 16:43         ` Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87sfnejr63.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=marcandre.lureau@redhat.com \
    --cc=mathieu.poirier@linaro.org \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=slp@redhat.com \
    --cc=stefanha@redhat.com \
    --cc=vincent.whitchurch@axis.com \
    --cc=viresh.kumar@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.