Skip to content

Commit 67b0760

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Fix up several Kconfig dependencies in netfilter, from Martin Willi and Florian Westphal. 2) Memory leak in be2net driver, from Petr Oros. 3) Memory leak in E-Switch handling of mlx5 driver, from Raed Salem. 4) mlx5_attach_interface needs to check for errors, from Huy Nguyen. 5) tipc_release() needs to orphan the sock, from Cong Wang. 6) Need to program TxConfig register after TX/RX is enabled in r8169 driver, not beforehand, from Maciej S. Szmigiero. 7) Handle 64K PAGE_SIZE properly in ena driver, from Netanel Belgazal. 8) Fix crash regression in ip_do_fragment(), from Taehee Yoo. 9) syzbot can create conditions where kernel log is flooded with synflood warnings due to creation of many listening sockets, fix that. From Willem de Bruijn. 10) Fix RCU issues in rds socket layer, from Cong Wang. 11) Fix vlan matching in nfp driver, from Pieter Jansen van Vuuren. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (59 commits) nfp: flower: reject tunnel encap with ipv6 outer headers for offloading nfp: flower: fix vlan match by checking both vlan id and vlan pcp tipc: check return value of __tipc_dump_start() s390/qeth: don't dump past end of unknown HW header s390/qeth: use vzalloc for QUERY OAT buffer s390/qeth: switch on SG by default for IQD devices s390/qeth: indicate error when netdev allocation fails rds: fix two RCU related problems r8169: Clear RTL_FLAG_TASK_*_PENDING when clearing RTL_FLAG_TASK_ENABLED erspan: fix error handling for erspan tunnel erspan: return PACKET_REJECT when the appropriate tunnel is not found tcp: rate limit synflood warnings further MIPS: lantiq: dma: add dev pointer netfilter: xt_hashlimit: use s->file instead of s->private netfilter: nfnetlink_queue: Solve the NFQUEUE/conntrack clash for NF_REPEAT netfilter: cttimeout: ctnl_timeout_find_get() returns incorrect pointer to type netfilter: conntrack: timeout interface depend on CONFIG_NF_CONNTRACK_TIMEOUT netfilter: conntrack: reset tcp maxwin on re-register qmi_wwan: Support dynamic config on Quectel EP06 ethernet: renesas: convert to SPDX identifiers ...
2 parents 96eddb8 + 4851bfd commit 67b0760

Some content is hidden

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

68 files changed

+593
-400
lines changed

arch/mips/include/asm/mach-lantiq/xway/xway_dma.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ struct ltq_dma_channel {
4040
int desc; /* the current descriptor */
4141
struct ltq_dma_desc *desc_base; /* the descriptor base */
4242
int phys; /* physical addr */
43+
struct device *dev;
4344
};
4445

