Skip to content

Commit b5ac3be

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "A little more than usual this time around. Been travelling, so that is part of it. Anyways, here are the highlights: 1) Deal with memcontrol races wrt. listener dismantle, from Eric Dumazet. 2) Handle page allocation failures properly in nfp driver, from Jaku Kicinski. 3) Fix memory leaks in macsec, from Sabrina Dubroca. 4) Fix crashes in pppol2tp_session_ioctl(), from Guillaume Nault. 5) Several fixes in bnxt_en driver, including preventing potential NVRAM parameter corruption from Michael Chan. 6) Fix for KRACK attacks in wireless, from Johannes Berg. 7) rtnetlink event generation fixes from Xin Long. 8) Deadlock in mlxsw driver, from Ido Schimmel. 9) Disallow arithmetic operations on context pointers in bpf, from Jakub Kicinski. 10) Missing sock_owned_by_user() check in sctp_icmp_redirect(), from Xin Long. 11) Only TCP is supported for sockmap, make that explicit with a check, from John Fastabend. 12) Fix IP options state races in DCCP and TCP, from Eric Dumazet. 13) Fix panic in packet_getsockopt(), also from Eric Dumazet. 14) Add missing locked in hv_sock layer, from Dexuan Cui. 15) Various aquantia bug fixes, including several statistics handling cures. From Igor Russkikh et al. 16) Fix arithmetic overflow in devmap code, from John Fastabend. 17) Fix busted socket memory accounting when we get a fault in the tcp zero copy paths. From Willem de Bruijn. 18) Don't leave opt->tot_len uninitialized in ipv6, from Eric Dumazet" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (106 commits) stmmac: Don't access tx_q->dirty_tx before netif_tx_lock ipv6: flowlabel: do not leave opt->tot_len with garbage of_mdio: Fix broken PHY IRQ in case of probe deferral textsearch: fix typos in library helpers rxrpc: Don't release call mutex on error pointer net: stmmac: Prevent infinite loop in get_rx_timestamp_status() net: stmmac: Fix stmmac_get_rx_hwtstamp() net: stmmac: Add missing call to dev_kfree_skb() mlxsw: spectrum_router: Configure TIGCR on init mlxsw: reg: Add Tunneling IPinIP General Configuration Register net: ethtool: remove error check for legacy setting transceiver type soreuseport: fix initialization race net: bridge: fix returning of vlan range op errors sock: correct sk_wmem_queued accounting on efault in tcp zerocopy bpf: add test cases to bpf selftests to cover all access tests bpf: fix pattern matches for direct packet access bpf: fix off by one for range markings with L{T, E} patterns bpf: devmap fix arithmetic overflow in bitmap_size calculation net: aquantia: Bad udp rate on default interrupt coalescing net: aquantia: Enable coalescing management via ethtool interface ...
2 parents e5f468b + 8d5f4b0 commit b5ac3be

File tree

113 files changed

+1735
-689
lines changed

Some content is hidden

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

113 files changed

+1735
-689
lines changed

drivers/net/can/flexcan.c

Lines changed: 76 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -182,22 +182,23 @@
182182
/* FLEXCAN hardware feature flags
183183
*
184184
* Below is some version info we got:
185-
* SOC Version IP-Version Glitch- [TR]WRN_INT Memory err RTR re-
186-
* Filter? connected? detection ception in MB
187-
* MX25 FlexCAN2 03.00.00.00 no no no no
188-
* MX28 FlexCAN2 03.00.04.00 yes yes no no
189-
* MX35 FlexCAN2 03.00.00.00 no no no no
190-
* MX53 FlexCAN2 03.00.00.00 yes no no no
191-
* MX6s FlexCAN3 10.00.12.00 yes yes no yes
192-
* VF610 FlexCAN3 ? no yes yes yes?
185+
* SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re-
186+
* Filter? connected? Passive detection ception in MB
187+
* MX25 FlexCAN2 03.00.00.00 no no ? no no
188+
* MX28 FlexCAN2 03.00.04.00 yes yes no no no
189+
* MX35 FlexCAN2 03.00.00.00 no no ? no no
190+
* MX53 FlexCAN2 03.00.00.00 yes no no no no
191+
* MX6s FlexCAN3 10.00.12.00 yes yes no no yes
192+
* VF610 FlexCAN3 ? no yes ? yes yes?
193193
*
194194
* Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected.
195195
*/
196-
#define FLEXCAN_QUIRK_BROKEN_ERR_STATE BIT(1) /* [TR]WRN_INT not connected */
196+
#define FLEXCAN_QUIRK_BROKEN_WERR_STATE BIT(1) /* [TR]WRN_INT not connected */
197197
#define FLEXCAN_QUIRK_DISABLE_RXFG BIT(2) /* Disable RX FIFO Global mask */
198198
#define FLEXCAN_QUIRK_ENABLE_EACEN_RRS BIT(3) /* Enable EACEN and RRS bit in ctrl2 */
199199
#define FLEXCAN_QUIRK_DISABLE_MECR BIT(4) /* Disable Memory error detection */
200200
#define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5) /* Use timestamp based offloading */
201+
#define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) /* No interrupt for error passive */
201202

