virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: "Sjur Brændeland" <sjurbren@gmail.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Pawel Moll <pawel.moll@arm.com>,
	Brian Swetland <swetland@google.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Erwan YVIN <Erwan.Yvin@stericsson.com>,
	virtualization@lists.linux-foundation.org,
	Christian Borntraeger <borntraeger@de.ibm.com>
Subject: Re: [PATCH 03/22] virtio_config: make transports implement accessors.
Date: Fri, 22 Mar 2013 15:43:00 +0100	[thread overview]
Message-ID: <CAJK669aihduWvc216GdvFth3QTzbnQCcfVouYU1yntVUrXNJOQ@mail.gmail.com> (raw)
In-Reply-To: <1363854584-25795-4-git-send-email-rusty@rustcorp.com.au>

On Thu, Mar 21, 2013 at 9:29 AM, Rusty Russell <rusty@rustcorp.com.au> wrote:
> All transports just pass through at the moment.
>
> Cc: Ohad Ben-Cohen <ohad@wizery.com>
> Cc: Brian Swetland <swetland@google.com>
> Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
> Cc: Pawel Moll <pawel.moll@arm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
> ---
>  drivers/lguest/lguest_device.c |   79 ++++++++++++++++++++++++++++++++++------
>  drivers/net/caif/caif_virtio.c |    2 +-
>  drivers/s390/kvm/kvm_virtio.c  |   78 +++++++++++++++++++++++++++++++++------
>  drivers/s390/kvm/virtio_ccw.c  |   39 +++++++++++++++++++-
>  drivers/virtio/virtio_mmio.c   |   35 +++++++++++++++++-
>  drivers/virtio/virtio_pci.c    |   39 +++++++++++++++++---
>  include/linux/virtio_config.h  |   70 +++++++++++++++++++++--------------
>  7 files changed, 283 insertions(+), 59 deletions(-)
>

> --- a/drivers/virtio/virtio_pci.c
> +++ b/drivers/virtio/virtio_pci.c
> @@ -127,7 +127,7 @@ static void vp_finalize_features(struct virtio_device *vdev)
>         iowrite32(vdev->features[0], vp_dev->ioaddr+VIRTIO_PCI_GUEST_FEATURES);
>  }
>
> -/* virtio config->get() implementation */
> +/* Device config access: we use guest endian, as per spec. */
>  static void vp_get(struct virtio_device *vdev, unsigned offset,
>                    void *buf, unsigned len)
>  {
> @@ -141,8 +141,19 @@ static void vp_get(struct virtio_device *vdev, unsigned offset,
>                 ptr[i] = ioread8(ioaddr + i);
>  }
>
> -/* the config->set() implementation.  it's symmetric to the config->get()
> - * implementation */
> +#define VP_GETx(bits)                                                  \
> +static u##bits vp_get##bits(struct virtio_device *vdev, unsigned int offset) \
> +{                                                                      \
> +       u##bits v;                                                      \
> +       vp_get(vdev, offset, &v, sizeof(v));                            \
> +       return v;                                                       \
> +}
> +
> +VP_GETx(8)
> +VP_GETx(16)
> +VP_GETx(32)
> +VP_GETx(64)
> +
>  static void vp_set(struct virtio_device *vdev, unsigned offset,
>                    const void *buf, unsigned len)
>  {
> @@ -156,6 +167,18 @@ static void vp_set(struct virtio_device *vdev, unsigned offset,
>                 iowrite8(ptr[i], ioaddr + i);
>  }
>
> +#define VP_SETx(bits)                                                  \
> +static void vp_set##bits(struct virtio_device *vdev, unsigned int offset, \
> +                        u##bits v)                                     \
> +{                                                                      \
> +       vp_set(vdev, offset, &v, sizeof(v));                            \
> +}
> +
> +VP_SETx(8)
> +VP_SETx(16)
> +VP_SETx(32)
> +VP_SETx(64)
> +
>  /* config->{get,set}_status() implementations */
>  static u8 vp_get_status(struct virtio_device *vdev)
>  {
> @@ -653,8 +676,14 @@ static int vp_set_vq_affinity(struct virtqueue *vq, int cpu)
>  }
>
>  static const struct virtio_config_ops virtio_pci_config_ops = {
> -       .get            = vp_get,
> -       .set            = vp_set,
> +       .get8           = vp_get8,
> +       .set8           = vp_set8,
> +       .get16          = vp_get16,
> +       .set16          = vp_set16,
> +       .get32          = vp_get32,
> +       .set32          = vp_set32,
> +       .get64          = vp_get64,
> +       .set64          = vp_set64,
>         .get_status     = vp_get_status,
>         .set_status     = vp_set_status,
>         .reset          = vp_reset,

Would it be possible to make this simpler and less verbose somehow?
At least three virtio devices: virtio_pci_legacy.c, virtio_mmio.c and
soon remoteproc_virtio.c will duplicate variants of the code above.

What if set8/get8 was mandatory, and the 16,32,64 variants where optional,
and then virtio_creadX() virtio_cwriteX did the magic to make things work?

Regards,
Sjur

  parent reply	other threads:[~2013-03-22 14:43 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-21  8:29 [PATCH 00/22] New virtio PCI layout Rusty Russell
2013-03-21  8:29 ` [PATCH 01/22] virtio_config: introduce size-based accessors Rusty Russell
2013-03-21  8:29 ` [PATCH 02/22] virtio_config: use " Rusty Russell
2013-03-21  8:29 ` [PATCH 03/22] virtio_config: make transports implement accessors Rusty Russell
2013-03-21  9:09   ` Cornelia Huck
2013-03-22  0:31     ` Rusty Russell
2013-03-22  9:13       ` Cornelia Huck
2013-03-22 14:43   ` Sjur Brændeland [this message]
2013-03-24  4:24     ` Rusty Russell
2013-04-03 15:58       ` Sjur Brændeland
2013-04-02 17:16   ` Pawel Moll
2013-03-21  8:29 ` [PATCH 04/22] virtio: use u32, not bitmap for struct virtio_device's features Rusty Russell
2013-03-21 10:00   ` Cornelia Huck
2013-03-22  0:48     ` Rusty Russell
2013-03-21  8:29 ` [PATCH 05/22] virtio: add support for 64 bit features Rusty Russell
2013-03-21 10:06   ` Cornelia Huck
2013-03-22  0:50     ` Rusty Russell
2013-03-22  9:15       ` Cornelia Huck
2013-03-22 14:50     ` Sjur Brændeland
2013-03-22 20:12       ` Ohad Ben-Cohen
2013-03-25  8:30         ` Rusty Russell
2013-04-02 17:09   ` Pawel Moll
2013-03-21  8:29 ` [PATCH 06/22] virtio: move vring structure into struct virtqueue Rusty Russell
2013-03-21  8:29 ` [PATCH 07/22] pci: add pci_iomap_range Rusty Russell
2013-03-21  8:29 ` [PATCH 08/22] virtio-pci: define layout for virtio vendor-specific capabilities Rusty Russell
2013-03-21  8:29 ` [PATCH 09/22] virtio_pci: move old defines to legacy, introduce new structure Rusty Russell
2013-03-21  8:29 ` [PATCH 10/22] virtio_pci: use _LEGACY_ defines in virtio_pci_legacy.c Rusty Russell
2013-03-21  8:29 ` [PATCH 11/22] virtio_pci: don't use the legacy driver if we find the new PCI capabilities Rusty Russell
2013-03-21  8:29 ` [PATCH 12/22] virtio_pci: allow duplicate capabilities Rusty Russell
2013-03-21 10:28   ` Michael S. Tsirkin
2013-03-21 14:26     ` H. Peter Anvin
2013-03-21 14:43       ` Michael S. Tsirkin
2013-03-21 14:45         ` H. Peter Anvin
2013-03-21 15:19           ` Michael S. Tsirkin
2013-03-21 15:26             ` H. Peter Anvin
2013-03-21 15:58               ` Michael S. Tsirkin
2013-03-21 16:04                 ` H. Peter Anvin
2013-03-21 16:11                   ` Michael S. Tsirkin
2013-03-21 16:15                     ` H. Peter Anvin
2013-03-21 16:26                       ` Michael S. Tsirkin
2013-03-21 16:32                         ` H. Peter Anvin
2013-03-21 17:07                           ` Michael S. Tsirkin
2013-03-21 17:09                             ` H. Peter Anvin
2013-03-21 17:13                               ` Michael S. Tsirkin
2013-03-21 17:49                                 ` Michael S. Tsirkin
2013-03-21 17:54                                   ` H. Peter Anvin
2013-03-21 18:01                                     ` Michael S. Tsirkin
2013-03-22  0:57                                     ` Rusty Russell
2013-03-22  3:17                                       ` H. Peter Anvin
2013-03-24 13:14                                       ` Michael S. Tsirkin
2013-03-24 23:23                                         ` H. Peter Anvin
2013-03-25  6:53                                           ` Michael S. Tsirkin
2013-03-25  6:54                                             ` H. Peter Anvin
2013-03-25 10:03                                               ` Rusty Russell
2013-03-21  8:29 ` [PATCH 13/22] virtio_pci: new, capability-aware driver Rusty Russell
2013-03-21 10:24   ` Michael S. Tsirkin
2013-03-22  1:02     ` Rusty Russell
2013-03-24 13:08       ` Michael S. Tsirkin
2013-03-21  8:29 ` [PATCH 14/22] virtio_pci: layout changes as per hpa's suggestions Rusty Russell
2013-03-21  8:29 ` [PATCH 15/22] virtio_pci: use little endian for config space Rusty Russell
2013-03-21  8:29 ` [PATCH 16/22] virtio_pci: use separate notification offsets for each vq Rusty Russell
2013-03-21 10:13   ` Michael S. Tsirkin
2013-03-21 10:35     ` Michael S. Tsirkin
2013-03-22  2:52     ` Rusty Russell
2013-03-24 14:38       ` Michael S. Tsirkin
2013-03-24 20:19       ` Michael S. Tsirkin
2013-03-24 23:27         ` H. Peter Anvin
2013-03-25  7:05           ` Michael S. Tsirkin
2013-03-25 10:00         ` Rusty Russell
2013-03-26 19:39           ` Michael S. Tsirkin
2013-03-27  0:07             ` Rusty Russell
2013-03-27  0:22               ` H. Peter Anvin
2013-03-27  2:31                 ` H. Peter Anvin
2013-03-27 11:26                   ` Michael S. Tsirkin
2013-03-27 14:21                     ` H. Peter Anvin
2013-03-27 11:25               ` Michael S. Tsirkin
2013-03-28  4:50                 ` H. Peter Anvin
2013-03-30  3:19                   ` Rusty Russell
2013-04-02 22:51                     ` H. Peter Anvin
2013-04-03  6:10                       ` Rusty Russell
2013-04-03 11:22                         ` Michael S. Tsirkin
2013-04-03 14:10                           ` H. Peter Anvin
2013-04-03 14:35                             ` Michael S. Tsirkin
2013-04-03 14:35                               ` H. Peter Anvin
2013-04-03 17:02                                 ` Michael S. Tsirkin
2013-04-04  5:48                           ` Rusty Russell
2013-04-04  8:25                             ` Michael S. Tsirkin
2013-04-05  1:25                               ` Rusty Russell
2013-03-21  8:29 ` [PATCH 17/22] virtio_pci_legacy: cleanup struct virtio_pci_vq_info Rusty Russell
2013-03-21  8:29 ` [PATCH 18/22] virtio_pci: share structure between legacy and modern Rusty Russell
2013-03-21  8:29 ` [PATCH 19/22] virtio_pci: share interrupt/notify handlers " Rusty Russell
2013-03-21  8:29 ` [PATCH 20/22] virtio_pci: share virtqueue setup/teardown between modern and legacy driver Rusty Russell
2013-03-21  8:29 ` [PATCH 21/22] virtio_pci: simplify common helpers Rusty Russell
2013-03-21  8:29 ` [PATCH 22/22] virtio_pci: fix finalize_features in modern driver Rusty Russell

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=CAJK669aihduWvc216GdvFth3QTzbnQCcfVouYU1yntVUrXNJOQ@mail.gmail.com \
    --to=sjurbren@gmail.com \
    --cc=Erwan.Yvin@stericsson.com \
    --cc=borntraeger@de.ibm.com \
    --cc=linus.walleij@linaro.org \
    --cc=pawel.moll@arm.com \
    --cc=rusty@rustcorp.com.au \
    --cc=swetland@google.com \
    --cc=virtualization@lists.linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).