4546
enum {

arch/mips/lantiq/xway/dma.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ ltq_dma_alloc(struct ltq_dma_channel *ch)
130130
unsigned long flags;
131131

132132
ch->desc = 0;
133-
ch->desc_base = dma_zalloc_coherent(NULL,
133+
ch->desc_base = dma_zalloc_coherent(ch->dev,
134134
LTQ_DESC_NUM * LTQ_DESC_SIZE,
135135
&ch->phys, GFP_ATOMIC);
136136

@@ -182,7 +182,7 @@ ltq_dma_free(struct ltq_dma_channel *ch)
182182
if (!ch->desc_base)
183183
return;
184184
ltq_dma_close(ch);
185-
dma_free_coherent(NULL, LTQ_DESC_NUM * LTQ_DESC_SIZE,
185+
dma_free_coherent(ch->dev, LTQ_DESC_NUM * LTQ_DESC_SIZE,
186186
ch->desc_base, ch->phys);
187187
}
188188
EXPORT_SYMBOL_GPL(ltq_dma_free);

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

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -459,12 +459,12 @@ static void ena_com_handle_admin_completion(struct ena_com_admin_queue *admin_qu
459459
cqe = &admin_queue->cq.entries[head_masked];
460460

461461
/* Go over all the completions */
462-
while ((cqe->acq_common_descriptor.flags &
462+
while ((READ_ONCE(cqe->acq_common_descriptor.flags) &
463463
ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK) == phase) {
464464
/* Do not read the rest of the completion entry before the
465465
* phase bit was validated
466466
*/
467-
rmb();
467+
dma_rmb();
468468
ena_com_handle_single_admin_completion(admin_queue, cqe);
469469

470470
head_masked++;
@@ -627,17 +627,10 @@ static u32 ena_com_reg_bar_read32(struct ena_com_dev *ena_dev, u16 offset)
627627
mmio_read_reg |= mmio_read->seq_num &
628628
ENA_REGS_MMIO_REG_READ_REQ_ID_MASK;
629629

630-
/* make sure read_resp->req_id get updated before the hw can write
631-
* there
632-
*/
633-
wmb();
634-
635-
writel_relaxed(mmio_read_reg,
636-
ena_dev->reg_bar + ENA_REGS_MMIO_REG_READ_OFF);
630+
writel(mmio_read_reg, ena_dev->reg_bar + ENA_REGS_MMIO_REG_READ_OFF);
637631

638-
mmiowb();
639632
for (i = 0; i < timeout; i++) {
640-
if (read_resp->req_id == mmio_read->seq_num)
633+
if (READ_ONCE(read_resp->req_id) == mmio_read->seq_num)
641634
break;
642635

643636
udelay(1);
@@ -1796,8 +1789,13 @@ void ena_com_aenq_intr_handler(struct ena_com_dev *dev, void *data)
17961789
aenq_common = &aenq_e->aenq_common_desc;
17971790

17981791
/* Go over all the events */
1799-
while ((aenq_common->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK) ==
1800-
phase) {
1792+
while ((READ_ONCE(aenq_common->flags) &
1793+
ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK) == phase) {
1794+
/* Make sure the phase bit (ownership) is as expected before
1795+
* reading the rest of the descriptor.
1796+
*/
1797+
dma_rmb();
1798+
18011799
pr_debug("AENQ! Group[%x] Syndrom[%x] timestamp: [%llus]\n",
18021800
aenq_common->group, aenq_common->syndrom,
18031801
(u64)aenq_common->timestamp_low +

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ static inline struct ena_eth_io_rx_cdesc_base *ena_com_get_next_rx_cdesc(
5151
if (desc_phase != expected_phase)
5252
return NULL;
5353

54+
/* Make sure we read the rest of the descriptor after the phase bit
55+
* has been read
56+
*/
57+
dma_rmb();
58+
5459
return cdesc;
5560
}
5661

@@ -493,6 +498,7 @@ int ena_com_tx_comp_req_id_get(struct ena_com_io_cq *io_cq, u16 *req_id)
493498
if (cdesc_phase != expected_phase)
494499
return -EAGAIN;
495500

501+
dma_rmb();
496502
if (unlikely(cdesc->req_id >= io_cq->q_depth)) {
497503
pr_err("Invalid req id %d\n", cdesc->req_id);
498504
return -EINVAL;

drivers/net/ethernet/amazon/ena/ena_eth_com.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,7 @@ static inline int ena_com_sq_empty_space(struct ena_com_io_sq *io_sq)
107107
return io_sq->q_depth - 1 - cnt;
108108
}
109109

110-
static inline int ena_com_write_sq_doorbell(struct ena_com_io_sq *io_sq,
111-
bool relaxed)
110+
static inline int ena_com_write_sq_doorbell(struct ena_com_io_sq *io_sq)
112111
{
113112
u16 tail;
114113

@@ -117,10 +116,7 @@ static inline int ena_com_write_sq_doorbell(struct ena_com_io_sq *io_sq,
117116
pr_debug("write submission queue doorbell for queue: %d tail: %d\n",
118117
io_sq->qid, tail);
119118

120-
if (relaxed)
121-
writel_relaxed(tail, io_sq->db_addr);
122-
else
123-
writel(tail, io_sq->db_addr);
119+
writel(tail, io_sq->db_addr);
124120

125121
return 0;
126122
}

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

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ MODULE_DEVICE_TABLE(pci, ena_pci_tbl);
7676

7777
static int ena_rss_init_default(struct ena_adapter *adapter);
7878
static void check_for_admin_com_state(struct ena_adapter *adapter);
79-
static void ena_destroy_device(struct ena_adapter *adapter);
79+
static void ena_destroy_device(struct ena_adapter *adapter, bool graceful);
8080
static int ena_restore_device(struct ena_adapter *adapter);
8181

8282
static void ena_tx_timeout(struct net_device *dev)
@@ -461,7 +461,7 @@ static inline int ena_alloc_rx_page(struct ena_ring *rx_ring,
461461
return -ENOMEM;
462462
}
463463

464-
dma = dma_map_page(rx_ring->dev, page, 0, PAGE_SIZE,
464+
dma = dma_map_page(rx_ring->dev, page, 0, ENA_PAGE_SIZE,
465465
DMA_FROM_DEVICE);
466466
if (unlikely(dma_mapping_error(rx_ring->dev, dma))) {
467467
u64_stats_update_begin(&rx_ring->syncp);
@@ -478,7 +478,7 @@ static inline int ena_alloc_rx_page(struct ena_ring *rx_ring,
478478
rx_info->page_offset = 0;
479479
ena_buf = &rx_info->ena_buf;
480480
ena_buf->paddr = dma;
481-
ena_buf->len = PAGE_SIZE;
481+
ena_buf->len = ENA_PAGE_SIZE;
482482

483483
return 0;
484484
}
@@ -495,7 +495,7 @@ static void ena_free_rx_page(struct ena_ring *rx_ring,
495495
return;
496496
}
497497

498-
dma_unmap_page(rx_ring->dev, ena_buf->paddr, PAGE_SIZE,
498+
dma_unmap_page(rx_ring->dev, ena_buf->paddr, ENA_PAGE_SIZE,
499499
DMA_FROM_DEVICE);
500500

501501
__free_page(page);
@@ -551,14 +551,9 @@ static int ena_refill_rx_bufs(struct ena_ring *rx_ring, u32 num)
551551
rx_ring->qid, i, num);
552552
}
553553

554-
if (likely(i)) {
555-
/* Add memory barrier to make sure the desc were written before
556-
* issue a doorbell
557-
*/
558-
wmb();
559-
ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq, true);
560-
mmiowb();
561-
}
554+
/* ena_com_write_sq_doorbell issues a wmb() */
555+
if (likely(i))
556+
ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq);
562557

563558
rx_ring->next_to_use = next_to_use;
564559

@@ -916,10 +911,10 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
916911
do {
917912
dma_unmap_page(rx_ring->dev,
918913
dma_unmap_addr(&rx_info->ena_buf, paddr),
919-
PAGE_SIZE, DMA_FROM_DEVICE);
914+
ENA_PAGE_SIZE, DMA_FROM_DEVICE);
920915

921916
skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, rx_info->page,
922-
rx_info->page_offset, len, PAGE_SIZE);
917+
rx_info->page_offset, len, ENA_PAGE_SIZE);
923918

924919
netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
925920
"rx skb updated. len %d. data_len %d\n",
@@ -1900,7 +1895,7 @@ static int ena_close(struct net_device *netdev)
19001895
"Destroy failure, restarting device\n");
19011896
ena_dump_stats_to_dmesg(adapter);
19021897
/* rtnl lock already obtained in dev_ioctl() layer */
1903-
ena_destroy_device(adapter);
1898+
ena_destroy_device(adapter, false);
19041899
ena_restore_device(adapter);
19051900
}
19061901

@@ -2112,12 +2107,6 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
21122107
tx_ring->next_to_use = ENA_TX_RING_IDX_NEXT(next_to_use,
21132108
tx_ring->ring_size);
21142109

2115-
/* This WMB is aimed to:
2116-
* 1 - perform smp barrier before reading next_to_completion
2117-
* 2 - make sure the desc were written before trigger DB
2118-
*/
2119-
wmb();
2120-
21212110
/* stop the queue when no more space available, the packet can have up
21222111
* to sgl_size + 2. one for the meta descriptor and one for header
21232112
* (if the header is larger than tx_max_header_size).
@@ -2136,10 +2125,11 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
21362125
* stop the queue but meanwhile clean_tx_irq updates
21372126
* next_to_completion and terminates.
21382127
* The queue will remain stopped forever.
2139-
* To solve this issue this function perform rmb, check
2140-
* the wakeup condition and wake up the queue if needed.
2128+
* To solve this issue add a mb() to make sure that
2129+
* netif_tx_stop_queue() write is vissible before checking if
2130+
* there is additional space in the queue.
21412131
*/
2142-
smp_rmb();
2132+
smp_mb();
21432133

21442134
if (ena_com_sq_empty_space(tx_ring->ena_com_io_sq)
21452135
> ENA_TX_WAKEUP_THRESH) {
@@ -2151,8 +2141,10 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
21512141
}
21522142

21532143
if (netif_xmit_stopped(txq) || !skb->xmit_more) {
2154-
/* trigger the dma engine */
2155-
ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq, false);
2144+
/* trigger the dma engine. ena_com_write_sq_doorbell()
2145+
* has a mb
2146+
*/
2147+
ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq);
21562148
u64_stats_update_begin(&tx_ring->syncp);
21572149
tx_ring->tx_stats.doorbells++;
21582150
u64_stats_update_end(&tx_ring->syncp);
@@ -2550,20 +2542,24 @@ static int ena_enable_msix_and_set_admin_interrupts(struct ena_adapter *adapter,
25502542
return rc;
25512543
}
25522544

2553-
static void ena_destroy_device(struct ena_adapter *adapter)
2545+
static void ena_destroy_device(struct ena_adapter *adapter, bool graceful)
25542546
{
25552547
struct net_device *netdev = adapter->netdev;
25562548
struct ena_com_dev *ena_dev = adapter->ena_dev;
25572549
bool dev_up;
25582550

2551+
if (!test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
2552+
return;
2553+
25592554
netif_carrier_off(netdev);
25602555

25612556
del_timer_sync(&adapter->timer_service);
25622557

25632558
dev_up = test_bit(ENA_FLAG_DEV_UP, &adapter->flags);
25642559
adapter->dev_up_before_reset = dev_up;
25652560

2566-
ena_com_set_admin_running_state(ena_dev, false);
2561+
if (!graceful)
2562+
ena_com_set_admin_running_state(ena_dev, false);
25672563

25682564
if (test_bit(ENA_FLAG_DEV_UP, &adapter->flags))
25692565
ena_down(adapter);
@@ -2591,6 +2587,7 @@ static void ena_destroy_device(struct ena_adapter *adapter)
25912587
adapter->reset_reason = ENA_REGS_RESET_NORMAL;
25922588

25932589
clear_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
2590+
clear_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags);
25942591
}
25952592

25962593
static int ena_restore_device(struct ena_adapter *adapter)
@@ -2635,6 +2632,7 @@ static int ena_restore_device(struct ena_adapter *adapter)
26352632
}
26362633
}
26372634

2635+
set_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags);
26382636
mod_timer(&adapter->timer_service, round_jiffies(jiffies + HZ));
26392637
dev_err(&pdev->dev, "Device reset completed successfully\n");
26402638

@@ -2665,7 +2663,7 @@ static void ena_fw_reset_device(struct work_struct *work)
26652663
return;
26662664
}
26672665
rtnl_lock();
2668-
ena_destroy_device(adapter);
2666+
ena_destroy_device(adapter, false);
26692667
ena_restore_device(adapter);
26702668
rtnl_unlock();
26712669
}
@@ -3409,30 +3407,24 @@ static void ena_remove(struct pci_dev *pdev)
34093407
netdev->rx_cpu_rmap = NULL;
34103408
}
34113409
#endif /* CONFIG_RFS_ACCEL */
3412-
3413-
unregister_netdev(netdev);
34143410
del_timer_sync(&adapter->timer_service);
34153411

34163412
cancel_work_sync(&adapter->reset_task);
34173413

3418-
/* Reset the device only if the device is running. */
3419-
if (test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
3420-
ena_com_dev_reset(ena_dev, adapter->reset_reason);
3414+
unregister_netdev(netdev);
34213415

3422-
ena_free_mgmnt_irq(adapter);
3416+
/* If the device is running then we want to make sure the device will be
3417+
* reset to make sure no more events will be issued by the device.
3418+
*/
3419+
if (test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
3420+
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
34233421

3424-
ena_disable_msix(adapter);
3422+
rtnl_lock();
3423+
ena_destroy_device(adapter, true);
3424+
rtnl_unlock();
34253425

34263426
free_netdev(netdev);
34273427

3428-
ena_com_mmio_reg_read_request_destroy(ena_dev);
3429-
3430-
ena_com_abort_admin_commands(ena_dev);
3431-
3432-
ena_com_wait_for_abort_completion(ena_dev);
3433-
3434-
ena_com_admin_destroy(ena_dev);
3435-
34363428
ena_com_rss_destroy(ena_dev);
34373429

34383430
ena_com_delete_debug_area(ena_dev);
@@ -3467,7 +3459,7 @@ static int ena_suspend(struct pci_dev *pdev, pm_message_t state)
34673459
"ignoring device reset request as the device is being suspended\n");
34683460
clear_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
34693461
}
3470-
ena_destroy_device(adapter);
3462+
ena_destroy_device(adapter, true);
34713463
rtnl_unlock();
34723464
return 0;
34733465
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,4 +355,15 @@ void ena_dump_stats_to_buf(struct ena_adapter *adapter, u8 *buf);
355355

