Skip to content

Commit bc78d64

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Handle notifier registry failures properly in tun/tap driver, from Tonghao Zhang. 2) Fix bpf verifier handling of subtraction bounds and add a testcase for this, from Edward Cree. 3) Increase reset timeout in ftgmac100 driver, from Ben Herrenschmidt. 4) Fix use after free in prd_retire_rx_blk_timer_exired() in AF_PACKET, from Cong Wang. 5) Fix SElinux regression due to recent UDP optimizations, from Paolo Abeni. 6) We accidently increment IPSTATS_MIB_FRAGFAILS in the ipv6 code paths, fix from Stefano Brivio. 7) Fix some mem leaks in dccp, from Xin Long. 8) Adjust MDIO_BUS kconfig deps to avoid build errors, from Arnd Bergmann. 9) Mac address length check and buffer size fixes from Cong Wang. 10) Don't leak sockets in ipv6 udp early demux, from Paolo Abeni. 11) Fix return value when copy_from_user() fails in bpf_prog_get_info_by_fd(), from Daniel Borkmann. 12) Handle PHY_HALTED properly in phy library state machine, from Florian Fainelli. 13) Fix OOPS in fib_sync_down_dev(), from Ido Schimmel. 14) Fix truesize calculation in virtio_net which led to performance regressions, from Michael S Tsirkin. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (76 commits) samples/bpf: fix bpf tunnel cleanup udp6: fix jumbogram reception ppp: Fix a scheduling-while-atomic bug in del_chan Revert "net: bcmgenet: Remove init parameter from bcmgenet_mii_config" virtio_net: fix truesize for mergeable buffers mv643xx_eth: fix of_irq_to_resource() error check MAINTAINERS: Add more files to the PHY LIBRARY section ipv4: fib: Fix NULL pointer deref during fib_sync_down_dev() net: phy: Correctly process PHY_HALTED in phy_stop_machine() sunhme: fix up GREG_STAT and GREG_IMASK register offsets bpf: fix bpf_prog_get_info_by_fd to dump correct xlated_prog_len tcp: avoid bogus gcc-7 array-bounds warning net: tc35815: fix spelling mistake: "Intterrupt" -> "Interrupt" bpf: don't indicate success when copy_from_user fails udp6: fix socket leak on early demux net: thunderx: Fix BGX transmit stall due to underflow Revert "vhost: cache used event for better performance" team: use a larger struct for mac address net: check dev->addr_len for dev_set_mac_address() phy: bcm-ns-usb3: fix MDIO_BUS dependency ...
2 parents 2e7ca20 + cc75f85 commit bc78d64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+629
-296
lines changed

MAINTAINERS

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5090,12 +5090,20 @@ M: Andrew Lunn <[email protected]>
50905090
M: Florian Fainelli <[email protected]>
50915091
50925092
S: Maintained
5093-
F: include/linux/phy.h
5094-
F: include/linux/phy_fixed.h
5095-
F: drivers/net/phy/
5093+
F: Documentation/ABI/testing/sysfs-bus-mdio
5094+
F: Documentation/devicetree/bindings/net/mdio*
50965095
F: Documentation/networking/phy.txt
5096+
F: drivers/net/phy/
50975097
F: drivers/of/of_mdio.c
50985098
F: drivers/of/of_net.c
5099+
F: include/linux/*mdio*.h
5100+
F: include/linux/of_net.h
5101+
F: include/linux/phy.h
5102+
F: include/linux/phy_fixed.h
5103+
F: include/linux/platform_data/mdio-gpio.h
5104+
F: include/trace/events/mdio.h
5105+
F: include/uapi/linux/mdio.h
5106+
F: include/uapi/linux/mii.h
50995107

51005108
EXT2 FILE SYSTEM
51015109
M: Jan Kara <[email protected]>

drivers/net/bonding/bond_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2050,6 +2050,7 @@ static int bond_miimon_inspect(struct bonding *bond)
20502050
continue;
20512051

20522052
bond_propose_link_state(slave, BOND_LINK_FAIL);
2053+
commit++;
20532054
slave->delay = bond->params.downdelay;
20542055
if (slave->delay) {
20552056
netdev_info(bond->dev, "link status down for %sinterface %s, disabling it in %d ms\n",
@@ -2088,6 +2089,7 @@ static int bond_miimon_inspect(struct bonding *bond)
20882089
continue;
20892090

20902091
bond_propose_link_state(slave, BOND_LINK_BACK);
2092+
commit++;
20912093
slave->delay = bond->params.updelay;
20922094

20932095
if (slave->delay) {

drivers/net/ethernet/aurora/nb8800.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ static void nb8800_mac_config(struct net_device *dev)
609609
mac_mode |= HALF_DUPLEX;
610610

611611
if (gigabit) {
612-
if (priv->phy_mode == PHY_INTERFACE_MODE_RGMII)
612+
if (phy_interface_is_rgmii(dev->phydev))
613613
mac_mode |= RGMII_MODE;
614614

615615
mac_mode |= GMAC_MODE;
@@ -1268,11 +1268,10 @@ static int nb8800_tangox_init(struct net_device *dev)
12681268
break;
12691269

12701270
case PHY_INTERFACE_MODE_RGMII:
1271-
pad_mode = PAD_MODE_RGMII;
1272-
break;
1273-
1271+
case PHY_INTERFACE_MODE_RGMII_ID:
1272+
case PHY_INTERFACE_MODE_RGMII_RXID:
12741273
case PHY_INTERFACE_MODE_RGMII_TXID:
1275-
pad_mode = PAD_MODE_RGMII | PAD_MODE_GTX_CLK_DELAY;
1274+
pad_mode = PAD_MODE_RGMII;
12761275
break;
12771276

12781277
default:

drivers/net/ethernet/broadcom/genet/bcmgenet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3669,7 +3669,7 @@ static int bcmgenet_resume(struct device *d)
36693669

36703670
phy_init_hw(priv->phydev);
36713671
/* Speed settings must be restored */
3672-
bcmgenet_mii_config(priv->dev);
3672+
bcmgenet_mii_config(priv->dev, false);
36733673

