Re: [PATCH] virtio_net: fix PAGE_SIZE > 64k

From: kbuild test robot
Date: Mon Jan 23 2017 - 15:46:53 EST


Hi Michael,

[auto build test WARNING on net-next/master]
[also build test WARNING on v4.10-rc5 next-20170123]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Michael-S-Tsirkin/virtio_net-fix-PAGE_SIZE-64k/20170124-023805
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

include/linux/compiler.h:253:8: sparse: attribute 'no_sanitize_address': unknown attribute
>> drivers/net/virtio_net.c:250:44: sparse: incompatible types in comparison expression (different signedness)
drivers/net/virtio_net.c:251:33: sparse: incompatible types in comparison expression (different signedness)
drivers/net/virtio_net.c:256:36: sparse: incompatible types in comparison expression (different signedness)
drivers/net/virtio_net.c:262:40: sparse: incompatible types in comparison expression (different signedness)
drivers/net/virtio_net.c:861:16: sparse: incompatible types in comparison expression (different signedness)
drivers/net/virtio_net.c:861:16: sparse: incompatible types in comparison expression (different signedness)
In file included from include/linux/list.h:8:0,
from include/linux/timer.h:4,
from include/linux/netdevice.h:28,
from drivers/net/virtio_net.c:19:
drivers/net/virtio_net.c: In function 'mergeable_ctx_to_buf_truesize':
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/linux/kernel.h:766:2: note: in expansion of macro '__max'
__max(typeof(x), typeof(y), \
^~~~~
drivers/net/virtio_net.c:59:32: note: in expansion of macro 'max'
#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
^~~
drivers/net/virtio_net.c:250:37: note: in expansion of macro 'MERGEABLE_BUFFER_ALIGN'
unsigned int truesize = mrg_ctx & (MERGEABLE_BUFFER_ALIGN - 1);
^~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/linux/kernel.h:766:2: note: in expansion of macro '__max'
__max(typeof(x), typeof(y), \
^~~~~
drivers/net/virtio_net.c:59:32: note: in expansion of macro 'max'
#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
^~~
drivers/net/virtio_net.c:251:26: note: in expansion of macro 'MERGEABLE_BUFFER_ALIGN'
return (truesize + 1) * MERGEABLE_BUFFER_ALIGN;
^~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c: In function 'mergeable_ctx_to_buf_address':
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/linux/kernel.h:766:2: note: in expansion of macro '__max'
__max(typeof(x), typeof(y), \
^~~~~
drivers/net/virtio_net.c:59:32: note: in expansion of macro 'max'
#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
^~~
drivers/net/virtio_net.c:256:29: note: in expansion of macro 'MERGEABLE_BUFFER_ALIGN'
return (void *)(mrg_ctx & -MERGEABLE_BUFFER_ALIGN);
^~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c: In function 'mergeable_buf_to_ctx':
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/linux/kernel.h:766:2: note: in expansion of macro '__max'
__max(typeof(x), typeof(y), \
^~~~~
drivers/net/virtio_net.c:59:32: note: in expansion of macro 'max'
#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
^~~
drivers/net/virtio_net.c:262:33: note: in expansion of macro 'MERGEABLE_BUFFER_ALIGN'
unsigned int size = truesize / MERGEABLE_BUFFER_ALIGN;
^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/cache.h:4:0,
from include/linux/printk.h:8,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/timer.h:4,
from include/linux/netdevice.h:28,
from drivers/net/virtio_net.c:19:
drivers/net/virtio_net.c: In function 'get_mergeable_buf_len':
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/uapi/linux/kernel.h:10:47: note: in definition of macro '__ALIGN_KERNEL_MASK'
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
^~~~
include/linux/kernel.h:49:22: note: in expansion of macro '__ALIGN_KERNEL'
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
^~~~~~~~~~~~~~
drivers/net/virtio_net.c:861:9: note: in expansion of macro 'ALIGN'
return ALIGN(len, MERGEABLE_BUFFER_ALIGN);
^~~~~
include/linux/kernel.h:766:2: note: in expansion of macro '__max'
__max(typeof(x), typeof(y), \
^~~~~
drivers/net/virtio_net.c:59:32: note: in expansion of macro 'max'
#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
^~~
drivers/net/virtio_net.c:861:20: note: in expansion of macro 'MERGEABLE_BUFFER_ALIGN'
return ALIGN(len, MERGEABLE_BUFFER_ALIGN);
^~~~~~~~~~~~~~~~~~~~~~
include/linux/kernel.h:763:16: warning: comparison of distinct pointer types lacks a cast
(void) (&max1 == &max2); \
^
include/uapi/linux/kernel.h:10:58: note: in definition of macro '__ALIGN_KERNEL_MASK'
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
^~~~
include/linux/kernel.h:49:22: note: in expansion of macro '__ALIGN_KERNEL'
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
^~~~~~~~~~~~~~
drivers/net/virtio_net.c:861:9: note: in expansion of macro 'ALIGN'
return ALIGN(len, MERGEABLE_BUFFER_ALIGN);

vim +250 drivers/net/virtio_net.c

fb6813f4 Rusty Russell 2008-07-25 234 return p;
fb6813f4 Rusty Russell 2008-07-25 235 }
fb6813f4 Rusty Russell 2008-07-25 236
e9d7417b Jason Wang 2012-12-07 237 static void skb_xmit_done(struct virtqueue *vq)
296f96fc Rusty Russell 2007-10-22 238 {
e9d7417b Jason Wang 2012-12-07 239 struct virtnet_info *vi = vq->vdev->priv;
296f96fc Rusty Russell 2007-10-22 240
2cb9c6ba Rusty Russell 2008-02-04 241 /* Suppress further interrupts. */
e9d7417b Jason Wang 2012-12-07 242 virtqueue_disable_cb(vq);
11a3a154 Rusty Russell 2008-05-26 243
363f1514 Rusty Russell 2008-06-08 244 /* We were probably waiting for more output buffers. */
986a4f4d Jason Wang 2012-12-07 245 netif_wake_subqueue(vi->dev, vq2txq(vq));
296f96fc Rusty Russell 2007-10-22 246 }
296f96fc Rusty Russell 2007-10-22 247
ab7db917 Michael Dalton 2014-01-16 248 static unsigned int mergeable_ctx_to_buf_truesize(unsigned long mrg_ctx)
ab7db917 Michael Dalton 2014-01-16 249 {
ab7db917 Michael Dalton 2014-01-16 @250 unsigned int truesize = mrg_ctx & (MERGEABLE_BUFFER_ALIGN - 1);
ab7db917 Michael Dalton 2014-01-16 251 return (truesize + 1) * MERGEABLE_BUFFER_ALIGN;
ab7db917 Michael Dalton 2014-01-16 252 }
ab7db917 Michael Dalton 2014-01-16 253
ab7db917 Michael Dalton 2014-01-16 254 static void *mergeable_ctx_to_buf_address(unsigned long mrg_ctx)
ab7db917 Michael Dalton 2014-01-16 255 {
ab7db917 Michael Dalton 2014-01-16 256 return (void *)(mrg_ctx & -MERGEABLE_BUFFER_ALIGN);
ab7db917 Michael Dalton 2014-01-16 257
ab7db917 Michael Dalton 2014-01-16 258 }

:::::: The code at line 250 was first introduced by commit
:::::: ab7db91705e95ed1bba1304388936fccfa58c992 virtio-net: auto-tune mergeable rx buffer size for improved performance

:::::: TO: Michael Dalton <mwdalton@xxxxxxxxxx>
:::::: CC: David S. Miller <davem@xxxxxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation