All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] virtio_net: fix PAGE_SIZE > 64k
@ 2017-01-23 17:06 Michael S. Tsirkin
  0 siblings, 0 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2017-01-23 17:06 UTC (permalink / raw)
  To: linux-kernel; +Cc: netdev, virtualization

I don't have any guests with PAGE_SIZE > 64k but the
code seems to be clearly broken in that case
as PAGE_SIZE / MERGEABLE_BUFFER_ALIGN will need
more than 8 bit and so the code in mergeable_ctx_to_buf_address
does not give us the actual true size.

Cc: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---

Lightly tested on x86 only.

 drivers/net/virtio_net.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 4a10500..5e3b07e 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -48,8 +48,16 @@ module_param(gso, bool, 0444);
  */
 DECLARE_EWMA(pkt_len, 1, 64)
 
+/* With mergeable buffers we align buffer address and use the low bits to
+ * encode its true size. Buffer size is up to 1 page so we need to align to
+ * square root of page size to ensure we reserve enough bits to encode the true
+ * size.
+ */
+#define MERGEABLE_BUFFER_MIN_ALIGN_SHIFT ((PAGE_SHIFT + 1) / 2)
+
 /* Minimum alignment for mergeable packet buffers. */
-#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, 256)
+#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
+				   1U << MERGEABLE_BUFFER_MIN_ALIGN_SHIFT)
 
 #define VIRTNET_DRIVER_VERSION "1.0.0"
 
-- 
MST

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] virtio_net: fix PAGE_SIZE > 64k
  2017-01-23 17:06 Michael S. Tsirkin
@ 2017-01-23 20:46 ` kbuild test robot
  2017-01-23 20:46 ` kbuild test robot
  1 sibling, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2017-01-23 20:46 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: kbuild-all, linux-kernel, Jason Wang, virtualization, netdev

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@google.com>
:::::: CC: David S. Miller <davem@davemloft.net>

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] virtio_net: fix PAGE_SIZE > 64k
  2017-01-23 17:06 Michael S. Tsirkin
  2017-01-23 20:46 ` kbuild test robot
@ 2017-01-23 20:46 ` kbuild test robot
  1 sibling, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2017-01-23 20:46 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: netdev, virtualization, kbuild-all, linux-kernel

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@google.com>
:::::: CC: David S. Miller <davem@davemloft.net>

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] virtio_net: fix PAGE_SIZE > 64k
@ 2017-01-23 17:06 Michael S. Tsirkin
  2017-01-23 20:46 ` kbuild test robot
  2017-01-23 20:46 ` kbuild test robot
  0 siblings, 2 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2017-01-23 17:06 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jason Wang, virtualization, netdev

I don't have any guests with PAGE_SIZE > 64k but the
code seems to be clearly broken in that case
as PAGE_SIZE / MERGEABLE_BUFFER_ALIGN will need
more than 8 bit and so the code in mergeable_ctx_to_buf_address
does not give us the actual true size.

Cc: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---

Lightly tested on x86 only.

 drivers/net/virtio_net.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 4a10500..5e3b07e 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -48,8 +48,16 @@ module_param(gso, bool, 0444);
  */
 DECLARE_EWMA(pkt_len, 1, 64)
 
+/* With mergeable buffers we align buffer address and use the low bits to
+ * encode its true size. Buffer size is up to 1 page so we need to align to
+ * square root of page size to ensure we reserve enough bits to encode the true
+ * size.
+ */
+#define MERGEABLE_BUFFER_MIN_ALIGN_SHIFT ((PAGE_SHIFT + 1) / 2)
+
 /* Minimum alignment for mergeable packet buffers. */
-#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, 256)
+#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \
+				   1U << MERGEABLE_BUFFER_MIN_ALIGN_SHIFT)
 
 #define VIRTNET_DRIVER_VERSION "1.0.0"
 
-- 
MST

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-01-23 20:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-23 17:06 [PATCH] virtio_net: fix PAGE_SIZE > 64k Michael S. Tsirkin
  -- strict thread matches above, loose matches on Subject: below --
2017-01-23 17:06 Michael S. Tsirkin
2017-01-23 20:46 ` kbuild test robot
2017-01-23 20:46 ` kbuild test robot

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.