linux/drivers/net/ethernet
Ido Schimmel 9f7ec052b7 mlxsw: spectrum: Add support for PAUSE frames
When a packet ingress the switch it's placed in its assigned priority
group (PG) buffer in the port's headroom buffer while it goes through
the switch's pipeline. After going through the pipeline - which
determines its egress port(s) and traffic class - it's moved to the
switch's shared buffer awaiting transmission.

However, some packets are not eligible to enter the shared buffer due to
exceeded quotas or insufficient space. Marking their associated PGs as
lossless will cause the packets to accumulate in the PG buffer. Another
reason for packets accumulation are complicated pipelines (e.g.
involving a lot of ACLs).

To prevent packets from being dropped a user can enable PAUSE frames on
the port. This will mark all the active PGs as lossless and set their
size according to the maximum delay, as it's not configured by user.

                         +----------------+   +
                         |                |   |
                         |                |   |
                         |                |   |
                         |                |   |
                         |                |   |
                         |                |   | Delay
                         |                |   |
                         |                |   |
                         |                |   |
                         |                |   |
                         |                |   |
    Xon/Xoff threshold   +----------------+   +
                         |                |   |
                         |                |   | 2 * MTU
                         |                |   |
                         +----------------+   +

The delay (612 [Cells]) was calculated according to worst-case scenario
involving maximum MTU and 100m cables.

After marking the PGs as lossless the device is configured to respect
incoming PAUSE frames (Rx PAUSE) and generate PAUSE frames (Tx PAUSE)
according to user's settings.

Whenever the port's headroom configuration changes we take into account
the PAUSE configuration, so that we correctly set the PG's type (lossy /
lossless), size and threshold. This can happen when:

a) The port's MTU changes, as it directly affects the PG's size.

b) A PG is created following user configuration, by binding a priority
to it.

Note that the relevant SUPPORTED flags were already mistakenly set by
the driver before this commit.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-06 17:24:19 -04:00
..
3com Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
8390
adaptec
adi
aeroflex
agere et131x: check return value of dma_alloc_coherent 2016-02-17 23:32:05 -05:00
allwinner
alteon
altera net: eth: altera: do not free array priv->mdio->irq 2016-03-06 22:59:18 -05:00
amd net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
apm drivers: net: xgene: Add support for multiple queues 2016-02-17 22:08:34 -05:00
apple
arc net: arc: trivial: cleanup the emac driver 2016-03-16 19:28:01 -04:00
atheros ethernet/atl1c: remove left over dead code 2016-03-02 15:00:55 -05:00
aurora net: ethernet: nb8800: support fixed-link DT node 2016-02-24 11:32:11 -05:00
broadcom net: bcmgenet: cleanup for dmadesc_set() 2016-04-05 19:33:52 -04:00
brocade bna: fix list corruption 2016-03-01 15:19:43 -05:00
cadence net: macb: Fix simple typo 2016-04-04 16:16:36 -04:00
calxeda
cavium netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
chelsio cxgb4/cxgb4vf: Deprecate module parameter dflt_msg_enable 2016-04-06 16:17:25 -04:00
cirrus
cisco cisco: enic: Update logging macros and uses 2016-03-11 15:07:48 -05:00
davicom net: ethernet: davicom: fix devicetree irq resource 2016-02-21 22:40:49 -05:00
dec net: tulip: Use setup_timer() 2016-02-25 16:51:04 -05:00
dlink
emulex Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
ezchip net: ezchip: adapt driver to little endian architecture 2016-03-03 17:20:08 -05:00
faraday
freescale fec: Do not access unexisting register in Coldfire 2016-03-31 16:04:05 -04:00
fujitsu fmvj18x_cs: fix incorrect indexing of dev->dev_addr[] when copying the MAC address 2016-02-21 22:08:43 -05:00
hisilicon net: hns: add support of pause frame ctrl for HNS V2 2016-04-02 20:17:14 -04:00
hp
i825xx
ibm ibmvnic: enable RX checksum offload 2016-04-05 19:51:38 -04:00
intel i40e/i40evf: Fix TSO checksum pseudo-header adjustment 2016-04-05 20:34:51 -07:00
marvell net: mvneta: fix changing MTU when using per-cpu processing 2016-04-01 15:16:37 -04:00
mediatek net: mediatek: fix checking for NULL instead of IS_ERR() in .probe 2016-03-23 13:49:13 -04:00
mellanox mlxsw: spectrum: Add support for PAUSE frames 2016-04-06 17:24:19 -04:00
micrel ethernet: micrel: fix some error codes 2016-03-18 19:39:54 -04:00
microchip
moxa net: moxa: fix an error code 2016-03-03 17:17:14 -05:00
myricom
natsemi
neterion
netronome asm-generic: remove old nonatomic-io wrapper files 2016-03-01 22:25:17 +01:00
nuvoton
nvidia forcedeth: Use setup_timer() 2016-02-25 16:51:05 -05:00
nxp
oki-semi
packetengines
pasemi pasemi_mac: Replace LRO with GRO 2016-02-17 16:15:45 -05:00
qlogic qed: initialize return rc to avoid returning garbage 2016-03-30 15:48:15 -04:00
qualcomm net: qca_spi: clear IFF_TX_SKB_SHARING 2016-02-25 16:12:15 -05:00
rdc
realtek r8169:Remove unnecessary phy reset for pcie nic when setting link spped. 2016-03-13 22:32:44 -04:00
renesas ravb: Add dma queue interrupt support 2016-04-04 16:02:12 -04:00
rocker rocker: move ageing_time from struct rocker to struct ofdpa 2016-03-12 20:11:13 -05:00
samsung net: sxgbe: fix error paths in sxgbe_platform_probe() 2016-03-27 22:39:22 -04:00
seeq
sfc net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
sgi
silan
sis
smsc net: smc911x: avoid unused variable warnings 2016-03-21 11:26:12 -04:00
stmicro stmmac: update version to Jan_2016 2016-04-02 20:23:09 -04:00
sun Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2016-03-19 10:05:34 -07:00
synopsys dwc_eth_qos: do phy_start before resetting hardware 2016-03-02 14:57:15 -05:00
tehuti
ti net: relax setup_tc ndo op handle restriction 2016-03-03 16:25:15 -05:00
tile
toshiba
tundra
via
wiznet
xilinx
xircom
xscale
dnet.c
dnet.h
ec_bhf.c
ethoc.c net/ethoc: do not free array priv->mdio->irq 2016-03-06 22:58:51 -05:00
fealnx.c
jme.c jme: Fix device PM wakeup API usage 2016-03-07 15:39:45 -05:00
jme.h
Kconfig netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
korina.c
lantiq_etop.c
Makefile netdev: Move octeon/octeon_mgmt driver to cavium directory. 2016-03-18 18:25:30 -04:00
netx-eth.c