356356
int ena_get_sset_count(struct net_device *netdev, int sset);
357357

358+
/* The ENA buffer length fields is 16 bit long. So when PAGE_SIZE == 64kB the
359+
* driver passas 0.
360+
* Since the max packet size the ENA handles is ~9kB limit the buffer length to
361+
* 16kB.
362+
*/
363+
#if PAGE_SIZE > SZ_16K
364+
#define ENA_PAGE_SIZE SZ_16K
365+
#else
366+
#define ENA_PAGE_SIZE PAGE_SIZE
367+
#endif
368+
358369
#endif /* !(ENA_H) */

drivers/net/ethernet/emulex/benet/be_cmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4500,7 +4500,7 @@ int be_cmd_get_profile_config(struct be_adapter *adapter,
45004500
port_res->max_vfs += le16_to_cpu(pcie->num_vfs);
45014501
}
45024502
}
4503-
return status;
4503+
goto err;
45044504
}
45054505

45064506
pcie = be_get_pcie_desc(resp->func_param, desc_count,

drivers/net/ethernet/lantiq_etop.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ ltq_etop_hw_init(struct net_device *dev)
274274
struct ltq_etop_chan *ch = &priv->ch[i];
275275

276276
ch->idx = ch->dma.nr = i;
277+
ch->dma.dev = &priv->pdev->dev;
277278

278279
if (IS_TX(i)) {
279280
ltq_dma_alloc_tx(&ch->dma);

0 commit comments

Comments
 (0)