All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Greg Kurz <gkurz@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Juan Quintela" <quintela@redhat.com>,
	"Rusty Russell" <rusty@rustcorp.com.au>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	aneesh.kumar@linux.vnet.ibm.com,
	"Anthony Liguori" <aliguori@amazon.com>,
	"Amit Shah" <amit.shah@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v8 14/20] virtio-net: use virtio wrappers to access headers
Date: Fri, 13 Jun 2014 13:52:04 +0200	[thread overview]
Message-ID: <539AE5E4.3060708@suse.de> (raw)
In-Reply-To: <20140613112420.22108.4861.stgit@bahia.local>


On 13.06.14 13:24, Greg Kurz wrote:
> From: Rusty Russell <rusty@rustcorp.com.au>
>
> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
> [ pass VirtIODevice * to memory accessors,
>    TCP checksums fix by Cédric Le Goater,
>    Greg Kurz <gkurz@linux.vnet.ibm.com> ]
> Cc: Cédric Le Goater <clg@fr.ibm.com>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
>   hw/net/virtio-net.c |   34 +++++++++++++++++++++++++++-------
>   1 file changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index 58e7b73..fb17919 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -23,6 +23,7 @@
>   #include "hw/virtio/virtio-bus.h"
>   #include "qapi/qmp/qjson.h"
>   #include "monitor/monitor.h"
> +#include "hw/virtio/virtio-access.h"
>   
>   #define VIRTIO_NET_VM_VERSION    11
>   
> @@ -72,8 +73,8 @@ static void virtio_net_get_config(VirtIODevice *vdev, uint8_t *config)
>       VirtIONet *n = VIRTIO_NET(vdev);
>       struct virtio_net_config netcfg;
>   
> -    stw_p(&netcfg.status, n->status);
> -    stw_p(&netcfg.max_virtqueue_pairs, n->max_queues);
> +    virtio_stw_p(vdev, &netcfg.status, n->status);
> +    virtio_stw_p(vdev, &netcfg.max_virtqueue_pairs, n->max_queues);
>       memcpy(netcfg.mac, n->mac, ETH_ALEN);
>       memcpy(config, &netcfg, n->config_size);
>   }
> @@ -611,6 +612,7 @@ static int virtio_net_handle_offloads(VirtIONet *n, uint8_t cmd,
>   static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd,
>                                    struct iovec *iov, unsigned int iov_cnt)
>   {
> +    VirtIODevice *vdev = VIRTIO_DEVICE(n);
>       struct virtio_net_ctrl_mac mac_data;
>       size_t s;
>       NetClientState *nc = qemu_get_queue(n->nic);
> @@ -639,7 +641,7 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd,
>   
>       s = iov_to_buf(iov, iov_cnt, 0, &mac_data.entries,
>                      sizeof(mac_data.entries));
> -    mac_data.entries = ldl_p(&mac_data.entries);
> +    mac_data.entries = virtio_ldl_p(vdev, &mac_data.entries);
>       if (s != sizeof(mac_data.entries)) {
>           goto error;
>       }
> @@ -666,7 +668,7 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd,
>   
>       s = iov_to_buf(iov, iov_cnt, 0, &mac_data.entries,
>                      sizeof(mac_data.entries));
> -    mac_data.entries = ldl_p(&mac_data.entries);
> +    mac_data.entries = virtio_ldl_p(vdev, &mac_data.entries);
>       if (s != sizeof(mac_data.entries)) {
>           goto error;
>       }
> @@ -706,12 +708,13 @@ error:
>   static int virtio_net_handle_vlan_table(VirtIONet *n, uint8_t cmd,
>                                           struct iovec *iov, unsigned int iov_cnt)
>   {
> +    VirtIODevice *vdev = VIRTIO_DEVICE(n);
>       uint16_t vid;
>       size_t s;
>       NetClientState *nc = qemu_get_queue(n->nic);
>   
>       s = iov_to_buf(iov, iov_cnt, 0, &vid, sizeof(vid));
> -    vid = lduw_p(&vid);
> +    vid = virtio_lduw_p(vdev, &vid);
>       if (s != sizeof(vid)) {
>           return VIRTIO_NET_ERR;
>       }
> @@ -748,7 +751,7 @@ static int virtio_net_handle_mq(VirtIONet *n, uint8_t cmd,
>           return VIRTIO_NET_ERR;
>       }
>   
> -    queues = lduw_p(&mq.virtqueue_pairs);
> +    queues = virtio_lduw_p(vdev, &mq.virtqueue_pairs);
>   
>       if (queues < VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN ||
>           queues > VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX ||
> @@ -863,6 +866,14 @@ static int virtio_net_has_buffers(VirtIONetQueue *q, int bufsize)
>       return 1;
>   }
>   
> +static void virtio_net_hdr_swap(VirtIODevice *vdev, struct virtio_net_hdr *hdr)
> +{
> +    virtio_tswap16s(vdev, &hdr->hdr_len);
> +    virtio_tswap16s(vdev, &hdr->gso_size);
> +    virtio_tswap16s(vdev, &hdr->csum_start);
> +    virtio_tswap16s(vdev, &hdr->csum_offset);
> +}
> +
>   /* dhclient uses AF_PACKET but doesn't pass auxdata to the kernel so
>    * it never finds out that the packets don't have valid checksums.  This
>    * causes dhclient to get upset.  Fedora's carried a patch for ages to
> @@ -898,6 +909,7 @@ static void receive_header(VirtIONet *n, const struct iovec *iov, int iov_cnt,
>           void *wbuf = (void *)buf;
>           work_around_broken_dhclient(wbuf, wbuf + n->host_hdr_len,
>                                       size - n->host_hdr_len);
> +        virtio_net_hdr_swap(VIRTIO_DEVICE(n), wbuf);
>           iov_from_buf(iov, iov_cnt, 0, buf, sizeof(struct virtio_net_hdr));
>       } else {
>           struct virtio_net_hdr hdr = {
> @@ -1047,7 +1059,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t
>       }
>   
>       if (mhdr_cnt) {
> -        stw_p(&mhdr.num_buffers, i);
> +        virtio_stw_p(vdev, &mhdr.num_buffers, i);
>           iov_from_buf(mhdr_sg, mhdr_cnt,
>                        0,
>                        &mhdr.num_buffers, sizeof mhdr.num_buffers);
> @@ -1106,6 +1118,14 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q)
>               exit(1);
>           }
>   
> +        if (n->has_vnet_hdr) {
> +            if (out_sg[0].iov_len < n->guest_hdr_len) {
> +                error_report("virtio-net header incorrect");
> +                exit(1);
> +            }
> +            virtio_net_hdr_swap(vdev, (void *) out_sg[0].iov_base);

Where does this come from? If you're doing twap() wouldn't that have 
been broken before too?


Alex

  reply	other threads:[~2014-06-13 11:52 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13 11:18 [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target Greg Kurz
2014-06-13 11:18 ` [Qemu-devel] [PATCH v8 01/20] virtio-serial: don't migrate the config space Greg Kurz
2014-06-13 11:33   ` Alexander Graf
2014-06-19 10:40   ` Amit Shah
2014-06-19 11:17     ` Greg Kurz
2014-06-19 11:32   ` Michael S. Tsirkin
2014-06-13 11:19 ` [Qemu-devel] [PATCH v8 02/20] virtio: introduce device specific migration calls Greg Kurz
2014-06-13 11:19 ` [Qemu-devel] [PATCH v8 03/20] virtio-net: implement per-device " Greg Kurz
2014-06-13 11:19 ` [Qemu-devel] [PATCH v8 04/20] virtio-blk: " Greg Kurz
2014-06-13 11:20 ` [Qemu-devel] [PATCH v8 05/20] virtio-serial: " Greg Kurz
2014-06-13 11:20 ` [Qemu-devel] [PATCH v8 06/20] virtio-balloon: " Greg Kurz
2014-06-13 11:21 ` [Qemu-devel] [PATCH v8 07/20] virtio-rng: " Greg Kurz
2014-06-13 11:21 ` [Qemu-devel] [PATCH v8 08/20] virtio: add subsections to the migration stream Greg Kurz
2014-06-13 11:21 ` [Qemu-devel] [PATCH v8 09/20] exec: introduce target_words_bigendian() helper Greg Kurz
2014-06-13 11:41   ` Alexander Graf
2014-06-13 12:05     ` Greg Kurz
2014-06-13 11:22 ` [Qemu-devel] [PATCH v8 10/20] cpu: introduce CPUClass::virtio_is_big_endian() Greg Kurz
2014-06-13 11:42   ` Alexander Graf
2014-06-13 12:08     ` Greg Kurz
2014-06-13 11:23 ` [Qemu-devel] [PATCH v8 11/20] virtio: add endian-ambivalent support to VirtIODevice Greg Kurz
2014-06-13 11:46   ` Alexander Graf
2014-06-13 12:14     ` Greg Kurz
2014-06-13 12:41       ` Alexander Graf
2014-06-13 12:52         ` Greg Kurz
2014-06-13 11:23 ` [Qemu-devel] [PATCH v8 12/20] virtio: memory accessors for endian-ambivalent targets Greg Kurz
2014-06-13 11:24 ` [Qemu-devel] [PATCH v8 13/20] virtio: allow byte swapping for vring Greg Kurz
2014-06-13 11:24 ` [Qemu-devel] [PATCH v8 14/20] virtio-net: use virtio wrappers to access headers Greg Kurz
2014-06-13 11:52   ` Alexander Graf [this message]
2014-06-13 12:24     ` Cedric Le Goater
2014-06-13 12:40       ` Greg Kurz
2014-06-13 11:24 ` [Qemu-devel] [PATCH v8 15/20] virtio-balloon: use virtio wrappers to access page frame numbers Greg Kurz
2014-06-13 11:24 ` [Qemu-devel] [PATCH v8 16/20] virtio-blk: use virtio wrappers to access headers Greg Kurz
2014-06-13 11:24 ` [Qemu-devel] [PATCH v8 17/20] virtio-scsi: " Greg Kurz
2014-06-19 15:05   ` Greg Kurz
2014-06-20  8:24   ` Paolo Bonzini
2014-06-20  8:33     ` Greg Kurz
2014-06-13 11:25 ` [Qemu-devel] [PATCH v8 18/20] virtio-serial-bus: " Greg Kurz
2014-06-13 11:25 ` [Qemu-devel] [PATCH v8 19/20] virtio-9p: " Greg Kurz
2014-06-13 11:26 ` [Qemu-devel] [PATCH v8 20/20] target-ppc: enable virtio endian ambivalent support Greg Kurz
2014-06-13 11:56 ` [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target Alexander Graf
2014-06-16 15:07   ` Greg Kurz
2014-06-16 16:53     ` Amit Shah
2014-06-17  7:36 ` Stefan Hajnoczi
2014-06-17  7:40   ` Alexander Graf
2014-06-18 10:38     ` Stefan Hajnoczi
2014-06-18 12:35       ` Greg Kurz
2014-06-18 15:12         ` Michael S. Tsirkin
2014-06-18 15:14           ` Alexander Graf
2014-06-18 15:26             ` Michael S. Tsirkin
2014-06-19  9:51         ` Stefan Hajnoczi
2014-06-18 12:53       ` Peter Maydell
2014-06-18 13:42         ` Michael S. Tsirkin
2014-06-18 14:28           ` Greg Kurz
2014-06-18 15:05             ` Michael S. Tsirkin
2014-06-18 15:35             ` Peter Maydell
2014-06-18 15:37               ` Alexander Graf
2014-06-18 15:40                 ` Peter Maydell
2014-06-18 15:41                   ` Alexander Graf

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=539AE5E4.3060708@suse.de \
    --to=agraf@suse.de \
    --cc=afaerber@suse.de \
    --cc=aliguori@amazon.com \
    --cc=amit.shah@redhat.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=gkurz@linux.vnet.ibm.com \
    --cc=kwolf@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=stefanha@redhat.com \
    /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.