All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: linux-kernel@vger.kernel.org, David Miller <davem@davemloft.net>,
	cornelia.huck@de.ibm.com, rusty@au1.ibm.com, nab@linux-iscsi.org,
	pbonzini@redhat.com, thuth@linux.vnet.ibm.com,
	dahi@linux.vnet.ibm.com, Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>,
	Ben Hutchings <ben@decadent.org.uk>,
	Tom Herbert <therbert@google.com>,
	Masatake YAMATO <yamato@redhat.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	Xi Wang <xii@google.com>,
	netdev@vger.kernel.org
Subject: Re: [PATCH v6 40/46] tun: TUN_VNET_LE support, fix sparse warnings for virtio headers
Date: Fri, 28 Nov 2014 08:27:48 +0008	[thread overview]
Message-ID: <1417162788.5822.2@smtp.corp.redhat.com> (raw)
In-Reply-To: <1417118789-18231-41-git-send-email-mst@redhat.com>



On Fri, Nov 28, 2014 at 4:11 AM, Michael S. Tsirkin <mst@redhat.com> 
wrote:
> Pretty straight-forward: convert all fields to/from
> virtio endian-ness.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  drivers/net/tun.c | 48 
> +++++++++++++++++++++++++++++-------------------
>  1 file changed, 29 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/net/tun.c b/drivers/net/tun.c
> index 61c000c..f411ffd 100644
> --- a/drivers/net/tun.c
> +++ b/drivers/net/tun.c
> @@ -111,7 +111,7 @@ do {								\
>  #define TUN_FASYNC	IFF_ATTACH_QUEUE
>  
>  #define TUN_FEATURES (IFF_NO_PI | IFF_ONE_QUEUE | IFF_VNET_HDR | \
> -		      IFF_MULTI_QUEUE)
> +		      IFF_VNET_LE | IFF_MULTI_QUEUE)
>  #define GOODCOPY_LEN 128
>  
>  #define FLT_EXACT_COUNT 8
> @@ -205,6 +205,16 @@ struct tun_struct {
>  	u32 flow_count;
>  };
>  
> +static inline u16 tun16_to_cpu(struct tun_struct *tun, __virtio16 
> val)
> +{
> +	return __virtio16_to_cpu(tun->flags & IFF_VNET_LE, val);
> +}
> +
> +static inline __virtio16 cpu_to_tun16(struct tun_struct *tun, u16 
> val)
> +{
> +	return __cpu_to_virtio16(tun->flags & IFF_VNET_LE, val);
> +}
> +
>  static inline u32 tun_hashfn(u32 rxhash)
>  {
>  	return rxhash & 0x3ff;
> @@ -1053,10 +1063,10 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  			return -EFAULT;
>  
>  		if ((gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) &&
> -		    gso.csum_start + gso.csum_offset + 2 > gso.hdr_len)
> -			gso.hdr_len = gso.csum_start + gso.csum_offset + 2;
> +		    tun16_to_cpu(tun, gso.csum_start) + tun16_to_cpu(tun, 
> gso.csum_offset) + 2 > tun16_to_cpu(tun, gso.hdr_len))
> +			gso.hdr_len = cpu_to_tun16(tun, tun16_to_cpu(tun, gso.csum_start) 
> + tun16_to_cpu(tun, gso.csum_offset) + 2);
>  
> -		if (gso.hdr_len > len)
> +		if (tun16_to_cpu(tun, gso.hdr_len) > len)
>  			return -EINVAL;
>  		offset += tun->vnet_hdr_sz;
>  	}
> @@ -1064,7 +1074,7 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  	if ((tun->flags & TUN_TYPE_MASK) == IFF_TAP) {
>  		align += NET_IP_ALIGN;
>  		if (unlikely(len < ETH_HLEN ||
> -			     (gso.hdr_len && gso.hdr_len < ETH_HLEN)))
> +			     (gso.hdr_len && tun16_to_cpu(tun, gso.hdr_len) < ETH_HLEN)))
>  			return -EINVAL;
>  	}
>  
> @@ -1075,7 +1085,7 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  		 * enough room for skb expand head in case it is used.
>  		 * The rest of the buffer is mapped from userspace.
>  		 */
> -		copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN;
> +		copylen = gso.hdr_len ? tun16_to_cpu(tun, gso.hdr_len) : 
> GOODCOPY_LEN;
>  		if (copylen > good_linear)
>  			copylen = good_linear;
>  		linear = copylen;
> @@ -1085,10 +1095,10 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  
>  	if (!zerocopy) {
>  		copylen = len;
> -		if (gso.hdr_len > good_linear)
> +		if (tun16_to_cpu(tun, gso.hdr_len) > good_linear)
>  			linear = good_linear;
>  		else
> -			linear = gso.hdr_len;
> +			linear = tun16_to_cpu(tun, gso.hdr_len);
>  	}
>  
>  	skb = tun_alloc_skb(tfile, align, copylen, linear, noblock);
> @@ -1115,8 +1125,8 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  	}
>  
>  	if (gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
> -		if (!skb_partial_csum_set(skb, gso.csum_start,
> -					  gso.csum_offset)) {
> +		if (!skb_partial_csum_set(skb, tun16_to_cpu(tun, gso.csum_start),
> +					  tun16_to_cpu(tun, gso.csum_offset))) {
>  			tun->dev->stats.rx_frame_errors++;
>  			kfree_skb(skb);
>  			return -EINVAL;
> @@ -1184,7 +1194,7 @@ static ssize_t tun_get_user(struct tun_struct 
> *tun, struct tun_file *tfile,
>  		if (gso.gso_type & VIRTIO_NET_HDR_GSO_ECN)
>  			skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
>  
> -		skb_shinfo(skb)->gso_size = gso.gso_size;
> +		skb_shinfo(skb)->gso_size = tun16_to_cpu(tun, gso.gso_size);
>  		if (skb_shinfo(skb)->gso_size == 0) {
>  			tun->dev->stats.rx_frame_errors++;
>  			kfree_skb(skb);
> @@ -1276,8 +1286,8 @@ static ssize_t tun_put_user(struct tun_struct 
> *tun,
>  			struct skb_shared_info *sinfo = skb_shinfo(skb);
>  
>  			/* This is a hint as to how much should be linear. */
> -			gso.hdr_len = skb_headlen(skb);
> -			gso.gso_size = sinfo->gso_size;
> +			gso.hdr_len = cpu_to_tun16(tun, skb_headlen(skb));
> +			gso.gso_size = cpu_to_tun16(tun, sinfo->gso_size);
>  			if (sinfo->gso_type & SKB_GSO_TCPV4)
>  				gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
>  			else if (sinfo->gso_type & SKB_GSO_TCPV6)
> @@ -1285,12 +1295,12 @@ static ssize_t tun_put_user(struct tun_struct 
> *tun,
>  			else {
>  				pr_err("unexpected GSO type: "
>  				       "0x%x, gso_size %d, hdr_len %d\n",
> -				       sinfo->gso_type, gso.gso_size,
> -				       gso.hdr_len);
> +				       sinfo->gso_type, tun16_to_cpu(tun, gso.gso_size),
> +				       tun16_to_cpu(tun, gso.hdr_len));
>  				print_hex_dump(KERN_ERR, "tun: ",
>  					       DUMP_PREFIX_NONE,
>  					       16, 1, skb->head,
> -					       min((int)gso.hdr_len, 64), true);
> +					       min((int)tun16_to_cpu(tun, gso.hdr_len), 64), true);
>  				WARN_ON_ONCE(1);
>  				return -EINVAL;
>  			}
> @@ -1301,9 +1311,9 @@ static ssize_t tun_put_user(struct tun_struct 
> *tun,
>  
>  		if (skb->ip_summed == CHECKSUM_PARTIAL) {
>  			gso.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
> -			gso.csum_start = skb_checksum_start_offset(skb) +
> -					 vlan_hlen;
> -			gso.csum_offset = skb->csum_offset;
> +			gso.csum_start = cpu_to_tun16(tun, skb_checksum_start_offset(skb) 
> +
> +						      vlan_hlen);
> +			gso.csum_offset = cpu_to_tun16(tun, skb->csum_offset);
>  		} else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
>  			gso.flags = VIRTIO_NET_HDR_F_DATA_VALID;
>  		} /* else everything is zero */
> -- 
> MST

Reviewed-by: Jason Wang <jasowang@redhat.com>


  reply	other threads:[~2014-11-28  8:20 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-27 20:07 [PATCH v6 00/45] linux: towards virtio-1 guest support Michael S. Tsirkin
2014-11-27 20:07 ` [PATCH v6 01/46] virtio: add low-level APIs for feature bits Michael S. Tsirkin
2014-11-27 20:07   ` Michael S. Tsirkin
2014-11-28 10:02   ` Cornelia Huck
2014-11-28 10:02     ` Cornelia Huck
2014-11-29 17:30     ` Michael S. Tsirkin
2014-11-29 17:30       ` Michael S. Tsirkin
2014-11-28 12:10   ` David Hildenbrand
2014-11-28 12:10     ` David Hildenbrand
2014-11-29 17:32     ` Michael S. Tsirkin
2014-11-29 17:32       ` Michael S. Tsirkin
2014-11-27 20:07 ` [PATCH v6 02/46] virtio: use u32, not bitmap for features Michael S. Tsirkin
2014-11-27 20:07   ` Michael S. Tsirkin
2014-11-28 12:44   ` Cornelia Huck
2014-11-28 12:44     ` Cornelia Huck
2014-11-29 17:34     ` Michael S. Tsirkin
2014-11-29 17:34       ` Michael S. Tsirkin
2014-11-27 20:07 ` [PATCH v6 03/46] mic_virtio: robust feature array size calculation Michael S. Tsirkin
2014-11-27 20:07 ` [PATCH v6 04/46] virtio: add support for 64 bit features Michael S. Tsirkin
2014-11-27 20:07   ` Michael S. Tsirkin
2014-11-28  8:52   ` David Hildenbrand
2014-11-28  8:52     ` David Hildenbrand
2014-11-28 12:47   ` Cornelia Huck
2014-11-28 12:47     ` Cornelia Huck
2014-11-27 20:08 ` [PATCH v6 05/46] virtio: assert 32 bit features in transports Michael S. Tsirkin
2014-11-27 20:08   ` Michael S. Tsirkin
2014-11-28  8:54   ` David Hildenbrand
2014-11-28  8:54     ` David Hildenbrand
2014-11-28 12:50   ` Cornelia Huck
2014-11-28 12:50     ` Cornelia Huck
2014-11-27 20:08 ` [PATCH v6 06/46] virtio_ccw: add support for 64 bit features Michael S. Tsirkin
2014-11-28 12:56   ` Cornelia Huck
2014-11-27 20:08 ` [PATCH v6 07/46] virtio: add virtio 1.0 feature bit Michael S. Tsirkin
2014-11-27 20:08   ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 08/46] virtio: memory access APIs Michael S. Tsirkin
2014-11-27 20:08   ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 09/46] virtio_ring: switch to new " Michael S. Tsirkin
2014-11-27 20:08   ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 10/46] virtio_config: endian conversion for v1.0 Michael S. Tsirkin
2014-11-27 20:08   ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 11/46] virtio: allow transports to get avail/used addresses Michael S. Tsirkin
2014-11-27 20:08 ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 12/46] virtio: set FEATURES_OK Michael S. Tsirkin
2014-11-27 20:08 ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 13/46] virtio: simplify feature bit handling Michael S. Tsirkin
2014-11-27 20:08 ` Michael S. Tsirkin
2014-11-27 20:08 ` [PATCH v6 14/46] virtio: add legacy feature table support Michael S. Tsirkin
2014-11-27 20:08 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 15/46] virtio_net: v1.0 endianness Michael S. Tsirkin
2014-11-27 20:09 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 16/46] virtio_blk: v1.0 support Michael S. Tsirkin
2014-11-27 20:09 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 17/46] KVM: s390: Set virtio-ccw transport revision Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 18/46] KVM: s390: virtio-ccw revision 1 SET_VQ Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 19/46] KVM: s390 allow virtio_ccw status writes to fail Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 20/46] KVM: s390: enable virtio-ccw revision 1 Michael S. Tsirkin
2014-11-28 10:09   ` Cornelia Huck
2014-11-29 17:31     ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 21/46] virtio_blk: make serial attribute static Michael S. Tsirkin
2014-11-27 20:09   ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 22/46] virtio_blk: fix race at module removal Michael S. Tsirkin
2014-11-27 20:09 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 23/46] virtio_net: pass vi around Michael S. Tsirkin
2014-11-27 20:09 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 24/46] virtio_net: get rid of virtio_net_hdr/skb_vnet_hdr Michael S. Tsirkin
2014-11-28  8:30   ` Jason Wang
2014-11-28  8:30     ` Jason Wang
2014-11-27 20:09 ` Michael S. Tsirkin
2014-11-27 20:09 ` [PATCH v6 25/46] virtio_net: stricter short buffer length checks Michael S. Tsirkin
2014-11-27 20:09   ` Michael S. Tsirkin
2014-11-28  8:31   ` Jason Wang
2014-11-28  8:31     ` Jason Wang
2014-11-27 20:10 ` [PATCH v6 26/46] virtio_net: bigger header when VERSION_1 is set Michael S. Tsirkin
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-28  8:31   ` Jason Wang
2014-11-28  8:31     ` Jason Wang
2014-11-27 20:10 ` [PATCH v6 27/46] virtio_net: enable v1.0 support Michael S. Tsirkin
2014-11-27 20:10   ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 28/46] vhost: make features 64 bit Michael S. Tsirkin
2014-11-27 20:10   ` Michael S. Tsirkin
2014-11-28  8:32   ` Jason Wang
2014-11-28  8:32     ` Jason Wang
2014-11-27 20:10 ` [PATCH v6 29/46] vhost: add memory access wrappers Michael S. Tsirkin
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-28  8:35   ` Jason Wang
2014-11-28  8:35     ` Jason Wang
2014-11-27 20:10 ` [PATCH v6 30/46] vhost/net: force len for TX to host endian Michael S. Tsirkin
2014-11-28  8:36   ` Jason Wang
2014-11-28  8:36     ` Jason Wang
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 31/46] vhost: virtio 1.0 endian-ness support Michael S. Tsirkin
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 32/46] vhost/net: virtio 1.0 byte swap Michael S. Tsirkin
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 33/46] vhost/net: larger header for virtio 1.0 Michael S. Tsirkin
2014-11-28  8:38   ` Jason Wang
2014-11-28  8:38     ` Jason Wang
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 34/46] virtio_net: disable mac write " Michael S. Tsirkin
2014-11-27 20:10 ` Michael S. Tsirkin
2014-11-28  8:40   ` Jason Wang
2014-11-28  8:40     ` Jason Wang
2014-11-29 17:28     ` Michael S. Tsirkin
2014-11-29 17:28       ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 35/46] vhost/net: enable " Michael S. Tsirkin
2014-11-27 20:10   ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 36/46] vhost/net: suppress compiler warning Michael S. Tsirkin
2014-11-27 20:10   ` Michael S. Tsirkin
2014-11-27 20:10 ` [PATCH v6 37/46] tun: move internal flag defines out of uapi Michael S. Tsirkin
     [not found]   ` <1417118789-18231-38-git-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-11-28  8:07     ` Jason Wang
2014-11-28  8:07       ` Jason Wang
     [not found]       ` <1417162052.5822.0-LLcwxoN42L4NLKR9yMNcA1aTQe2KTcn/@public.gmane.org>
2014-11-29 17:17         ` Michael S. Tsirkin
2014-11-29 17:17           ` Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 38/46] tun: drop most type defines Michael S. Tsirkin
2014-11-28  8:09   ` Jason Wang
2014-11-29 17:23     ` Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 39/46] tun: add VNET_LE flag Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 40/46] tun: TUN_VNET_LE support, fix sparse warnings for virtio headers Michael S. Tsirkin
2014-11-28  8:19   ` Jason Wang [this message]
2014-11-27 20:11 ` [PATCH v6 41/46] macvtap: TUN_VNET_HDR support Michael S. Tsirkin
2014-11-28  8:24   ` Jason Wang
2014-11-27 20:11 ` [PATCH v6 42/46] virtio_scsi: v1.0 support Michael S. Tsirkin
2014-11-27 20:11 ` Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 43/46] virtio_scsi: move to uapi Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 44/46] virtio_scsi: export to userspace Michael S. Tsirkin
2014-11-27 20:11 ` Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 45/46] vhost/scsi: partial virtio 1.0 support Michael S. Tsirkin
2014-11-27 20:11 ` Michael S. Tsirkin
2014-11-27 20:11 ` [PATCH v6 46/46] af_packet: virtio 1.0 stubs 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=1417162788.5822.2@smtp.corp.redhat.com \
    --to=jasowang@redhat.com \
    --cc=ben@decadent.org.uk \
    --cc=cornelia.huck@de.ibm.com \
    --cc=dahi@linux.vnet.ibm.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=nab@linux-iscsi.org \
    --cc=netdev@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rusty@au1.ibm.com \
    --cc=therbert@google.com \
    --cc=thuth@linux.vnet.ibm.com \
    --cc=wuzhy@linux.vnet.ibm.com \
    --cc=xii@google.com \
    --cc=yamato@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.