202203
/* Structure of the message buffer */
203204
struct flexcan_mb {
@@ -281,14 +282,17 @@ struct flexcan_priv {
281282
};
282283

283284
static const struct flexcan_devtype_data fsl_p1010_devtype_data = {
284-
.quirks = FLEXCAN_QUIRK_BROKEN_ERR_STATE,
285+
.quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE |
286+
FLEXCAN_QUIRK_BROKEN_PERR_STATE,
285287
};
286288

287-
static const struct flexcan_devtype_data fsl_imx28_devtype_data;
289+
static const struct flexcan_devtype_data fsl_imx28_devtype_data = {
290+
.quirks = FLEXCAN_QUIRK_BROKEN_PERR_STATE,
291+
};
288292

289293
static const struct flexcan_devtype_data fsl_imx6q_devtype_data = {
290294
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
291-
FLEXCAN_QUIRK_USE_OFF_TIMESTAMP,
295+
FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE,
292296
};
293297

294298
static const struct flexcan_devtype_data fsl_vf610_devtype_data = {
@@ -335,6 +339,22 @@ static inline void flexcan_write(u32 val, void __iomem *addr)
335339
}
336340
#endif
337341

342+
static inline void flexcan_error_irq_enable(const struct flexcan_priv *priv)
343+
{
344+
struct flexcan_regs __iomem *regs = priv->regs;
345+
u32 reg_ctrl = (priv->reg_ctrl_default | FLEXCAN_CTRL_ERR_MSK);
346+
347+
flexcan_write(reg_ctrl, &regs->ctrl);
348+
}
349+
350+
static inline void flexcan_error_irq_disable(const struct flexcan_priv *priv)
351+
{
352+
struct flexcan_regs __iomem *regs = priv->regs;
353+
u32 reg_ctrl = (priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_MSK);
354+
355+
flexcan_write(reg_ctrl, &regs->ctrl);
356+
}
357+
338358
static inline int flexcan_transceiver_enable(const struct flexcan_priv *priv)
339359
{
340360
if (!priv->reg_xceiver)
@@ -713,6 +733,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
713733
struct flexcan_regs __iomem *regs = priv->regs;
714734
irqreturn_t handled = IRQ_NONE;
715735
u32 reg_iflag1, reg_esr;
736+
enum can_state last_state = priv->can.state;
716737

717738
reg_iflag1 = flexcan_read(&regs->iflag1);
718739

@@ -765,15 +786,55 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
765786
flexcan_write(reg_esr & FLEXCAN_ESR_ALL_INT, &regs->esr);
766787
}
767788

768-
/* state change interrupt */
769-
if (reg_esr & FLEXCAN_ESR_ERR_STATE)
789+
/* state change interrupt or broken error state quirk fix is enabled */
790+
if ((reg_esr & FLEXCAN_ESR_ERR_STATE) ||
791+
(priv->devtype_data->quirks & (FLEXCAN_QUIRK_BROKEN_WERR_STATE |
792+
FLEXCAN_QUIRK_BROKEN_PERR_STATE)))
770793
flexcan_irq_state(dev, reg_esr);
771794

772795
/* bus error IRQ - handle if bus error reporting is activated */
773796
if ((reg_esr & FLEXCAN_ESR_ERR_BUS) &&
774797
(priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
775798
flexcan_irq_bus_err(dev, reg_esr);
776799

800+
/* availability of error interrupt among state transitions in case
801+
* bus error reporting is de-activated and
802+
* FLEXCAN_QUIRK_BROKEN_PERR_STATE is enabled:
803+
* +--------------------------------------------------------------+
804+
* | +----------------------------------------------+ [stopped / |
805+
* | | | sleeping] -+
806+
* +-+-> active <-> warning <-> passive -> bus off -+
807+
* ___________^^^^^^^^^^^^_______________________________
808+
* disabled(1) enabled disabled
809+
*
810+
* (1): enabled if FLEXCAN_QUIRK_BROKEN_WERR_STATE is enabled
811+
*/
812+
if ((last_state != priv->can.state) &&
813+
(priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_PERR_STATE) &&
814+
!(priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) {
815+
switch (priv->can.state) {
816+
case CAN_STATE_ERROR_ACTIVE:
817+
if (priv->devtype_data->quirks &
818+
FLEXCAN_QUIRK_BROKEN_WERR_STATE)
819+
flexcan_error_irq_enable(priv);
820+
else
821+
flexcan_error_irq_disable(priv);
822+
break;
823+
824+
case CAN_STATE_ERROR_WARNING:
825+
flexcan_error_irq_enable(priv);
826+
break;
827+
828+
case CAN_STATE_ERROR_PASSIVE:
829+
case CAN_STATE_BUS_OFF:
830+
flexcan_error_irq_disable(priv);
831+
break;
832+
833+
default:
834+
break;
835+
}
836+
}
837+
777838
return handled;
778839
}
779840

@@ -887,7 +948,7 @@ static int flexcan_chip_start(struct net_device *dev)
887948
* on most Flexcan cores, too. Otherwise we don't get
888949
* any error warning or passive interrupts.
889950
*/
890-
if (priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_ERR_STATE ||
951+
if (priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_WERR_STATE ||
891952
priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
892953
reg_ctrl |= FLEXCAN_CTRL_ERR_MSK;
893954
else

drivers/net/can/usb/esd_usb2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ static void esd_usb2_rx_can_msg(struct esd_usb2_net_priv *priv,
333333
}
334334

335335
cf->can_id = id & ESD_IDMASK;
336-
cf->can_dlc = get_can_dlc(msg->msg.rx.dlc);
336+
cf->can_dlc = get_can_dlc(msg->msg.rx.dlc & ~ESD_RTR);
337337

338338
if (id & ESD_EXTID)
339339
cf->can_id |= CAN_EFF_FLAG;

drivers/net/can/usb/gs_usb.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,8 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
375375

376376
gs_free_tx_context(txc);
377377

378+
atomic_dec(&dev->active_tx_urbs);
379+
378380
netif_wake_queue(netdev);
379381
}
380382

@@ -463,14 +465,6 @@ static void gs_usb_xmit_callback(struct urb *urb)
463465
urb->transfer_buffer_length,
464466
urb->transfer_buffer,
465467
urb->transfer_dma);
466-
467-
atomic_dec(&dev->active_tx_urbs);
468-
469-
if (!netif_device_present(netdev))
470-
return;
471-
472-
if (netif_queue_stopped(netdev))
473-
netif_wake_queue(netdev);
474468
}
475469

476470
static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,

drivers/net/dsa/mv88e6060.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,14 @@ static int mv88e6060_setup(struct dsa_switch *ds)
214214

215215
static int mv88e6060_set_addr(struct dsa_switch *ds, u8 *addr)
216216
{
217-
/* Use the same MAC Address as FD Pause frames for all ports */
218-
REG_WRITE(REG_GLOBAL, GLOBAL_MAC_01, (addr[0] << 9) | addr[1]);
217+
u16 val = addr[0] << 8 | addr[1];
218+
219+
/* The multicast bit is always transmitted as a zero, so the switch uses
220+
* bit 8 for "DiffAddr", where 0 means all ports transmit the same SA.
221+
*/
222+
val &= 0xfeff;
223+
224+
REG_WRITE(REG_GLOBAL, GLOBAL_MAC_01, val);
219225
REG_WRITE(REG_GLOBAL, GLOBAL_MAC_23, (addr[2] << 8) | addr[3]);
220226
REG_WRITE(REG_GLOBAL, GLOBAL_MAC_45, (addr[4] << 8) | addr[5]);
221227

drivers/net/ethernet/amazon/ena/ena_ethtool.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,8 +742,8 @@ static void ena_get_channels(struct net_device *netdev,
742742
{
743743
struct ena_adapter *adapter = netdev_priv(netdev);
744744

745-
channels->max_rx = ENA_MAX_NUM_IO_QUEUES;
746-
channels->max_tx = ENA_MAX_NUM_IO_QUEUES;
745+
channels->max_rx = adapter->num_queues;
746+
channels->max_tx = adapter->num_queues;
747747
channels->max_other = 0;
748748
channels->max_combined = 0;
749749
channels->rx_count = adapter->num_queues;

drivers/net/ethernet/amazon/ena/ena_netdev.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -966,7 +966,7 @@ static inline void ena_rx_checksum(struct ena_ring *rx_ring,
966966
u64_stats_update_begin(&rx_ring->syncp);
967967
rx_ring->rx_stats.bad_csum++;
968968
u64_stats_update_end(&rx_ring->syncp);
969-
netif_err(rx_ring->adapter, rx_err, rx_ring->netdev,
969+
netif_dbg(rx_ring->adapter, rx_err, rx_ring->netdev,
970970
"RX IPv4 header checksum error\n");
971971
return;
972972
}
@@ -979,7 +979,7 @@ static inline void ena_rx_checksum(struct ena_ring *rx_ring,
979979
u64_stats_update_begin(&rx_ring->syncp);
980980
rx_ring->rx_stats.bad_csum++;
981981
u64_stats_update_end(&rx_ring->syncp);
982-
netif_err(rx_ring->adapter, rx_err, rx_ring->netdev,
982+
netif_dbg(rx_ring->adapter, rx_err, rx_ring->netdev,
983983
"RX L4 checksum error\n");
984984
skb->ip_summed = CHECKSUM_NONE;
985985
return;
@@ -3064,7 +3064,8 @@ static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
30643064
if (ena_dev->mem_bar)
30653065
devm_iounmap(&pdev->dev, ena_dev->mem_bar);
30663066

3067-
devm_iounmap(&pdev->dev, ena_dev->reg_bar);
3067+
if (ena_dev->reg_bar)
3068+
devm_iounmap(&pdev->dev, ena_dev->reg_bar);
30683069

30693070
release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
30703071
pci_release_selected_regions(pdev, release_bars);

drivers/net/ethernet/aquantia/atlantic/aq_cfg.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@
2222

2323
#define AQ_CFG_FORCE_LEGACY_INT 0U
2424

25-
#define AQ_CFG_IS_INTERRUPT_MODERATION_DEF 1U
26-
#define AQ_CFG_INTERRUPT_MODERATION_RATE_DEF 0xFFFFU
25+
#define AQ_CFG_INTERRUPT_MODERATION_OFF 0
26+
#define AQ_CFG_INTERRUPT_MODERATION_ON 1
27+
#define AQ_CFG_INTERRUPT_MODERATION_AUTO 0xFFFFU
28+
29+
#define AQ_CFG_INTERRUPT_MODERATION_USEC_MAX (0x1FF * 2)
30+
2731
#define AQ_CFG_IRQ_MASK 0x1FFU
2832

2933
#define AQ_CFG_VECS_MAX 8U

0 commit comments

Comments
 (0)