mirror of
https://abf.rosa.ru/djam/kernel.git
synced 2025-02-24 00:32:51 +00:00

See the commits 05a8c4904699..16da528365de in https://abf.io/kernels_stable/kernel-4.6. Hightlights: * New build model: everything in a single project. * PAE by default on i586. No non-PAE flavours remain. * SELinux is now built in (disabled by default). * Dropped ndiswrapper (can be built separately if it is really needed).
88 lines
3.2 KiB
Diff
88 lines
3.2 KiB
Diff
From https://bugzilla.kernel.org/show_bug.cgi?id=70761#c46
|
|
|
|
@@ -, +, @@
|
|
---
|
|
drivers/net/ethernet/atheros/alx/hw.c | 10 +++++-----
|
|
drivers/net/ethernet/atheros/alx/hw.h | 9 ++++++---
|
|
drivers/net/ethernet/atheros/alx/main.c | 7 +++----
|
|
3 files changed, 14 insertions(+), 12 deletions(-)
|
|
--- a/drivers/net/ethernet/atheros/alx/hw.c
|
|
+++ a/drivers/net/ethernet/atheros/alx/hw.c
|
|
@@ -958,13 +958,13 @@ void alx_configure_basic(struct alx_hw *hw)
|
|
alx_write_mem32(hw, ALX_TINT_TPD_THRSHLD, hw->ith_tpd);
|
|
alx_write_mem32(hw, ALX_TINT_TIMER, hw->imt);
|
|
|
|
- raw_mtu = hw->mtu + ETH_HLEN;
|
|
- alx_write_mem32(hw, ALX_MTU, raw_mtu + 8);
|
|
- if (raw_mtu > ALX_MTU_JUMBO_TH)
|
|
+ raw_mtu = ALX_RAW_MTU(hw->mtu);
|
|
+ alx_write_mem32(hw, ALX_MTU, raw_mtu);
|
|
+ if (raw_mtu > (ALX_MTU_JUMBO_TH + ETH_FCS_LEN + VLAN_HLEN))
|
|
hw->rx_ctrl &= ~ALX_MAC_CTRL_FAST_PAUSE;
|
|
|
|
- if ((raw_mtu + 8) < ALX_TXQ1_JUMBO_TSO_TH)
|
|
- val = (raw_mtu + 8 + 7) >> 3;
|
|
+ if ((raw_mtu) < ALX_TXQ1_JUMBO_TSO_TH)
|
|
+ val = (raw_mtu + 7) >> 3;
|
|
else
|
|
val = ALX_TXQ1_JUMBO_TSO_TH >> 3;
|
|
alx_write_mem32(hw, ALX_TXQ1, val | ALX_TXQ1_ERRLGPKT_DROP_EN);
|
|
--- a/drivers/net/ethernet/atheros/alx/hw.h
|
|
+++ a/drivers/net/ethernet/atheros/alx/hw.h
|
|
@@ -37,6 +37,7 @@
|
|
#include <linux/types.h>
|
|
#include <linux/mdio.h>
|
|
#include <linux/pci.h>
|
|
+#include <linux/if_vlan.h>
|
|
#include "reg.h"
|
|
|
|
/* Transmit Packet Descriptor, contains 4 32-bit words.
|
|
@@ -343,12 +344,14 @@ struct alx_rrd {
|
|
ALX_RSS_HASH_TYPE_IPV4_TCP | \
|
|
ALX_RSS_HASH_TYPE_IPV6 | \
|
|
ALX_RSS_HASH_TYPE_IPV6_TCP)
|
|
-#define ALX_DEF_RXBUF_SIZE 1536
|
|
+#define ALX_FRAME_PAD 16
|
|
+#define ALX_RAW_MTU(_mtu) (_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN)
|
|
+#define ALX_MAX_FRAME_LEN(_mtu) (ALIGN((ALX_RAW_MTU(_mtu) + ALX_FRAME_PAD), 8))
|
|
+#define ALX_DEF_RXBUF_SIZE ALX_MAX_FRAME_LEN(1500)
|
|
#define ALX_MAX_JUMBO_PKT_SIZE (9*1024)
|
|
#define ALX_MAX_TSO_PKT_SIZE (7*1024)
|
|
#define ALX_MAX_FRAME_SIZE ALX_MAX_JUMBO_PKT_SIZE
|
|
-#define ALX_MIN_FRAME_SIZE 68
|
|
-#define ALX_RAW_MTU(_mtu) (_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN)
|
|
+#define ALX_MIN_FRAME_SIZE (ETH_ZLEN + ETH_FCS_LEN + VLAN_HLEN)
|
|
|
|
#define ALX_MAX_RX_QUEUES 8
|
|
#define ALX_MAX_TX_QUEUES 4
|
|
--- a/drivers/net/ethernet/atheros/alx/main.c
|
|
+++ a/drivers/net/ethernet/atheros/alx/main.c
|
|
@@ -705,7 +705,7 @@ static int alx_init_sw(struct alx_priv *alx)
|
|
|
|
hw->smb_timer = 400;
|
|
hw->mtu = alx->dev->mtu;
|
|
- alx->rxbuf_size = ALIGN(ALX_RAW_MTU(hw->mtu), 8);
|
|
+ alx->rxbuf_size = ALX_MAX_FRAME_LEN(hw->mtu);
|
|
alx->tx_ringsz = 256;
|
|
alx->rx_ringsz = 512;
|
|
hw->imt = 200;
|
|
@@ -806,7 +806,7 @@ static void alx_reinit(struct alx_priv *alx)
|
|
static int alx_change_mtu(struct net_device *netdev, int mtu)
|
|
{
|
|
struct alx_priv *alx = netdev_priv(netdev);
|
|
- int max_frame = mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
|
|
+ int max_frame = ALX_MAX_FRAME_LEN(mtu);
|
|
|
|
if ((max_frame < ALX_MIN_FRAME_SIZE) ||
|
|
(max_frame > ALX_MAX_FRAME_SIZE))
|
|
@@ -817,8 +817,7 @@ static int alx_change_mtu(struct net_device *netdev, int mtu)
|
|
|
|
netdev->mtu = mtu;
|
|
alx->hw.mtu = mtu;
|
|
- alx->rxbuf_size = mtu > ALX_DEF_RXBUF_SIZE ?
|
|
- ALIGN(max_frame, 8) : ALX_DEF_RXBUF_SIZE;
|
|
+ alx->rxbuf_size = max(max_frame, ALX_DEF_RXBUF_SIZE);
|
|
netdev_update_features(netdev);
|
|
if (netif_running(netdev))
|
|
alx_reinit(alx);
|
|
--
|