From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Brian Swetland <swetland@google.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Pawel Moll <pawel.moll@arm.com>,
virtualization@lists.linux-foundation.org
Subject: Re: [PATCH 03/22] virtio_config: make transports implement accessors.
Date: Thu, 21 Mar 2013 10:09:05 +0100 [thread overview]
Message-ID: <20130321100905.7d4ab9fb@gondolin> (raw)
In-Reply-To: <1363854584-25795-4-git-send-email-rusty@rustcorp.com.au>
On Thu, 21 Mar 2013 18:59:24 +1030
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(-)
>
> diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c
> index 6711e65..dcf35b1 100644
> --- a/drivers/s390/kvm/kvm_virtio.c
> +++ b/drivers/s390/kvm/kvm_virtio.c
> @@ -112,26 +112,82 @@ static void kvm_finalize_features(struct virtio_device *vdev)
> }
>
> /*
> - * Reading and writing elements in config space
> + * Reading and writing elements in config space. Host and guest are always
> + * big-endian, so no conversion necessary.
> */
> -static void kvm_get(struct virtio_device *vdev, unsigned int offset,
> - void *buf, unsigned len)
> +static u8 kvm_get8(struct virtio_device *vdev, unsigned int offset)
> {
> - struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
^^^^^^^^^^^^^^^^^^
This looks weird?
>
> - BUG_ON(offset + len > desc->config_len);
> - memcpy(buf, kvm_vq_configspace(desc) + offset, len);
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(u8) > desc->config_len);
> + return *(u8 *)(kvm_vq_configspace(desc) + offset);
> }
>
> -static void kvm_set(struct virtio_device *vdev, unsigned int offset,
> - const void *buf, unsigned len)
> +static void kvm_set8(struct virtio_device *vdev, unsigned int offset, u8 val)
> {
> - struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(val) > desc->config_len);
> + *(u8 *)(kvm_vq_configspace(desc) + offset) = val;
> +}
> +
> +static u16 kvm_get16(struct virtio_device *vdev, unsigned int offset)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(u16) > desc->config_len);
> + return *(u16 *)(kvm_vq_configspace(desc) + offset);
> +}
> +
> +static void kvm_set16(struct virtio_device *vdev, unsigned int offset, u16 val)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(val) > desc->config_len);
> + *(u16 *)(kvm_vq_configspace(desc) + offset) = val;
> +}
> +
> +static u32 kvm_get32(struct virtio_device *vdev, unsigned int offset)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
>
> - BUG_ON(offset + len > desc->config_len);
> - memcpy(kvm_vq_configspace(desc) + offset, buf, len);
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(u32) > desc->config_len);
> + return *(u32 *)(kvm_vq_configspace(desc) + offset);
> }
>
> +static void kvm_set32(struct virtio_device *vdev, unsigned int offset, u32 val)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(val) > desc->config_len);
> + *(u32 *)(kvm_vq_configspace(desc) + offset) = val;
> +}
> +
> +static u64 kvm_get64(struct virtio_device *vdev, unsigned int offset)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(u64) > desc->config_len);
> + return *(u64 *)(kvm_vq_configspace(desc) + offset);
> +}
> +
> +static void kvm_set64(struct virtio_device *vdev, unsigned int offset, u64 val)
> +{
> + struct lguest_device_desc *desc = to_lgdev(vdev)->desc;
> +
> + /* Check they didn't ask for more than the length of the config! */
> + BUG_ON(offset + sizeof(val) > desc->config_len);
> + *(u64 *)(kvm_vq_configspace(desc) + offset) = val;
> +}
> +
> +
The new functions don't seem to be hooked up anywhere?
> /*
> * The operations to get and set the status word just access
> * the status field of the device descriptor. set_status will also
> diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c
> index 2029b6c..3652473 100644
> --- a/drivers/s390/kvm/virtio_ccw.c
> +++ b/drivers/s390/kvm/virtio_ccw.c
> @@ -472,6 +472,7 @@ out_free:
> kfree(ccw);
> }
>
> +/* We don't need to do endian conversion, as it's always big endian like us */
> static void virtio_ccw_get_config(struct virtio_device *vdev,
> unsigned int offset, void *buf, unsigned len)
> {
> @@ -505,6 +506,21 @@ out_free:
> kfree(ccw);
> }
>
> +
> +#define VIRTIO_CCW_GET_CONFIGx(bits) \
> +static u##bits virtio_ccw_get_config##bits(struct virtio_device *vdev, \
> + unsigned int offset) \
> +{ \
> + u##bits v; \
> + virtio_ccw_get_config(vdev, offset, &v, sizeof(v)); \
> + return v; \
> +}
> +
> +VIRTIO_CCW_GET_CONFIGx(8)
> +VIRTIO_CCW_GET_CONFIGx(16)
> +VIRTIO_CCW_GET_CONFIGx(32)
> +VIRTIO_CCW_GET_CONFIGx(64)
> +
> static void virtio_ccw_set_config(struct virtio_device *vdev,
> unsigned int offset, const void *buf,
> unsigned len)
> @@ -535,6 +551,19 @@ out_free:
> kfree(ccw);
> }
>
> +#define VIRTIO_CCW_SET_CONFIGx(bits) \
> +static void virtio_ccw_set_config##bits(struct virtio_device *vdev, \
> + unsigned int offset, \
> + u##bits v) \
> +{ \
> + virtio_ccw_set_config(vdev, offset, &v, sizeof(v)); \
> +}
> +
> +VIRTIO_CCW_SET_CONFIGx(8)
> +VIRTIO_CCW_SET_CONFIGx(16)
> +VIRTIO_CCW_SET_CONFIGx(32)
> +VIRTIO_CCW_SET_CONFIGx(64)
> +
> static u8 virtio_ccw_get_status(struct virtio_device *vdev)
> {
> struct virtio_ccw_device *vcdev = to_vc_device(vdev);
> @@ -564,8 +593,14 @@ static void virtio_ccw_set_status(struct virtio_device *vdev, u8 status)
> static struct virtio_config_ops virtio_ccw_config_ops = {
> .get_features = virtio_ccw_get_features,
> .finalize_features = virtio_ccw_finalize_features,
> - .get = virtio_ccw_get_config,
> - .set = virtio_ccw_set_config,
> + .get8 = virtio_ccw_get_config8,
> + .set8 = virtio_ccw_set_config8,
> + .get16 = virtio_ccw_get_config16,
> + .set16 = virtio_ccw_set_config16,
> + .get32 = virtio_ccw_get_config32,
> + .set32 = virtio_ccw_set_config32,
> + .get64 = virtio_ccw_get_config64,
> + .set64 = virtio_ccw_set_config64,
> .get_status = virtio_ccw_get_status,
> .set_status = virtio_ccw_set_status,
> .reset = virtio_ccw_reset,
virtio-ccw looks sane at first glance.
next prev parent reply other threads:[~2013-03-21 9:09 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 [this message]
2013-03-22 0:31 ` Rusty Russell
2013-03-22 9:13 ` Cornelia Huck
2013-03-22 14:43 ` Sjur Brændeland
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=20130321100905.7d4ab9fb@gondolin \
--to=cornelia.huck@de.ibm.com \
--cc=borntraeger@de.ibm.com \
--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).