36743674
/* disable ethernet MAC while updating its registers */
36753675
umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, false);

drivers/net/ethernet/broadcom/genet/bcmgenet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ GENET_IO_MACRO(rbuf, GENET_RBUF_OFF);
698698

699699
/* MDIO routines */
700700
int bcmgenet_mii_init(struct net_device *dev);
701-
int bcmgenet_mii_config(struct net_device *dev);
701+
int bcmgenet_mii_config(struct net_device *dev, bool init);
702702
int bcmgenet_mii_probe(struct net_device *dev);
703703
void bcmgenet_mii_exit(struct net_device *dev);
704704
void bcmgenet_mii_reset(struct net_device *dev);

drivers/net/ethernet/broadcom/genet/bcmmii.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv)
238238
bcmgenet_fixed_phy_link_update);
239239
}
240240

241-
int bcmgenet_mii_config(struct net_device *dev)
241+
int bcmgenet_mii_config(struct net_device *dev, bool init)
242242
{
243243
struct bcmgenet_priv *priv = netdev_priv(dev);
244244
struct phy_device *phydev = priv->phydev;
@@ -327,7 +327,8 @@ int bcmgenet_mii_config(struct net_device *dev)
327327
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
328328
}
329329

330-
dev_info_once(kdev, "configuring instance for %s\n", phy_name);
330+
if (init)
331+
dev_info(kdev, "configuring instance for %s\n", phy_name);
331332

332333
return 0;
333334
}
@@ -375,7 +376,7 @@ int bcmgenet_mii_probe(struct net_device *dev)
375376
* PHY speed which is needed for bcmgenet_mii_config() to configure
376377
* things appropriately.
377378
*/
378-
ret = bcmgenet_mii_config(dev);
379+
ret = bcmgenet_mii_config(dev, true);
379380
if (ret) {
380381
phy_disconnect(priv->phydev);
381382
return ret;

drivers/net/ethernet/cavium/thunder/thunder_bgx.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,30 @@ static void bgx_sgmii_change_link_state(struct lmac *lmac)
292292
u64 cmr_cfg;
293293
u64 port_cfg = 0;
294294
u64 misc_ctl = 0;
295+
bool tx_en, rx_en;
295296

296297
cmr_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_CMRX_CFG);
297-
cmr_cfg &= ~CMR_EN;
298+
tx_en = cmr_cfg & CMR_PKT_TX_EN;
299+
rx_en = cmr_cfg & CMR_PKT_RX_EN;
300+
cmr_cfg &= ~(CMR_PKT_RX_EN | CMR_PKT_TX_EN);
298301
bgx_reg_write(bgx, lmac->lmacid, BGX_CMRX_CFG, cmr_cfg);
299302

303+
/* Wait for BGX RX to be idle */
304+
if (bgx_poll_reg(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG,
305+
GMI_PORT_CFG_RX_IDLE, false)) {
306+
dev_err(&bgx->pdev->dev, "BGX%d LMAC%d GMI RX not idle\n",
307+
bgx->bgx_id, lmac->lmacid);
308+
return;
309+
}
310+
311+
/* Wait for BGX TX to be idle */
312+
if (bgx_poll_reg(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG,
313+
GMI_PORT_CFG_TX_IDLE, false)) {
314+
dev_err(&bgx->pdev->dev, "BGX%d LMAC%d GMI TX not idle\n",
315+
bgx->bgx_id, lmac->lmacid);
316+
return;
317+
}
318+
300319
port_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG);
301320
misc_ctl = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_PCS_MISCX_CTL);
302321

@@ -347,10 +366,8 @@ static void bgx_sgmii_change_link_state(struct lmac *lmac)
347366
bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_PCS_MISCX_CTL, misc_ctl);
348367
bgx_reg_write(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG, port_cfg);
349368

350-
port_cfg = bgx_reg_read(bgx, lmac->lmacid, BGX_GMP_GMI_PRTX_CFG);
351-
352-
/* Re-enable lmac */
353-
cmr_cfg |= CMR_EN;
369+
/* Restore CMR config settings */
370+
cmr_cfg |= (rx_en ? CMR_PKT_RX_EN : 0) | (tx_en ? CMR_PKT_TX_EN : 0);
354371
bgx_reg_write(bgx, lmac->lmacid, BGX_CMRX_CFG, cmr_cfg);
355372

356373
if (bgx->is_rgx && (cmr_cfg & (CMR_PKT_RX_EN | CMR_PKT_TX_EN)))

drivers/net/ethernet/cavium/thunder/thunder_bgx.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@
170170
#define GMI_PORT_CFG_DUPLEX BIT_ULL(2)
171171
#define GMI_PORT_CFG_SLOT_TIME BIT_ULL(3)
172172
#define GMI_PORT_CFG_SPEED_MSB BIT_ULL(8)
173+
#define GMI_PORT_CFG_RX_IDLE BIT_ULL(12)
174+
#define GMI_PORT_CFG_TX_IDLE BIT_ULL(13)
173175
#define BGX_GMP_GMI_RXX_JABBER 0x38038
174176
#define BGX_GMP_GMI_TXX_THRESH 0x38210
175177
#define BGX_GMP_GMI_TXX_APPEND 0x38218

drivers/net/ethernet/faraday/ftgmac100.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static int ftgmac100_reset_mac(struct ftgmac100 *priv, u32 maccr)
125125
iowrite32(maccr, priv->base + FTGMAC100_OFFSET_MACCR);
126126
iowrite32(maccr | FTGMAC100_MACCR_SW_RST,
127127
priv->base + FTGMAC100_OFFSET_MACCR);
128-
for (i = 0; i < 50; i++) {
128+
for (i = 0; i < 200; i++) {
129129
unsigned int maccr;
130130

131131
maccr = ioread32(priv->base + FTGMAC100_OFFSET_MACCR);
@@ -392,7 +392,7 @@ static int ftgmac100_alloc_rx_buf(struct ftgmac100 *priv, unsigned int entry,
392392
struct net_device *netdev = priv->netdev;
393393
struct sk_buff *skb;
394394
dma_addr_t map;
395-
int err;
395+
int err = 0;
396396

397397
skb = netdev_alloc_skb_ip_align(netdev, RX_BUF_SIZE);
398398
if (unlikely(!skb)) {
@@ -428,7 +428,7 @@ static int ftgmac100_alloc_rx_buf(struct ftgmac100 *priv, unsigned int entry,
428428
else
429429
rxdes->rxdes0 = 0;
430430

431-
return 0;
431+
return err;
432432
}
433433

434434
static unsigned int ftgmac100_next_rx_pointer(struct ftgmac100 *priv,
@@ -1682,6 +1682,7 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
16821682
priv->mii_bus->name = "ftgmac100_mdio";
16831683
snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%d",
16841684
pdev->name, pdev->id);
1685+
priv->mii_bus->parent = priv->dev;
16851686
priv->mii_bus->priv = priv->netdev;
16861687
priv->mii_bus->read = ftgmac100_mdiobus_read;
16871688
priv->mii_bus->write = ftgmac100_mdiobus_write;

drivers/net/ethernet/marvell/mv643xx_eth.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2734,7 +2734,7 @@ static int mv643xx_eth_shared_of_add_port(struct platform_device *pdev,
27342734
ppd.shared = pdev;
27352735

27362736
memset(&res, 0, sizeof(res));
2737-
if (!of_irq_to_resource(pnp, 0, &res)) {
2737+
if (of_irq_to_resource(pnp, 0, &res) <= 0) {
27382738
dev_err(&pdev->dev, "missing interrupt on %s\n", pnp->name);
27392739
return -EINVAL;
27402740
}

drivers/net/ethernet/mediatek/mtk_eth_soc.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <linux/if_vlan.h>
2323
#include <linux/reset.h>
2424
#include <linux/tcp.h>
25+
#include <linux/interrupt.h>
2526

2627
#include "mtk_eth_soc.h"
2728

@@ -947,6 +948,10 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
947948
RX_DMA_FPORT_MASK;
948949
mac--;
949950

951+
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
952+
!eth->netdev[mac]))
953+
goto release_desc;
954+
950955
netdev = eth->netdev[mac];
951956

952957
if (unlikely(test_bit(MTK_RESETTING, &eth->state)))

drivers/net/ethernet/mellanox/mlx5/core/cmd.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,10 @@ static void cb_timeout_handler(struct work_struct *work)
786786
mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
787787
}
788788

789+
static void free_msg(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *msg);
790+
static void mlx5_free_cmd_msg(struct mlx5_core_dev *dev,
791+
struct mlx5_cmd_msg *msg);
792+
789793
static void cmd_work_handler(struct work_struct *work)
790794
{
791795
struct mlx5_cmd_work_ent *ent = container_of(work, struct mlx5_cmd_work_ent, work);
@@ -796,17 +800,28 @@ static void cmd_work_handler(struct work_struct *work)
796800
struct semaphore *sem;
797801
unsigned long flags;
798802
bool poll_cmd = ent->polling;
803+
int alloc_ret;
799804

800805

801806
sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
802807
down(sem);
803808
if (!ent->page_queue) {
804-
ent->idx = alloc_ent(cmd);
805-
if (ent->idx < 0) {
809+
alloc_ret = alloc_ent(cmd);
810+
if (alloc_ret < 0) {
806811
mlx5_core_err(dev, "failed to allocate command entry\n");
812+
if (ent->callback) {
813+
ent->callback(-EAGAIN, ent->context);
814+
mlx5_free_cmd_msg(dev, ent->out);
815+
free_msg(dev, ent->in);
816+
free_cmd(ent);
817+
} else {
818+
ent->ret = -EAGAIN;
819+
complete(&ent->done);
820+
}
807821
up(sem);
808822
return;
809823
}
824+
ent->idx = alloc_ret;
810825
} else {
811826
ent->idx = cmd->max_reg_cmds;
812827
spin_lock_irqsave(&cmd->alloc_lock, flags);
@@ -967,7 +982,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
967982

968983
err = wait_func(dev, ent);
969984
if (err == -ETIMEDOUT)
970-
goto out_free;
985+
goto out;
971986

972987
ds = ent->ts2 - ent->ts1;
973988
op = MLX5_GET(mbox_in, in->first.data, opcode);
@@ -1430,6 +1445,7 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced)
14301445
mlx5_core_err(dev, "Command completion arrived after timeout (entry idx = %d).\n",
14311446
ent->idx);
14321447
free_ent(cmd, ent->idx);
1448+
free_cmd(ent);
14331449
}
14341450
continue;
14351451
}
@@ -1488,7 +1504,8 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced)
14881504
free_msg(dev, ent->in);
14891505

14901506
err = err ? err : ent->status;
1491-
free_cmd(ent);
1507+
if (!forced)
1508+
free_cmd(ent);
14921509
callback(err, context);
14931510
} else {
14941511
complete(&ent->done);

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,14 @@ struct mlx5e_dcbx {
266266
};
267267
#endif
268268

269+
#define MAX_PIN_NUM 8
270+
struct mlx5e_pps {
271+
u8 pin_caps[MAX_PIN_NUM];
272+
struct work_struct out_work;
273+
u64 start[MAX_PIN_NUM];
274+
u8 enabled;
275+
};
276+
269277
struct mlx5e_tstamp {
270278
rwlock_t lock;
271279
struct cyclecounter cycles;
@@ -277,7 +285,7 @@ struct mlx5e_tstamp {
277285
struct mlx5_core_dev *mdev;
278286
struct ptp_clock *ptp;
279287
struct ptp_clock_info ptp_info;
280-
u8 *pps_pin_caps;
288+
struct mlx5e_pps pps_info;
281289
};
282290

283291
enum {

0 commit comments

Comments
 (0)