From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtualization@lists.linux.dev,
"Richard Weinberger" <richard@nod.at>,
"Anton Ivanov" <anton.ivanov@cambridgegreys.com>,
"Johannes Berg" <johannes@sipsolutions.net>,
"Hans de Goede" <hdegoede@redhat.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Vadim Pasternak" <vadimp@nvidia.com>,
"Bjorn Andersson" <andersson@kernel.org>,
"Mathieu Poirier" <mathieu.poirier@linaro.org>,
"Cornelia Huck" <cohuck@redhat.com>,
"Halil Pasic" <pasic@linux.ibm.com>,
"Eric Farman" <farman@linux.ibm.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>,
"David Hildenbrand" <david@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
linux-um@lists.infradead.org,
platform-driver-x86@vger.kernel.org,
linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org,
kvm@vger.kernel.org
Subject: Re: [PATCH vhost v9 3/6] virtio: find_vqs: pass struct instead of multi parameters
Date: Thu, 20 Jun 2024 19:12:48 +0800 [thread overview]
Message-ID: <1718881968.7394087-7-xuanzhuo@linux.alibaba.com> (raw)
In-Reply-To: <20240620070354-mutt-send-email-mst@kernel.org>
On Thu, 20 Jun 2024 07:06:53 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Thu, Jun 20, 2024 at 06:43:30PM +0800, Xuan Zhuo wrote:
> > On Thu, 20 Jun 2024 06:15:08 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > On Thu, Jun 20, 2024 at 05:20:49PM +0800, Xuan Zhuo wrote:
> > > > On Thu, 20 Jun 2024 05:14:24 -0400, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > > > On Thu, Jun 20, 2024 at 05:00:49PM +0800, Xuan Zhuo wrote:
> > > > > > > > @@ -226,21 +248,37 @@ struct virtqueue *virtio_find_single_vq(struct virtio_device *vdev,
> > > > > > > >
> > > > > > > > static inline
> > > > > > > > int virtio_find_vqs(struct virtio_device *vdev, unsigned nvqs,
> > > > > > > > - struct virtqueue *vqs[], vq_callback_t *callbacks[],
> > > > > > > > - const char * const names[],
> > > > > > > > - struct irq_affinity *desc)
> > > > > > > > + struct virtqueue *vqs[], vq_callback_t *callbacks[],
> > > > > > > > + const char * const names[],
> > > > > > > > + struct irq_affinity *desc)
> > > > > > > > {
> > > > > > > > - return vdev->config->find_vqs(vdev, nvqs, vqs, callbacks, names, NULL, desc);
> > > > > > > > + struct virtio_vq_config cfg = {};
> > > > > > > > +
> > > > > > > > + cfg.nvqs = nvqs;
> > > > > > > > + cfg.vqs = vqs;
> > > > > > > > + cfg.callbacks = callbacks;
> > > > > > > > + cfg.names = (const char **)names;
> > > > > > >
> > > > > > >
> > > > > > > Casting const away? Not safe.
> > > > > >
> > > > > >
> > > > > >
> > > > > > Because the vp_modern_create_avq() use the "const char *names[]",
> > > > > > and the virtio_uml.c changes the name in the subsequent commit, so
> > > > > > change the "names" inside the virtio_vq_config from "const char *const
> > > > > > *names" to "const char **names".
> > > > >
> > > > > I'm not sure I understand which commit you mean,
> > > > > and this kind of change needs to be documented, but it does not matter.
> > > > > Don't cast away const.
> > > >
> > > >
> > > > Do you mean change the virtio_find_vqs(), from
> > > > const char * const names[] to const char *names[].
> > > >
> > > > And update the caller?
> > > >
> > > > If we do not cast the const, we need to update all the caller to remove the
> > > > const.
> > > >
> > > > Right?
> > > >
> > > > Thanks.
> > >
> > >
> > > Just do not split the patchset at a boundary that makes you do that.
> > > If you are passing in an array from a const section then it
> > > has to be const and attempts to change it are a bad idea.
> >
> > Without this patch set:
> >
> > static struct virtqueue *vu_setup_vq(struct virtio_device *vdev,
> > unsigned index, vq_callback_t *callback,
> > const char *name, bool ctx)
> > {
> > struct virtio_uml_device *vu_dev = to_virtio_uml_device(vdev);
> > struct platform_device *pdev = vu_dev->pdev;
> > struct virtio_uml_vq_info *info;
> > struct virtqueue *vq;
> > int num = MAX_SUPPORTED_QUEUE_SIZE;
> > int rc;
> >
> > info = kzalloc(sizeof(*info), GFP_KERNEL);
> > if (!info) {
> > rc = -ENOMEM;
> > goto error_kzalloc;
> > }
> > -> snprintf(info->name, sizeof(info->name), "%s.%d-%s", pdev->name,
> > pdev->id, name);
> >
> > vq = vring_create_virtqueue(index, num, PAGE_SIZE, vdev, true, true,
> > ctx, vu_notify, callback, info->name);
> >
> >
> > The name is changed by vu_setup_vq().
> > If we want to pass names to
> > virtio ring, the names must not be "const char * const"
> >
> > And the admin queue of pci do the same thing.
> >
> > And I think you are right, we should not cast the const.
> > So we have to remove the "const" from the source.
> > And I checked the source code, if we remove the "const", I think
> > that makes sense.
> >
> > Thanks.
>
> /facepalm
>
> This is a different const.
>
>
> There should be no need to drop the annotation, core
> does not change these things and using const helps make
> sure that is the case.
If you do not like this, the left only way is to allocate new
memory to store the info, if the caller do not change.
In the further, maybe the caller can use the follow struct directly.
struct virtio_vq_config {
vq_callback_t callback;
const char *name;
const bool ctx;
};
For now, we can allocate memory to change the arrays (names, callbacks..)
to the array of struct virtio_vq_config.
And the find_vqs() accepts the array of struct virtio_vq_config.
How about this?
Thanks.
>
>
>
> >
> >
> > >
> > >
> > > > >
> > > > > --
> > > > > MST
> > > > >
> > >
>
next prev parent reply other threads:[~2024-06-20 11:18 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-24 9:15 [PATCH vhost v9 0/6] refactor the params of find_vqs() Xuan Zhuo
2024-04-24 9:15 ` [PATCH vhost v9 1/6] virtio_balloon: remove the dependence where names[] is null Xuan Zhuo
2024-06-20 8:08 ` Michael S. Tsirkin
2024-06-20 8:21 ` Jason Wang
2024-04-24 9:15 ` [PATCH vhost v9 2/6] virtio: remove support for names array entries being null Xuan Zhuo
2024-06-20 8:02 ` Michael S. Tsirkin
2024-06-20 8:39 ` Xuan Zhuo
2024-06-20 9:01 ` Michael S. Tsirkin
2024-06-20 9:04 ` Xuan Zhuo
2024-06-20 10:01 ` Michael S. Tsirkin
2024-06-20 10:49 ` Xuan Zhuo
2024-06-20 11:02 ` Michael S. Tsirkin
2024-06-20 11:04 ` Xuan Zhuo
2024-06-20 13:51 ` Michael S. Tsirkin
2024-06-22 6:07 ` Wang, Wei W
2024-06-23 10:14 ` Michael S. Tsirkin
2024-04-24 9:15 ` [PATCH vhost v9 3/6] virtio: find_vqs: pass struct instead of multi parameters Xuan Zhuo
2024-06-20 7:56 ` Michael S. Tsirkin
2024-06-20 9:00 ` Xuan Zhuo
2024-06-20 9:14 ` Michael S. Tsirkin
2024-06-20 9:20 ` Xuan Zhuo
2024-06-20 10:15 ` Michael S. Tsirkin
2024-06-20 10:43 ` Xuan Zhuo
2024-06-20 11:06 ` Michael S. Tsirkin
2024-06-20 11:12 ` Xuan Zhuo [this message]
2024-06-20 11:37 ` Michael S. Tsirkin
2024-04-24 9:15 ` [PATCH vhost v9 4/6] virtio: vring_create_virtqueue: " Xuan Zhuo
2024-04-24 9:15 ` [PATCH vhost v9 5/6] virtio: vring_new_virtqueue(): " Xuan Zhuo
2024-04-24 9:15 ` [PATCH vhost v9 6/6] virtio_ring: simplify the parameters of the funcs related to vring_create/new_virtqueue() Xuan Zhuo
2024-05-17 1:25 ` [PATCH vhost v9 0/6] refactor the params of find_vqs() Xuan Zhuo
2024-05-22 12:28 ` Michael S. Tsirkin
2024-05-22 12:35 ` Xuan Zhuo
2024-05-22 12:43 ` Michael S. Tsirkin
2024-05-22 12:44 ` Michael S. Tsirkin
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=1718881968.7394087-7-xuanzhuo@linux.alibaba.com \
--to=xuanzhuo@linux.alibaba.com \
--cc=agordeev@linux.ibm.com \
--cc=andersson@kernel.org \
--cc=anton.ivanov@cambridgegreys.com \
--cc=borntraeger@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=farman@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jasowang@redhat.com \
--cc=johannes@sipsolutions.net \
--cc=kvm@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=mathieu.poirier@linaro.org \
--cc=mst@redhat.com \
--cc=pasic@linux.ibm.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=richard@nod.at \
--cc=svens@linux.ibm.com \
--cc=vadimp@nvidia.com \
--cc=virtualization@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox