linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] via-rhine: add support for changing MTU
@ 2017-06-13 17:18 Magnus Damm
  2017-06-13 21:33 ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Magnus Damm @ 2017-06-13 17:18 UTC (permalink / raw)
  To: netdev; +Cc: Magnus Damm, linux-kernel, davem

From: Magnus Damm <damm+renesas@opensource.se>

Allow adjusting the MTU for via-rhine devices in case of no TX alignment
buffer is used.

Lightly tested on ALIX2D13 hardware by making use of VXLAN with MTU set
to 1500 on top of via-rhine devices with 1550 MTU. Without this patch
the VXLAN MTU is limited to less than 1500.

Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
---

 Developed on top of next-20170613

 drivers/net/ethernet/via/via-rhine.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

--- 0001/drivers/net/ethernet/via/via-rhine.c
+++ work/drivers/net/ethernet/via/via-rhine.c	2017-06-14 02:05:25.410607110 +0900
@@ -518,6 +518,7 @@ static void rhine_get_stats64(struct net
 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 static const struct ethtool_ops netdev_ethtool_ops;
 static int  rhine_close(struct net_device *dev);
+static int rhine_change_mtu(struct net_device *dev, int new_mtu);
 static int rhine_vlan_rx_add_vid(struct net_device *dev,
 				 __be16 proto, u16 vid);
 static int rhine_vlan_rx_kill_vid(struct net_device *dev,
@@ -894,6 +895,7 @@ static const struct net_device_ops rhine
 	.ndo_set_mac_address 	 = eth_mac_addr,
 	.ndo_do_ioctl		 = netdev_ioctl,
 	.ndo_tx_timeout 	 = rhine_tx_timeout,
+	.ndo_change_mtu 	 = rhine_change_mtu,
 	.ndo_vlan_rx_add_vid	 = rhine_vlan_rx_add_vid,
 	.ndo_vlan_rx_kill_vid	 = rhine_vlan_rx_kill_vid,
 #ifdef CONFIG_NET_POLL_CONTROLLER
@@ -981,6 +983,14 @@ static int rhine_init_one_common(struct
 				 NETIF_F_HW_VLAN_CTAG_RX |
 				 NETIF_F_HW_VLAN_CTAG_FILTER;
 
+	/* Allow MTU configuration as long as TX alignment buffer is unused */
+	if (!(rp->quirks & rqRhineI)) {
+		/* Packets less than 64 octets will raise RDES0.RUNT. */
+		dev->min_mtu = ETH_ZLEN - ETH_HLEN;
+		/* Hardware has 11 bits of RDES0.Rx_Length including FCS. */
+		dev->max_mtu = 0x1fff - ETH_HLEN - ETH_FCS_LEN;
+	}
+
 	/* dev->name not defined before register_netdev()! */
 	rc = register_netdev(dev);
 	if (rc)
@@ -1399,6 +1409,15 @@ static void rhine_set_carrier(struct mii
 		   mii->force_media, netif_carrier_ok(dev));
 }
 
+static int rhine_change_mtu(struct net_device *dev, int new_mtu)
+{
+	if (dev->flags & IFF_UP)
+		return -EBUSY;
+
+	dev->mtu = new_mtu;
+	return 0;
+}
+
 /**
  * rhine_set_cam - set CAM multicast filters
  * @ioaddr: register block of this Rhine

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

* Re: [PATCH] via-rhine: add support for changing MTU
  2017-06-13 17:18 [PATCH] via-rhine: add support for changing MTU Magnus Damm
@ 2017-06-13 21:33 ` David Miller
  2017-06-14  6:02   ` Magnus Damm
  0 siblings, 1 reply; 4+ messages in thread
From: David Miller @ 2017-06-13 21:33 UTC (permalink / raw)
  To: magnus.damm; +Cc: netdev, linux-kernel

From: Magnus Damm <magnus.damm@gmail.com>
Date: Wed, 14 Jun 2017 02:18:27 +0900

> From: Magnus Damm <damm+renesas@opensource.se>
> 
> Allow adjusting the MTU for via-rhine devices in case of no TX alignment
> buffer is used.
> 
> Lightly tested on ALIX2D13 hardware by making use of VXLAN with MTU set
> to 1500 on top of via-rhine devices with 1550 MTU. Without this patch
> the VXLAN MTU is limited to less than 1500.
> 
> Signed-off-by: Magnus Damm <damm+renesas@opensource.se>

Why is the TX alignment buffer such an obstacle?

It would be so much nicer if this could be supported for all chip
variants instead of some certain subset which users have no idea
of figuring out.  It's a really bad user experience to set them
up for failure like this.

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

* Re: [PATCH] via-rhine: add support for changing MTU
  2017-06-13 21:33 ` David Miller
@ 2017-06-14  6:02   ` Magnus Damm
  2017-06-14 16:29     ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Magnus Damm @ 2017-06-14  6:02 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, linux-kernel

On Wed, Jun 14, 2017 at 6:33 AM, David Miller <davem@davemloft.net> wrote:
> From: Magnus Damm <magnus.damm@gmail.com>
> Date: Wed, 14 Jun 2017 02:18:27 +0900
>
>> From: Magnus Damm <damm+renesas@opensource.se>
>>
>> Allow adjusting the MTU for via-rhine devices in case of no TX alignment
>> buffer is used.
>>
>> Lightly tested on ALIX2D13 hardware by making use of VXLAN with MTU set
>> to 1500 on top of via-rhine devices with 1550 MTU. Without this patch
>> the VXLAN MTU is limited to less than 1500.
>>
>> Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
>
> Why is the TX alignment buffer such an obstacle?

Not such a big obstacle - I simply took the easy way out for this
first step. Adding support for MTU configuration when TX alignment is
required requires a bit more effort, and it also makes the driver
implementation slightly more complex.

The particular silicon version of via-rhine devices on my ALIX2D13
boards do not require the TX alignment workaround, but I should be
able to add some local test code for development purpose.

As for the TX alignment workaround implementation, when needed the
driver allocates rp->tx_bufs to PKT_BUF_SIZE * TX_RING_SIZE. To
support a larger MTU setting without increasing default memory usage
this TX side can be adjusted to manage buffers in a more dynamic way,
perhaps similar to the RX side with rp->rx_buf_sz.

> It would be so much nicer if this could be supported for all chip
> variants instead of some certain subset which users have no idea
> of figuring out.  It's a really bad user experience to set them
> up for failure like this.

Sure, I agree!

Will update the code with the TX alignment workaround and resend after
some much needed testing. It will most likely take some time, so
please don't block anything on this.

Cheers,

/ magnus

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

* Re: [PATCH] via-rhine: add support for changing MTU
  2017-06-14  6:02   ` Magnus Damm
@ 2017-06-14 16:29     ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2017-06-14 16:29 UTC (permalink / raw)
  To: magnus.damm; +Cc: netdev, linux-kernel

From: Magnus Damm <magnus.damm@gmail.com>
Date: Wed, 14 Jun 2017 15:02:30 +0900

> Will update the code with the TX alignment workaround and resend after
> some much needed testing. It will most likely take some time, so
> please don't block anything on this.

Thank you.

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

end of thread, other threads:[~2017-06-14 16:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-13 17:18 [PATCH] via-rhine: add support for changing MTU Magnus Damm
2017-06-13 21:33 ` David Miller
2017-06-14  6:02   ` Magnus Damm
2017-06-14 16:29     ` David Miller

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).