Commit 4c2743f9 authored by Raghu Vatsavayi's avatar Raghu Vatsavayi Committed by David S. Miller

liquidio: MTU limits

This patch limits the MTU  between 68 bytes and 16000 bytes.
Signed-off-by: default avatarDerek Chickles <derek.chickles@caviumnetworks.com>
Signed-off-by: default avatarSatanand Burla <satananda.burla@caviumnetworks.com>
Signed-off-by: default avatarFelix Manlunas <felix.manlunas@caviumnetworks.com>
Signed-off-by: default avatarRaghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e0d30fe
...@@ -554,7 +554,7 @@ lio_ethtool_get_ringparam(struct net_device *netdev, ...@@ -554,7 +554,7 @@ lio_ethtool_get_ringparam(struct net_device *netdev,
tx_pending = CFG_GET_NUM_TX_DESCS_NIC_IF(conf6x, lio->ifidx); tx_pending = CFG_GET_NUM_TX_DESCS_NIC_IF(conf6x, lio->ifidx);
} }
if (lio->mtu > OCTNET_DEFAULT_FRM_SIZE) { if (lio->mtu > OCTNET_DEFAULT_FRM_SIZE - OCTNET_FRM_HEADER_SIZE) {
ering->rx_pending = 0; ering->rx_pending = 0;
ering->rx_max_pending = 0; ering->rx_max_pending = 0;
ering->rx_mini_pending = 0; ering->rx_mini_pending = 0;
......
...@@ -2365,11 +2365,14 @@ void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr) ...@@ -2365,11 +2365,14 @@ void liquidio_link_ctrl_cmd_completion(void *nctrl_ptr)
case OCTNET_CMD_CHANGE_MTU: case OCTNET_CMD_CHANGE_MTU:
/* If command is successful, change the MTU. */ /* If command is successful, change the MTU. */
netif_info(lio, probe, lio->netdev, " MTU Changed from %d to %d\n", netif_info(lio, probe, lio->netdev, " MTU Changed from %d to %d\n",
netdev->mtu, nctrl->ncmd.s.param2); netdev->mtu, nctrl->ncmd.s.param1);
dev_info(&oct->pci_dev->dev, "%s MTU Changed from %d to %d\n", dev_info(&oct->pci_dev->dev, "%s MTU Changed from %d to %d\n",
netdev->name, netdev->mtu, netdev->name, netdev->mtu,
nctrl->ncmd.s.param2); nctrl->ncmd.s.param1);
netdev->mtu = nctrl->ncmd.s.param2; rtnl_lock();
netdev->mtu = nctrl->ncmd.s.param1;
call_netdevice_notifiers(NETDEV_CHANGEMTU, netdev);
rtnl_unlock();
break; break;
case OCTNET_CMD_GPIO_ACCESS: case OCTNET_CMD_GPIO_ACCESS:
...@@ -2657,18 +2660,16 @@ static int liquidio_change_mtu(struct net_device *netdev, int new_mtu) ...@@ -2657,18 +2660,16 @@ static int liquidio_change_mtu(struct net_device *netdev, int new_mtu)
struct lio *lio = GET_LIO(netdev); struct lio *lio = GET_LIO(netdev);
struct octeon_device *oct = lio->oct_dev; struct octeon_device *oct = lio->oct_dev;
struct octnic_ctrl_pkt nctrl; struct octnic_ctrl_pkt nctrl;
int max_frm_size = new_mtu + OCTNET_FRM_HEADER_SIZE;
int ret = 0; int ret = 0;
/* Limit the MTU to make sure the ethernet packets are between 64 bytes /* Limit the MTU to make sure the ethernet packets are between 68 bytes
* and 65535 bytes * and 16000 bytes
*/ */
if ((max_frm_size < OCTNET_MIN_FRM_SIZE) || if ((new_mtu < LIO_MIN_MTU_SIZE) ||
(max_frm_size > OCTNET_MAX_FRM_SIZE)) { (new_mtu > LIO_MAX_MTU_SIZE)) {
dev_err(&oct->pci_dev->dev, "Invalid MTU: %d\n", new_mtu); dev_err(&oct->pci_dev->dev, "Invalid MTU: %d\n", new_mtu);
dev_err(&oct->pci_dev->dev, "Valid range %d and %d\n", dev_err(&oct->pci_dev->dev, "Valid range %d and %d\n",
(OCTNET_MIN_FRM_SIZE - OCTNET_FRM_HEADER_SIZE), LIO_MIN_MTU_SIZE, LIO_MAX_MTU_SIZE);
(OCTNET_MAX_FRM_SIZE - OCTNET_FRM_HEADER_SIZE));
return -EINVAL; return -EINVAL;
} }
......
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/ptp_clock_kernel.h> #include <linux/ptp_clock_kernel.h>
#define LIO_MAX_MTU_SIZE (OCTNET_MAX_FRM_SIZE - OCTNET_FRM_HEADER_SIZE)
#define LIO_MIN_MTU_SIZE 68
struct oct_nic_stats_resp { struct oct_nic_stats_resp {
u64 rh; u64 rh;
struct oct_link_stats stats; struct oct_link_stats stats;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment