linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -next 0/2] virtio-net: Advised MTU feature
@ 2016-06-02 15:43 Aaron Conole
  2016-06-02 15:43 ` [PATCH -next 1/2] virtio: Start feature MTU support Aaron Conole
  2016-06-02 15:43 ` [PATCH -next 2/2] virtio_net: Read the advised MTU Aaron Conole
  0 siblings, 2 replies; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 15:43 UTC (permalink / raw)
  To: virtualization, netdev, linux-kernel, Michael S. Tsirkin

The following series adds the ability for a hypervisor to set an MTU on the
guest during feature negotiation phase. This is useful for VM orchestration
when, for instance, tunneling is involved and the MTU of the various systems
should be homogenous.

The first patch adds the feature bit as described in the proposed VFIO spec
addition found at
https://lists.oasis-open.org/archives/virtio-dev/201603/msg00001.html

The second patch adds a user of the bit, and a warning when the guest changes
the MTU from the hypervisor advised MTU. Future patches may add more thorough
error handling.

Aaron Conole (2):
  virtio: Start feature MTU support
  virtio_net: Read the advised MTU

 drivers/net/virtio_net.c        | 7 +++++++
 include/uapi/linux/virtio_net.h | 2 ++
 2 files changed, 9 insertions(+)

-- 
2.5.5

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

* [PATCH -next 1/2] virtio: Start feature MTU support
  2016-06-02 15:43 [PATCH -next 0/2] virtio-net: Advised MTU feature Aaron Conole
@ 2016-06-02 15:43 ` Aaron Conole
  2016-06-02 16:17   ` Michael S. Tsirkin
  2016-06-02 15:43 ` [PATCH -next 2/2] virtio_net: Read the advised MTU Aaron Conole
  1 sibling, 1 reply; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 15:43 UTC (permalink / raw)
  To: virtualization, netdev, linux-kernel, Michael S. Tsirkin

This commit adds the feature bit and associated mtu device entry for the
virtio network device. Future commits will make use of these bits to
support negotiated MTU.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 include/uapi/linux/virtio_net.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h
index ec32293..751ff59 100644
--- a/include/uapi/linux/virtio_net.h
+++ b/include/uapi/linux/virtio_net.h
@@ -73,6 +73,8 @@ struct virtio_net_config {
 	 * Legal values are between 1 and 0x8000
 	 */
 	__u16 max_virtqueue_pairs;
+	/* Default maximum transmit unit advice */
+	__u16 mtu;
 } __attribute__((packed));
 
 /*
-- 
2.5.5

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

* [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 15:43 [PATCH -next 0/2] virtio-net: Advised MTU feature Aaron Conole
  2016-06-02 15:43 ` [PATCH -next 1/2] virtio: Start feature MTU support Aaron Conole
@ 2016-06-02 15:43 ` Aaron Conole
  2016-06-02 16:16   ` Michael S. Tsirkin
                     ` (2 more replies)
  1 sibling, 3 replies; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 15:43 UTC (permalink / raw)
  To: virtualization, netdev, linux-kernel, Michael S. Tsirkin

This patch checks the feature bit for the VIRTIO_NET_F_MTU feature. If it
exists, read the advised MTU and use it.

No proper error handling is provided for the case where a user changes the
negotiated MTU. A future commit will add proper error handling. Instead, a
warning is emitted if the guest changes the device MTU after previously
being given advice.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 drivers/net/virtio_net.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index e0638e5..ef5ee01 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1896,6 +1896,12 @@ static int virtnet_probe(struct virtio_device *vdev)
 	if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
 		vi->has_cvq = true;
 
+	if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
+		dev->mtu = virtio_cread16(vdev,
+					  offsetof(struct virtio_net_config,
+						   mtu));
+	}
+
 	if (vi->any_header_sg)
 		dev->needed_headroom = vi->hdr_len;
 
@@ -2067,6 +2073,7 @@ static unsigned int features[] = {
 	VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
 	VIRTIO_NET_F_CTRL_MAC_ADDR,
 	VIRTIO_F_ANY_LAYOUT,
+	VIRTIO_NET_F_MTU,
 };
 
 static struct virtio_driver virtio_net_driver = {
-- 
2.5.5

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 15:43 ` [PATCH -next 2/2] virtio_net: Read the advised MTU Aaron Conole
@ 2016-06-02 16:16   ` Michael S. Tsirkin
  2016-06-02 17:10     ` Aaron Conole
       [not found]   ` <5750578E.4040406@hpe.com>
  2016-06-02 17:25   ` kbuild test robot
  2 siblings, 1 reply; 11+ messages in thread
From: Michael S. Tsirkin @ 2016-06-02 16:16 UTC (permalink / raw)
  To: Aaron Conole; +Cc: virtualization, netdev, linux-kernel

On Thu, Jun 02, 2016 at 11:43:31AM -0400, Aaron Conole wrote:
> This patch checks the feature bit for the VIRTIO_NET_F_MTU feature. If it
> exists, read the advised MTU and use it.
> 
> No proper error handling is provided for the case where a user changes the
> negotiated MTU. A future commit will add proper error handling. Instead, a
> warning is emitted if the guest changes the device MTU after previously
> being given advice.

I don't see a warning and I don't think it's needed.
Patch is ok commit log isn't.

> Signed-off-by: Aaron Conole <aconole@redhat.com>
> ---
>  drivers/net/virtio_net.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index e0638e5..ef5ee01 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -1896,6 +1896,12 @@ static int virtnet_probe(struct virtio_device *vdev)
>  	if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
>  		vi->has_cvq = true;
>  
> +	if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
> +		dev->mtu = virtio_cread16(vdev,
> +					  offsetof(struct virtio_net_config,
> +						   mtu));
> +	}
> +
>  	if (vi->any_header_sg)
>  		dev->needed_headroom = vi->hdr_len;
>  
> @@ -2067,6 +2073,7 @@ static unsigned int features[] = {
>  	VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
>  	VIRTIO_NET_F_CTRL_MAC_ADDR,
>  	VIRTIO_F_ANY_LAYOUT,
> +	VIRTIO_NET_F_MTU,
>  };
>  
>  static struct virtio_driver virtio_net_driver = {
> -- 
> 2.5.5

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

* Re: [PATCH -next 1/2] virtio: Start feature MTU support
  2016-06-02 15:43 ` [PATCH -next 1/2] virtio: Start feature MTU support Aaron Conole
@ 2016-06-02 16:17   ` Michael S. Tsirkin
  2016-06-02 17:10     ` Aaron Conole
  0 siblings, 1 reply; 11+ messages in thread
From: Michael S. Tsirkin @ 2016-06-02 16:17 UTC (permalink / raw)
  To: Aaron Conole; +Cc: virtualization, netdev, linux-kernel

On Thu, Jun 02, 2016 at 11:43:30AM -0400, Aaron Conole wrote:
> This commit adds the feature bit and associated mtu device entry for the
> virtio network device. Future commits will make use of these bits to
> support negotiated MTU.

why split it out? Pls squash with the next patch.

> Signed-off-by: Aaron Conole <aconole@redhat.com>
> ---
>  include/uapi/linux/virtio_net.h | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h
> index ec32293..751ff59 100644
> --- a/include/uapi/linux/virtio_net.h
> +++ b/include/uapi/linux/virtio_net.h
> @@ -73,6 +73,8 @@ struct virtio_net_config {
>  	 * Legal values are between 1 and 0x8000
>  	 */
>  	__u16 max_virtqueue_pairs;
> +	/* Default maximum transmit unit advice */
> +	__u16 mtu;
>  } __attribute__((packed));
>  
>  /*
> -- 
> 2.5.5

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
       [not found]   ` <5750578E.4040406@hpe.com>
@ 2016-06-02 17:06     ` Aaron Conole
  2016-06-02 18:02       ` Rick Jones
  0 siblings, 1 reply; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 17:06 UTC (permalink / raw)
  To: Rick Jones; +Cc: Michael S. Tsirkin, virtualization, netdev, linux-kernel


Hi Rick,

In the future, please don't cut the list.

Rick Jones <rick.jones2@hpe.com> writes:

> On 06/02/2016 08:43 AM, Aaron Conole wrote:
>> This patch checks the feature bit for the VIRTIO_NET_F_MTU feature. If it
>> exists, read the advised MTU and use it.
>>
>> No proper error handling is provided for the case where a user changes the
>> negotiated MTU. A future commit will add proper error handling. Instead, a
>> warning is emitted if the guest changes the device MTU after previously
>> being given advice.
>
> One of the things I've been doing has been setting-up a cluster
> (OpenStack) with JumboFrames, and then setting MTUs on instance vNICs
> by hand to measure different MTU sizes.  It would be a shame if such a
> thing were not possible in the future.  Keeping a warning if shrinking
> the MTU would be good, leave the error (perhaps) to if an attempt is
> made to go beyond the advised value.

This was cut because it didn't make sense for such a warning to
be issued, but it seems like perhaps you may want such a feature?  I
agree with Michael, after thinking about it, that I don't know what sort
of use the warning would serve.  After all, if you're changing the MTU,
you must have wanted such a change to occur?

-Aaron

> happy benchmarking,
>
> rick jones

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

* Re: [PATCH -next 1/2] virtio: Start feature MTU support
  2016-06-02 16:17   ` Michael S. Tsirkin
@ 2016-06-02 17:10     ` Aaron Conole
  0 siblings, 0 replies; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 17:10 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: virtualization, netdev, linux-kernel

"Michael S. Tsirkin" <mst@redhat.com> writes:

> On Thu, Jun 02, 2016 at 11:43:30AM -0400, Aaron Conole wrote:
>> This commit adds the feature bit and associated mtu device entry for the
>> virtio network device. Future commits will make use of these bits to
>> support negotiated MTU.
>
> why split it out? Pls squash with the next patch.

Okay.  I thought the usual method was make a commit which introduces the
data structure changes, and then make a commit which hooks it up.  I'll
squash this in the future.

>> Signed-off-by: Aaron Conole <aconole@redhat.com>
>> ---
>>  include/uapi/linux/virtio_net.h | 2 ++
>>  1 file changed, 2 insertions(+)
>> 
>> diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h
>> index ec32293..751ff59 100644
>> --- a/include/uapi/linux/virtio_net.h
>> +++ b/include/uapi/linux/virtio_net.h
>> @@ -73,6 +73,8 @@ struct virtio_net_config {
>>  	 * Legal values are between 1 and 0x8000
>>  	 */
>>  	__u16 max_virtqueue_pairs;
>> +	/* Default maximum transmit unit advice */
>> +	__u16 mtu;
>>  } __attribute__((packed));
>>  
>>  /*
>> -- 
>> 2.5.5

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 16:16   ` Michael S. Tsirkin
@ 2016-06-02 17:10     ` Aaron Conole
  0 siblings, 0 replies; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 17:10 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: virtualization, netdev, linux-kernel

"Michael S. Tsirkin" <mst@redhat.com> writes:

> On Thu, Jun 02, 2016 at 11:43:31AM -0400, Aaron Conole wrote:
>> This patch checks the feature bit for the VIRTIO_NET_F_MTU feature. If it
>> exists, read the advised MTU and use it.
>> 
>> No proper error handling is provided for the case where a user changes the
>> negotiated MTU. A future commit will add proper error handling. Instead, a
>> warning is emitted if the guest changes the device MTU after previously
>> being given advice.
>
> I don't see a warning and I don't think it's needed.
> Patch is ok commit log isn't.

Okay, I'll fix it when I submit v2.

>> Signed-off-by: Aaron Conole <aconole@redhat.com>
>> ---
>>  drivers/net/virtio_net.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>> 
>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
>> index e0638e5..ef5ee01 100644
>> --- a/drivers/net/virtio_net.c
>> +++ b/drivers/net/virtio_net.c
>> @@ -1896,6 +1896,12 @@ static int virtnet_probe(struct virtio_device *vdev)
>>  	if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
>>  		vi->has_cvq = true;
>>  
>> +	if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
>> +		dev->mtu = virtio_cread16(vdev,
>> +					  offsetof(struct virtio_net_config,
>> +						   mtu));
>> +	}
>> +
>>  	if (vi->any_header_sg)
>>  		dev->needed_headroom = vi->hdr_len;
>>  
>> @@ -2067,6 +2073,7 @@ static unsigned int features[] = {
>>  	VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
>>  	VIRTIO_NET_F_CTRL_MAC_ADDR,
>>  	VIRTIO_F_ANY_LAYOUT,
>> +	VIRTIO_NET_F_MTU,
>>  };
>>  
>>  static struct virtio_driver virtio_net_driver = {
>> -- 
>> 2.5.5

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 15:43 ` [PATCH -next 2/2] virtio_net: Read the advised MTU Aaron Conole
  2016-06-02 16:16   ` Michael S. Tsirkin
       [not found]   ` <5750578E.4040406@hpe.com>
@ 2016-06-02 17:25   ` kbuild test robot
  2016-06-02 17:48     ` Aaron Conole
  2 siblings, 1 reply; 11+ messages in thread
From: kbuild test robot @ 2016-06-02 17:25 UTC (permalink / raw)
  To: Aaron Conole
  Cc: kbuild-all, virtualization, netdev, linux-kernel, Michael S. Tsirkin

[-- Attachment #1: Type: text/plain, Size: 6930 bytes --]

Hi,

[auto build test ERROR on next-20160602]

url:    https://github.com/0day-ci/linux/commits/Aaron-Conole/virtio-net-Advised-MTU-feature/20160603-000714
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: the linux-review/Aaron-Conole/virtio-net-Advised-MTU-feature/20160603-000714 HEAD d909da4df3c52f78b4f5fcccd89aea5e38722d10 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   drivers/net/virtio_net.c: In function 'virtnet_probe':
>> drivers/net/virtio_net.c:1899:31: error: 'VIRTIO_NET_F_MTU' undeclared (first use in this function)
     if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
                                  ^~~~~~~~~~~~~~~~
   drivers/net/virtio_net.c:1899:31: note: each undeclared identifier is reported only once for each function it appears in
   drivers/net/virtio_net.c: At top level:
>> drivers/net/virtio_net.c:2076:2: error: 'VIRTIO_NET_F_MTU' undeclared here (not in a function)
     VIRTIO_NET_F_MTU,
     ^~~~~~~~~~~~~~~~

vim +/VIRTIO_NET_F_MTU +1899 drivers/net/virtio_net.c

  1893		    virtio_has_feature(vdev, VIRTIO_F_VERSION_1))
  1894			vi->any_header_sg = true;
  1895	
  1896		if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
  1897			vi->has_cvq = true;
  1898	
> 1899		if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
  1900			dev->mtu = virtio_cread16(vdev,
  1901						  offsetof(struct virtio_net_config,
  1902							   mtu));
  1903		}
  1904	
  1905		if (vi->any_header_sg)
  1906			dev->needed_headroom = vi->hdr_len;
  1907	
  1908		/* Use single tx/rx queue pair as default */
  1909		vi->curr_queue_pairs = 1;
  1910		vi->max_queue_pairs = max_queue_pairs;
  1911	
  1912		/* Allocate/initialize the rx/tx queues, and invoke find_vqs */
  1913		err = init_vqs(vi);
  1914		if (err)
  1915			goto free_stats;
  1916	
  1917	#ifdef CONFIG_SYSFS
  1918		if (vi->mergeable_rx_bufs)
  1919			dev->sysfs_rx_queue_group = &virtio_net_mrg_rx_group;
  1920	#endif
  1921		netif_set_real_num_tx_queues(dev, vi->curr_queue_pairs);
  1922		netif_set_real_num_rx_queues(dev, vi->curr_queue_pairs);
  1923	
  1924		virtnet_init_settings(dev);
  1925	
  1926		err = register_netdev(dev);
  1927		if (err) {
  1928			pr_debug("virtio_net: registering device failed\n");
  1929			goto free_vqs;
  1930		}
  1931	
  1932		virtio_device_ready(vdev);
  1933	
  1934		vi->nb.notifier_call = &virtnet_cpu_callback;
  1935		err = register_hotcpu_notifier(&vi->nb);
  1936		if (err) {
  1937			pr_debug("virtio_net: registering cpu notifier failed\n");
  1938			goto free_unregister_netdev;
  1939		}
  1940	
  1941		/* Assume link up if device can't report link status,
  1942		   otherwise get link status from config. */
  1943		if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
  1944			netif_carrier_off(dev);
  1945			schedule_work(&vi->config_work);
  1946		} else {
  1947			vi->status = VIRTIO_NET_S_LINK_UP;
  1948			netif_carrier_on(dev);
  1949		}
  1950	
  1951		pr_debug("virtnet: registered device %s with %d RX and TX vq's\n",
  1952			 dev->name, max_queue_pairs);
  1953	
  1954		return 0;
  1955	
  1956	free_unregister_netdev:
  1957		vi->vdev->config->reset(vdev);
  1958	
  1959		unregister_netdev(dev);
  1960	free_vqs:
  1961		cancel_delayed_work_sync(&vi->refill);
  1962		free_receive_page_frags(vi);
  1963		virtnet_del_vqs(vi);
  1964	free_stats:
  1965		free_percpu(vi->stats);
  1966	free:
  1967		free_netdev(dev);
  1968		return err;
  1969	}
  1970	
  1971	static void remove_vq_common(struct virtnet_info *vi)
  1972	{
  1973		vi->vdev->config->reset(vi->vdev);
  1974	
  1975		/* Free unused buffers in both send and recv, if any. */
  1976		free_unused_bufs(vi);
  1977	
  1978		free_receive_bufs(vi);
  1979	
  1980		free_receive_page_frags(vi);
  1981	
  1982		virtnet_del_vqs(vi);
  1983	}
  1984	
  1985	static void virtnet_remove(struct virtio_device *vdev)
  1986	{
  1987		struct virtnet_info *vi = vdev->priv;
  1988	
  1989		unregister_hotcpu_notifier(&vi->nb);
  1990	
  1991		/* Make sure no work handler is accessing the device. */
  1992		flush_work(&vi->config_work);
  1993	
  1994		unregister_netdev(vi->dev);
  1995	
  1996		remove_vq_common(vi);
  1997	
  1998		free_percpu(vi->stats);
  1999		free_netdev(vi->dev);
  2000	}
  2001	
  2002	#ifdef CONFIG_PM_SLEEP
  2003	static int virtnet_freeze(struct virtio_device *vdev)
  2004	{
  2005		struct virtnet_info *vi = vdev->priv;
  2006		int i;
  2007	
  2008		unregister_hotcpu_notifier(&vi->nb);
  2009	
  2010		/* Make sure no work handler is accessing the device */
  2011		flush_work(&vi->config_work);
  2012	
  2013		netif_device_detach(vi->dev);
  2014		cancel_delayed_work_sync(&vi->refill);
  2015	
  2016		if (netif_running(vi->dev)) {
  2017			for (i = 0; i < vi->max_queue_pairs; i++)
  2018				napi_disable(&vi->rq[i].napi);
  2019		}
  2020	
  2021		remove_vq_common(vi);
  2022	
  2023		return 0;
  2024	}
  2025	
  2026	static int virtnet_restore(struct virtio_device *vdev)
  2027	{
  2028		struct virtnet_info *vi = vdev->priv;
  2029		int err, i;
  2030	
  2031		err = init_vqs(vi);
  2032		if (err)
  2033			return err;
  2034	
  2035		virtio_device_ready(vdev);
  2036	
  2037		if (netif_running(vi->dev)) {
  2038			for (i = 0; i < vi->curr_queue_pairs; i++)
  2039				if (!try_fill_recv(vi, &vi->rq[i], GFP_KERNEL))
  2040					schedule_delayed_work(&vi->refill, 0);
  2041	
  2042			for (i = 0; i < vi->max_queue_pairs; i++)
  2043				virtnet_napi_enable(&vi->rq[i]);
  2044		}
  2045	
  2046		netif_device_attach(vi->dev);
  2047	
  2048		rtnl_lock();
  2049		virtnet_set_queues(vi, vi->curr_queue_pairs);
  2050		rtnl_unlock();
  2051	
  2052		err = register_hotcpu_notifier(&vi->nb);
  2053		if (err)
  2054			return err;
  2055	
  2056		return 0;
  2057	}
  2058	#endif
  2059	
  2060	static struct virtio_device_id id_table[] = {
  2061		{ VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID },
  2062		{ 0 },
  2063	};
  2064	
  2065	static unsigned int features[] = {
  2066		VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM,
  2067		VIRTIO_NET_F_GSO, VIRTIO_NET_F_MAC,
  2068		VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_HOST_TSO6,
  2069		VIRTIO_NET_F_HOST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6,
  2070		VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_UFO,
  2071		VIRTIO_NET_F_MRG_RXBUF, VIRTIO_NET_F_STATUS, VIRTIO_NET_F_CTRL_VQ,
  2072		VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN,
  2073		VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
  2074		VIRTIO_NET_F_CTRL_MAC_ADDR,
  2075		VIRTIO_F_ANY_LAYOUT,
> 2076		VIRTIO_NET_F_MTU,
  2077	};
  2078	
  2079	static struct virtio_driver virtio_net_driver = {

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

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 55156 bytes --]

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 17:25   ` kbuild test robot
@ 2016-06-02 17:48     ` Aaron Conole
  0 siblings, 0 replies; 11+ messages in thread
From: Aaron Conole @ 2016-06-02 17:48 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, virtualization, netdev, linux-kernel, Michael S. Tsirkin


kbuild test robot <lkp@intel.com> writes:

> Hi,
>
> [auto build test ERROR on next-20160602]
>
> url:    https://github.com/0day-ci/linux/commits/Aaron-Conole/virtio-net-Advised-MTU-feature/20160603-000714
> config: i386-allmodconfig (attached as .config)
> compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=i386 
>
> Note: the linux-review/Aaron-Conole/virtio-net-Advised-MTU-feature/20160603-000714 HEAD d909da4df3c52f78b4f5fcccd89aea5e38722d10 builds fine.
>       It only hurts bisectibility.
>
> All errors (new ones prefixed by >>):
>
>    drivers/net/virtio_net.c: In function 'virtnet_probe':
>>> drivers/net/virtio_net.c:1899:31: error: 'VIRTIO_NET_F_MTU'
>>> undeclared (first use in this function)
>      if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
>                                   ^~~~~~~~~~~~~~~~
>    drivers/net/virtio_net.c:1899:31: note: each undeclared identifier is reported only once for each function it appears in
>    drivers/net/virtio_net.c: At top level:
>>> drivers/net/virtio_net.c:2076:2: error: 'VIRTIO_NET_F_MTU'
>>> undeclared here (not in a function)
>      VIRTIO_NET_F_MTU,
>      ^~~~~~~~~~~~~~~~

Oops, hunk was dropped during rebase.  Sorry for this, v2 will fix this
error, as well and I'll do a boot test before submission.

Thanks kbuild robot!

> vim +/VIRTIO_NET_F_MTU +1899 drivers/net/virtio_net.c
>
>   1893		    virtio_has_feature(vdev, VIRTIO_F_VERSION_1))
>   1894			vi->any_header_sg = true;
>   1895	
>   1896		if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
>   1897			vi->has_cvq = true;
>   1898	
>> 1899		if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
>   1900			dev->mtu = virtio_cread16(vdev,
>   1901 offsetof(struct virtio_net_config,
>   1902							   mtu));
>   1903		}
>   1904	
>   1905		if (vi->any_header_sg)
>   1906			dev->needed_headroom = vi->hdr_len;
>   1907	
>   1908		/* Use single tx/rx queue pair as default */
>   1909		vi->curr_queue_pairs = 1;
>   1910		vi->max_queue_pairs = max_queue_pairs;
>   1911	
>   1912		/* Allocate/initialize the rx/tx queues, and invoke find_vqs */
>   1913		err = init_vqs(vi);
>   1914		if (err)
>   1915			goto free_stats;
>   1916	
>   1917	#ifdef CONFIG_SYSFS
>   1918		if (vi->mergeable_rx_bufs)
>   1919			dev->sysfs_rx_queue_group = &virtio_net_mrg_rx_group;
>   1920	#endif
>   1921		netif_set_real_num_tx_queues(dev, vi->curr_queue_pairs);
>   1922		netif_set_real_num_rx_queues(dev, vi->curr_queue_pairs);
>   1923	
>   1924		virtnet_init_settings(dev);
>   1925	
>   1926		err = register_netdev(dev);
>   1927		if (err) {
>   1928			pr_debug("virtio_net: registering device failed\n");
>   1929			goto free_vqs;
>   1930		}
>   1931	
>   1932		virtio_device_ready(vdev);
>   1933	
>   1934		vi->nb.notifier_call = &virtnet_cpu_callback;
>   1935		err = register_hotcpu_notifier(&vi->nb);
>   1936		if (err) {
>   1937			pr_debug("virtio_net: registering cpu notifier failed\n");
>   1938			goto free_unregister_netdev;
>   1939		}
>   1940	
>   1941		/* Assume link up if device can't report link status,
>   1942		   otherwise get link status from config. */
>   1943		if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
>   1944			netif_carrier_off(dev);
>   1945			schedule_work(&vi->config_work);
>   1946		} else {
>   1947			vi->status = VIRTIO_NET_S_LINK_UP;
>   1948			netif_carrier_on(dev);
>   1949		}
>   1950	
>   1951		pr_debug("virtnet: registered device %s with %d RX and TX vq's\n",
>   1952			 dev->name, max_queue_pairs);
>   1953	
>   1954		return 0;
>   1955	
>   1956	free_unregister_netdev:
>   1957		vi->vdev->config->reset(vdev);
>   1958	
>   1959		unregister_netdev(dev);
>   1960	free_vqs:
>   1961		cancel_delayed_work_sync(&vi->refill);
>   1962		free_receive_page_frags(vi);
>   1963		virtnet_del_vqs(vi);
>   1964	free_stats:
>   1965		free_percpu(vi->stats);
>   1966	free:
>   1967		free_netdev(dev);
>   1968		return err;
>   1969	}
>   1970	
>   1971	static void remove_vq_common(struct virtnet_info *vi)
>   1972	{
>   1973		vi->vdev->config->reset(vi->vdev);
>   1974	
>   1975		/* Free unused buffers in both send and recv, if any. */
>   1976		free_unused_bufs(vi);
>   1977	
>   1978		free_receive_bufs(vi);
>   1979	
>   1980		free_receive_page_frags(vi);
>   1981	
>   1982		virtnet_del_vqs(vi);
>   1983	}
>   1984	
>   1985	static void virtnet_remove(struct virtio_device *vdev)
>   1986	{
>   1987		struct virtnet_info *vi = vdev->priv;
>   1988	
>   1989		unregister_hotcpu_notifier(&vi->nb);
>   1990	
>   1991		/* Make sure no work handler is accessing the device. */
>   1992		flush_work(&vi->config_work);
>   1993	
>   1994		unregister_netdev(vi->dev);
>   1995	
>   1996		remove_vq_common(vi);
>   1997	
>   1998		free_percpu(vi->stats);
>   1999		free_netdev(vi->dev);
>   2000	}
>   2001	
>   2002	#ifdef CONFIG_PM_SLEEP
>   2003	static int virtnet_freeze(struct virtio_device *vdev)
>   2004	{
>   2005		struct virtnet_info *vi = vdev->priv;
>   2006		int i;
>   2007	
>   2008		unregister_hotcpu_notifier(&vi->nb);
>   2009	
>   2010		/* Make sure no work handler is accessing the device */
>   2011		flush_work(&vi->config_work);
>   2012	
>   2013		netif_device_detach(vi->dev);
>   2014		cancel_delayed_work_sync(&vi->refill);
>   2015	
>   2016		if (netif_running(vi->dev)) {
>   2017			for (i = 0; i < vi->max_queue_pairs; i++)
>   2018				napi_disable(&vi->rq[i].napi);
>   2019		}
>   2020	
>   2021		remove_vq_common(vi);
>   2022	
>   2023		return 0;
>   2024	}
>   2025	
>   2026	static int virtnet_restore(struct virtio_device *vdev)
>   2027	{
>   2028		struct virtnet_info *vi = vdev->priv;
>   2029		int err, i;
>   2030	
>   2031		err = init_vqs(vi);
>   2032		if (err)
>   2033			return err;
>   2034	
>   2035		virtio_device_ready(vdev);
>   2036	
>   2037		if (netif_running(vi->dev)) {
>   2038			for (i = 0; i < vi->curr_queue_pairs; i++)
>   2039				if (!try_fill_recv(vi, &vi->rq[i], GFP_KERNEL))
>   2040					schedule_delayed_work(&vi->refill, 0);
>   2041	
>   2042			for (i = 0; i < vi->max_queue_pairs; i++)
>   2043				virtnet_napi_enable(&vi->rq[i]);
>   2044		}
>   2045	
>   2046		netif_device_attach(vi->dev);
>   2047	
>   2048		rtnl_lock();
>   2049		virtnet_set_queues(vi, vi->curr_queue_pairs);
>   2050		rtnl_unlock();
>   2051	
>   2052		err = register_hotcpu_notifier(&vi->nb);
>   2053		if (err)
>   2054			return err;
>   2055	
>   2056		return 0;
>   2057	}
>   2058	#endif
>   2059	
>   2060	static struct virtio_device_id id_table[] = {
>   2061		{ VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID },
>   2062		{ 0 },
>   2063	};
>   2064	
>   2065	static unsigned int features[] = {
>   2066		VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM,
>   2067		VIRTIO_NET_F_GSO, VIRTIO_NET_F_MAC,
>   2068 VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO,
> VIRTIO_NET_F_HOST_TSO6,
>   2069 VIRTIO_NET_F_HOST_ECN, VIRTIO_NET_F_GUEST_TSO4,
> VIRTIO_NET_F_GUEST_TSO6,
>   2070		VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_UFO,
>   2071		VIRTIO_NET_F_MRG_RXBUF, VIRTIO_NET_F_STATUS, VIRTIO_NET_F_CTRL_VQ,
>   2072		VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN,
>   2073		VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
>   2074		VIRTIO_NET_F_CTRL_MAC_ADDR,
>   2075		VIRTIO_F_ANY_LAYOUT,
>> 2076		VIRTIO_NET_F_MTU,
>   2077	};
>   2078	
>   2079	static struct virtio_driver virtio_net_driver = {
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

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

* Re: [PATCH -next 2/2] virtio_net: Read the advised MTU
  2016-06-02 17:06     ` Aaron Conole
@ 2016-06-02 18:02       ` Rick Jones
  0 siblings, 0 replies; 11+ messages in thread
From: Rick Jones @ 2016-06-02 18:02 UTC (permalink / raw)
  To: Aaron Conole; +Cc: Michael S. Tsirkin, virtualization, netdev, linux-kernel

On 06/02/2016 10:06 AM, Aaron Conole wrote:
> Rick Jones <rick.jones2@hpe.com> writes:
>> One of the things I've been doing has been setting-up a cluster
>> (OpenStack) with JumboFrames, and then setting MTUs on instance vNICs
>> by hand to measure different MTU sizes.  It would be a shame if such a
>> thing were not possible in the future.  Keeping a warning if shrinking
>> the MTU would be good, leave the error (perhaps) to if an attempt is
>> made to go beyond the advised value.
>
> This was cut because it didn't make sense for such a warning to
> be issued, but it seems like perhaps you may want such a feature?  I
> agree with Michael, after thinking about it, that I don't know what sort
> of use the warning would serve.  After all, if you're changing the MTU,
> you must have wanted such a change to occur?

I don't need a warning, was simply willing to live with one when 
shrinking the MTU.  Didn't want an error.

happy benchmarking,

rick jones

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

end of thread, other threads:[~2016-06-02 18:10 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-02 15:43 [PATCH -next 0/2] virtio-net: Advised MTU feature Aaron Conole
2016-06-02 15:43 ` [PATCH -next 1/2] virtio: Start feature MTU support Aaron Conole
2016-06-02 16:17   ` Michael S. Tsirkin
2016-06-02 17:10     ` Aaron Conole
2016-06-02 15:43 ` [PATCH -next 2/2] virtio_net: Read the advised MTU Aaron Conole
2016-06-02 16:16   ` Michael S. Tsirkin
2016-06-02 17:10     ` Aaron Conole
     [not found]   ` <5750578E.4040406@hpe.com>
2016-06-02 17:06     ` Aaron Conole
2016-06-02 18:02       ` Rick Jones
2016-06-02 17:25   ` kbuild test robot
2016-06-02 17:48     ` Aaron Conole

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).