Re: [PATCH v7 30/46] vhost/net: force len for TX to host endian

2014-12-01 Thread Cornelia Huck
On Sun, 30 Nov 2014 17:11:44 +0200
Michael S. Tsirkin m...@redhat.com wrote:

 vhost/net keeps a copy of some used ring but (ab)uses length
 field for internal house-keeping. This works because
 for tx used length is always 0.
 Suppress sparse errors: we use native endian-ness internally but never
 expose it to guest.

I admit that I find this patch description hard to read :)


vhost/net keeps a copy of the used ring in host memory but (ab)uses
the length field for internal house-keeping. This works because the
length in the used ring for tx is always 0. In order to suppress sparse
errors, we need to force native endianness.

?

 
 Signed-off-by: Michael S. Tsirkin m...@redhat.com
 Reviewed-by: Jason Wang jasow...@redhat.com
 ---
  drivers/vhost/net.c | 10 +-
  1 file changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
 index 8dae2f7..dce5c58 100644
 --- a/drivers/vhost/net.c
 +++ b/drivers/vhost/net.c
 @@ -48,15 +48,15 @@ MODULE_PARM_DESC(experimental_zcopytx, Enable Zero Copy 
 TX;
   * status internally; used for zerocopy tx only.
   */
  /* Lower device DMA failed */
 -#define VHOST_DMA_FAILED_LEN 3
 +#define VHOST_DMA_FAILED_LEN ((__force __virtio32)3)
  /* Lower device DMA done */
 -#define VHOST_DMA_DONE_LEN   2
 +#define VHOST_DMA_DONE_LEN   ((__force __virtio32)2)
  /* Lower device DMA in progress */
 -#define VHOST_DMA_IN_PROGRESS1
 +#define VHOST_DMA_IN_PROGRESS((__force __virtio32)1)
  /* Buffer unused */
 -#define VHOST_DMA_CLEAR_LEN  0
 +#define VHOST_DMA_CLEAR_LEN  ((__force __virtio32)0)
 
 -#define VHOST_DMA_IS_DONE(len) ((len) = VHOST_DMA_DONE_LEN)
 +#define VHOST_DMA_IS_DONE(len) ((__force u32)(len) = (__force 
 u32)VHOST_DMA_DONE_LEN)
 
  enum {
   VHOST_NET_FEATURES = VHOST_FEATURES |

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


Re: [PATCH v7 30/46] vhost/net: force len for TX to host endian

2014-12-01 Thread Michael S. Tsirkin
On Mon, Dec 01, 2014 at 01:20:51PM +0100, Cornelia Huck wrote:
 On Sun, 30 Nov 2014 17:11:44 +0200
 Michael S. Tsirkin m...@redhat.com wrote:
 
  vhost/net keeps a copy of some used ring but (ab)uses length
  field for internal house-keeping. This works because
  for tx used length is always 0.
  Suppress sparse errors: we use native endian-ness internally but never
  expose it to guest.
 
 I admit that I find this patch description hard to read :)
 
 
 vhost/net keeps a copy of the used ring in host memory but (ab)uses
 the length field for internal house-keeping. This works because the
 length in the used ring for tx is always 0. In order to suppress sparse
 errors, we need to force native endianness.
 
 ?

Yes. Add to this These values are never exposed to guest.

  
  Signed-off-by: Michael S. Tsirkin m...@redhat.com
  Reviewed-by: Jason Wang jasow...@redhat.com
  ---
   drivers/vhost/net.c | 10 +-
   1 file changed, 5 insertions(+), 5 deletions(-)
  
  diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
  index 8dae2f7..dce5c58 100644
  --- a/drivers/vhost/net.c
  +++ b/drivers/vhost/net.c
  @@ -48,15 +48,15 @@ MODULE_PARM_DESC(experimental_zcopytx, Enable Zero 
  Copy TX;
* status internally; used for zerocopy tx only.
*/
   /* Lower device DMA failed */
  -#define VHOST_DMA_FAILED_LEN   3
  +#define VHOST_DMA_FAILED_LEN   ((__force __virtio32)3)
   /* Lower device DMA done */
  -#define VHOST_DMA_DONE_LEN 2
  +#define VHOST_DMA_DONE_LEN ((__force __virtio32)2)
   /* Lower device DMA in progress */
  -#define VHOST_DMA_IN_PROGRESS  1
  +#define VHOST_DMA_IN_PROGRESS  ((__force __virtio32)1)
   /* Buffer unused */
  -#define VHOST_DMA_CLEAR_LEN0
  +#define VHOST_DMA_CLEAR_LEN((__force __virtio32)0)
  
  -#define VHOST_DMA_IS_DONE(len) ((len) = VHOST_DMA_DONE_LEN)
  +#define VHOST_DMA_IS_DONE(len) ((__force u32)(len) = (__force 
  u32)VHOST_DMA_DONE_LEN)
  
   enum {
  VHOST_NET_FEATURES = VHOST_FEATURES |
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization