* [PATCH net 0/6] ionic: code maintenance
@ 2023-02-02 1:29 Shannon Nelson
2023-02-02 1:29 ` [PATCH net 1/6] ionic: remove unnecessary indirection Shannon Nelson
` (5 more replies)
0 siblings, 6 replies; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:29 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Shannon Nelson
These are a few fixes for a hardware bug, a couple of sw bugs,
and a little code cleanup.
Allen Hubbe (1):
ionic: missed doorbell workaround
Neel Patel (1):
ionic: clean interrupt before enabling queue to avoid credit race
Shannon Nelson (4):
ionic: remove unnecessary indirection
ionic: remove unnecessary void casts
ionic: add check for NULL t/rxqcqs in reconfig
ionic: clear up notifyq alloc commentary
.../ethernet/pensando/ionic/ionic_bus_pci.c | 4 +-
.../net/ethernet/pensando/ionic/ionic_dev.c | 9 +-
.../net/ethernet/pensando/ionic/ionic_dev.h | 12 +++
.../net/ethernet/pensando/ionic/ionic_lif.c | 99 ++++++++++++++++---
.../net/ethernet/pensando/ionic/ionic_lif.h | 2 +
.../net/ethernet/pensando/ionic/ionic_main.c | 33 ++++++-
.../net/ethernet/pensando/ionic/ionic_phc.c | 2 +-
.../ethernet/pensando/ionic/ionic_rx_filter.c | 4 +-
.../net/ethernet/pensando/ionic/ionic_txrx.c | 87 +++++++++++++++-
9 files changed, 228 insertions(+), 24 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH net 1/6] ionic: remove unnecessary indirection
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
@ 2023-02-02 1:29 ` Shannon Nelson
2023-02-02 8:43 ` Leon Romanovsky
2023-02-02 1:29 ` [PATCH net 2/6] ionic: remove unnecessary void casts Shannon Nelson
` (4 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:29 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Shannon Nelson
We have the pointer already, don't need to go through the
lif struct for it.
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 4dd16c487f2b..8499165b1563 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -148,7 +148,7 @@ static void ionic_link_status_check(struct ionic_lif *lif)
mutex_lock(&lif->queue_lock);
err = ionic_start_queues(lif);
if (err && err != -EBUSY) {
- netdev_err(lif->netdev,
+ netdev_err(netdev,
"Failed to start queues: %d\n", err);
set_bit(IONIC_LIF_F_BROKEN, lif->state);
netif_carrier_off(lif->netdev);
@@ -2463,7 +2463,7 @@ static int ionic_set_vf_rate(struct net_device *netdev, int vf,
ret = ionic_set_vf_config(ionic, vf, &vfc);
if (!ret)
- lif->ionic->vfs[vf].maxrate = cpu_to_le32(tx_max);
+ ionic->vfs[vf].maxrate = cpu_to_le32(tx_max);
}
up_write(&ionic->vf_op_lock);
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net 2/6] ionic: remove unnecessary void casts
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
2023-02-02 1:29 ` [PATCH net 1/6] ionic: remove unnecessary indirection Shannon Nelson
@ 2023-02-02 1:29 ` Shannon Nelson
2023-02-02 8:43 ` Leon Romanovsky
2023-02-02 1:29 ` [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig Shannon Nelson
` (3 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:29 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Shannon Nelson
Minor Code cleanup details.
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c | 4 ++--
drivers/net/ethernet/pensando/ionic/ionic_main.c | 4 ++--
drivers/net/ethernet/pensando/ionic/ionic_phc.c | 2 +-
drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
index ce436e97324a..0eff78fa0565 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
@@ -121,7 +121,7 @@ static void ionic_vf_dealloc_locked(struct ionic *ionic)
if (v->stats_pa) {
vfc.stats_pa = 0;
- (void)ionic_set_vf_config(ionic, i, &vfc);
+ ionic_set_vf_config(ionic, i, &vfc);
dma_unmap_single(ionic->dev, v->stats_pa,
sizeof(v->stats), DMA_FROM_DEVICE);
v->stats_pa = 0;
@@ -169,7 +169,7 @@ static int ionic_vf_alloc(struct ionic *ionic, int num_vfs)
/* ignore failures from older FW, we just won't get stats */
vfc.stats_pa = cpu_to_le64(v->stats_pa);
- (void)ionic_set_vf_config(ionic, i, &vfc);
+ ionic_set_vf_config(ionic, i, &vfc);
}
out:
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
index a13530ec4dd8..79d4dfa9e07e 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
@@ -359,7 +359,7 @@ int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx,
break;
/* force a check of FW status and break out if FW reset */
- (void)ionic_heartbeat_check(lif->ionic);
+ ionic_heartbeat_check(lif->ionic);
if ((test_bit(IONIC_LIF_F_FW_RESET, lif->state) &&
!lif->ionic->idev.fw_status_ready) ||
test_bit(IONIC_LIF_F_FW_STOPPING, lif->state)) {
@@ -647,7 +647,7 @@ int ionic_port_init(struct ionic *ionic)
err = ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT);
ionic_dev_cmd_port_state(&ionic->idev, IONIC_PORT_ADMIN_STATE_UP);
- (void)ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT);
+ ionic_dev_cmd_wait(ionic, DEVCMD_TIMEOUT);
mutex_unlock(&ionic->dev_cmd_lock);
if (err) {
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_phc.c b/drivers/net/ethernet/pensando/ionic/ionic_phc.c
index 887046838b3b..eac2f0e3576e 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_phc.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_phc.c
@@ -268,7 +268,7 @@ static u64 ionic_hwstamp_read(struct ionic *ionic,
u32 tick_high_before, tick_high, tick_low;
/* read and discard low part to defeat hw staging of high part */
- (void)ioread32(&ionic->idev.hwstamp_regs->tick_low);
+ ioread32(&ionic->idev.hwstamp_regs->tick_low);
tick_high_before = ioread32(&ionic->idev.hwstamp_regs->tick_high);
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
index b7363376dfc8..1ee2f285cb42 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c
@@ -604,14 +604,14 @@ void ionic_rx_filter_sync(struct ionic_lif *lif)
* they can clear room for some new filters
*/
list_for_each_entry_safe(sync_item, spos, &sync_del_list, list) {
- (void)ionic_lif_filter_del(lif, &sync_item->f.cmd);
+ ionic_lif_filter_del(lif, &sync_item->f.cmd);
list_del(&sync_item->list);
devm_kfree(dev, sync_item);
}
list_for_each_entry_safe(sync_item, spos, &sync_add_list, list) {
- (void)ionic_lif_filter_add(lif, &sync_item->f.cmd);
+ ionic_lif_filter_add(lif, &sync_item->f.cmd);
list_del(&sync_item->list);
devm_kfree(dev, sync_item);
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
2023-02-02 1:29 ` [PATCH net 1/6] ionic: remove unnecessary indirection Shannon Nelson
2023-02-02 1:29 ` [PATCH net 2/6] ionic: remove unnecessary void casts Shannon Nelson
@ 2023-02-02 1:29 ` Shannon Nelson
2023-02-02 8:44 ` Leon Romanovsky
2023-02-02 18:05 ` Jakub Kicinski
2023-02-02 1:30 ` [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race Shannon Nelson
` (2 subsequent siblings)
5 siblings, 2 replies; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:29 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Shannon Nelson
Make sure there are qcqs to clean before trying to swap resources
or clean their interrupt assignments.
Fixes: 101b40a0171f ("ionic: change queue count with no reset")
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
.../net/ethernet/pensando/ionic/ionic_lif.c | 27 ++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 8499165b1563..c08d0762212c 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -2741,6 +2741,14 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,
sg_desc_sz = sizeof(struct ionic_txq_sg_desc);
for (i = 0; i < qparam->nxqs; i++) {
+ /* If missing, short placeholder qcq needed for swap */
+ if (!lif->txqcqs[i]) {
+ flags = IONIC_QCQ_F_TX_STATS | IONIC_QCQ_F_SG;
+ err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, i, "tx", flags,
+ 4, desc_sz, comp_sz, sg_desc_sz,
+ lif->kern_pid, &lif->txqcqs[i]);
+ }
+
flags = lif->txqcqs[i]->flags & ~IONIC_QCQ_F_INTR;
err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, i, "tx", flags,
num_desc, desc_sz, comp_sz, sg_desc_sz,
@@ -2760,6 +2768,14 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,
comp_sz *= 2;
for (i = 0; i < qparam->nxqs; i++) {
+ /* If missing, short placeholder qcq needed for swap */
+ if (!lif->rxqcqs[i]) {
+ flags = IONIC_QCQ_F_RX_STATS | IONIC_QCQ_F_SG;
+ err = ionic_qcq_alloc(lif, IONIC_QTYPE_RXQ, i, "rx", flags,
+ 4, desc_sz, comp_sz, sg_desc_sz,
+ lif->kern_pid, &lif->rxqcqs[i]);
+ }
+
flags = lif->rxqcqs[i]->flags & ~IONIC_QCQ_F_INTR;
err = ionic_qcq_alloc(lif, IONIC_QTYPE_RXQ, i, "rx", flags,
num_desc, desc_sz, comp_sz, sg_desc_sz,
@@ -2809,10 +2825,15 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,
lif->tx_coalesce_hw = lif->rx_coalesce_hw;
}
- /* clear existing interrupt assignments */
+ /* Clear existing interrupt assignments. We check for NULL here
+ * because we're checking the whole array for potential qcqs, not
+ * just those qcqs that have just been set up.
+ */
for (i = 0; i < lif->ionic->ntxqs_per_lif; i++) {
- ionic_qcq_intr_free(lif, lif->txqcqs[i]);
- ionic_qcq_intr_free(lif, lif->rxqcqs[i]);
+ if (lif->txqcqs[i])
+ ionic_qcq_intr_free(lif, lif->txqcqs[i]);
+ if (lif->rxqcqs[i])
+ ionic_qcq_intr_free(lif, lif->rxqcqs[i]);
}
/* re-assign the interrupts */
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
` (2 preceding siblings ...)
2023-02-02 1:29 ` [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig Shannon Nelson
@ 2023-02-02 1:30 ` Shannon Nelson
2023-02-02 8:46 ` Leon Romanovsky
2023-02-02 1:30 ` [PATCH net 5/6] ionic: clear up notifyq alloc commentary Shannon Nelson
2023-02-02 1:30 ` [PATCH net 6/6] ionic: missed doorbell workaround Shannon Nelson
5 siblings, 1 reply; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:30 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Neel Patel, Shannon Nelson
From: Neel Patel <neel.patel@amd.com>
Clear the interrupt credits before enabling the queue rather
than after to be sure that the enabled queue starts at 0 and
that we don't wipe away possible credits after enabling the
queue.
Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
Signed-off-by: Neel Patel <neel.patel@amd.com>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index c08d0762212c..90a3ad4a6ea0 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -269,6 +269,7 @@ static int ionic_qcq_enable(struct ionic_qcq *qcq)
.oper = IONIC_Q_ENABLE,
},
};
+ int ret;
idev = &lif->ionic->idev;
dev = lif->ionic->dev;
@@ -276,16 +277,24 @@ static int ionic_qcq_enable(struct ionic_qcq *qcq)
dev_dbg(dev, "q_enable.index %d q_enable.qtype %d\n",
ctx.cmd.q_control.index, ctx.cmd.q_control.type);
+ if (qcq->flags & IONIC_QCQ_F_INTR)
+ ionic_intr_clean(idev->intr_ctrl, qcq->intr.index);
+
+ ret = ionic_adminq_post_wait(lif, &ctx);
+ if (ret)
+ return ret;
+
+ if (qcq->napi.poll)
+ napi_enable(&qcq->napi);
+
if (qcq->flags & IONIC_QCQ_F_INTR) {
irq_set_affinity_hint(qcq->intr.vector,
&qcq->intr.affinity_mask);
- napi_enable(&qcq->napi);
- ionic_intr_clean(idev->intr_ctrl, qcq->intr.index);
ionic_intr_mask(idev->intr_ctrl, qcq->intr.index,
IONIC_INTR_MASK_CLEAR);
}
- return ionic_adminq_post_wait(lif, &ctx);
+ return 0;
}
static int ionic_qcq_disable(struct ionic_lif *lif, struct ionic_qcq *qcq, int fw_err)
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net 5/6] ionic: clear up notifyq alloc commentary
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
` (3 preceding siblings ...)
2023-02-02 1:30 ` [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race Shannon Nelson
@ 2023-02-02 1:30 ` Shannon Nelson
2023-02-02 8:46 ` Leon Romanovsky
2023-02-02 1:30 ` [PATCH net 6/6] ionic: missed doorbell workaround Shannon Nelson
5 siblings, 1 reply; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:30 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Shannon Nelson
Make sure the q+cq alloc for NotifyQ is clearly documented
and don't bother with unnecessary local variables.
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
drivers/net/ethernet/pensando/ionic/ionic_lif.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 90a3ad4a6ea0..486fc0bcc0ad 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -573,13 +573,15 @@ static int ionic_qcq_alloc(struct ionic_lif *lif, unsigned int type,
}
if (flags & IONIC_QCQ_F_NOTIFYQ) {
- int q_size, cq_size;
+ int q_size;
- /* q & cq need to be contiguous in case of notifyq */
+ /* q & cq need to be contiguous in NotifyQ, so alloc it all in q
+ * and don't alloc qc. We leave new->qc_size and new->qc_base
+ * as 0 to be sure we don't try to free it later.
+ */
q_size = ALIGN(num_descs * desc_size, PAGE_SIZE);
- cq_size = ALIGN(num_descs * cq_desc_size, PAGE_SIZE);
-
- new->q_size = PAGE_SIZE + q_size + cq_size;
+ new->q_size = PAGE_SIZE + q_size +
+ ALIGN(num_descs * cq_desc_size, PAGE_SIZE);
new->q_base = dma_alloc_coherent(dev, new->q_size,
&new->q_base_pa, GFP_KERNEL);
if (!new->q_base) {
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net 6/6] ionic: missed doorbell workaround
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
` (4 preceding siblings ...)
2023-02-02 1:30 ` [PATCH net 5/6] ionic: clear up notifyq alloc commentary Shannon Nelson
@ 2023-02-02 1:30 ` Shannon Nelson
5 siblings, 0 replies; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 1:30 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: drivers, Allen Hubbe, Shannon Nelson
From: Allen Hubbe <allenbh@pensando.io>
In one version of the HW there is a remote possibility that it
will miss the doorbell ring. This adds a bit of protection to
be sure we don't stall a queue from a missed doorbell.
Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
Signed-off-by: Allen Hubbe <allenbh@pensando.io>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
---
.../net/ethernet/pensando/ionic/ionic_dev.c | 9 +-
.../net/ethernet/pensando/ionic/ionic_dev.h | 12 +++
.../net/ethernet/pensando/ionic/ionic_lif.c | 41 ++++++++-
.../net/ethernet/pensando/ionic/ionic_lif.h | 2 +
.../net/ethernet/pensando/ionic/ionic_main.c | 29 +++++++
.../net/ethernet/pensando/ionic/ionic_txrx.c | 87 ++++++++++++++++++-
6 files changed, 176 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.c b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
index 626b9113e7c4..d911f4fd9af6 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.c
@@ -708,9 +708,16 @@ void ionic_q_post(struct ionic_queue *q, bool ring_doorbell, ionic_desc_cb cb,
q->lif->index, q->name, q->hw_type, q->hw_index,
q->head_idx, ring_doorbell);
- if (ring_doorbell)
+ if (ring_doorbell) {
ionic_dbell_ring(lif->kern_dbpage, q->hw_type,
q->dbval | q->head_idx);
+
+ q->dbell_jiffies = jiffies;
+
+ if (q_to_qcq(q)->napi_qcq)
+ mod_timer(&q_to_qcq(q)->napi_qcq->napi_deadline,
+ jiffies + IONIC_NAPI_DEADLINE);
+ }
}
static bool ionic_q_is_posted(struct ionic_queue *q, unsigned int pos)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.h b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
index 2a1d7b9c07e7..bce3ca38669b 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_dev.h
+++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.h
@@ -25,6 +25,12 @@
#define IONIC_DEV_INFO_REG_COUNT 32
#define IONIC_DEV_CMD_REG_COUNT 32
+#define IONIC_NAPI_DEADLINE (HZ / 200) /* 5ms */
+#define IONIC_ADMIN_DOORBELL_DEADLINE (HZ / 2) /* 500ms */
+#define IONIC_TX_DOORBELL_DEADLINE (HZ / 100) /* 10ms */
+#define IONIC_RX_MIN_DOORBELL_DEADLINE (HZ / 100) /* 10ms */
+#define IONIC_RX_MAX_DOORBELL_DEADLINE (HZ * 5) /* 5s */
+
struct ionic_dev_bar {
void __iomem *vaddr;
phys_addr_t bus_addr;
@@ -216,6 +222,8 @@ struct ionic_queue {
struct ionic_lif *lif;
struct ionic_desc_info *info;
u64 dbval;
+ unsigned long dbell_deadline;
+ unsigned long dbell_jiffies;
u16 head_idx;
u16 tail_idx;
unsigned int index;
@@ -361,4 +369,8 @@ void ionic_q_service(struct ionic_queue *q, struct ionic_cq_info *cq_info,
int ionic_heartbeat_check(struct ionic *ionic);
bool ionic_is_fw_running(struct ionic_dev *idev);
+bool ionic_adminq_poke_doorbell(struct ionic_queue *q);
+bool ionic_txq_poke_doorbell(struct ionic_queue *q);
+bool ionic_rxq_poke_doorbell(struct ionic_queue *q);
+
#endif /* _IONIC_DEV_H_ */
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 486fc0bcc0ad..5ccb32005765 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -16,6 +16,7 @@
#include "ionic.h"
#include "ionic_bus.h"
+#include "ionic_dev.h"
#include "ionic_lif.h"
#include "ionic_txrx.h"
#include "ionic_ethtool.h"
@@ -200,6 +201,13 @@ void ionic_link_status_check_request(struct ionic_lif *lif, bool can_sleep)
}
}
+static void ionic_napi_deadline(struct timer_list *timer)
+{
+ struct ionic_qcq *qcq = container_of(timer, struct ionic_qcq, napi_deadline);
+
+ napi_schedule(&qcq->napi);
+}
+
static irqreturn_t ionic_isr(int irq, void *data)
{
struct napi_struct *napi = data;
@@ -325,6 +333,7 @@ static int ionic_qcq_disable(struct ionic_lif *lif, struct ionic_qcq *qcq, int f
synchronize_irq(qcq->intr.vector);
irq_set_affinity_hint(qcq->intr.vector, NULL);
napi_disable(&qcq->napi);
+ del_timer_sync(&qcq->napi_deadline);
}
/* If there was a previous fw communcation error, don't bother with
@@ -460,6 +469,7 @@ static void ionic_link_qcq_interrupts(struct ionic_qcq *src_qcq,
n_qcq->intr.vector = src_qcq->intr.vector;
n_qcq->intr.index = src_qcq->intr.index;
+ n_qcq->napi_qcq = src_qcq->napi_qcq;
}
static int ionic_alloc_qcq_interrupt(struct ionic_lif *lif, struct ionic_qcq *qcq)
@@ -784,8 +794,14 @@ static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
dev_dbg(dev, "txq->hw_type %d\n", q->hw_type);
dev_dbg(dev, "txq->hw_index %d\n", q->hw_index);
- if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state))
+ q->dbell_deadline = IONIC_TX_DOORBELL_DEADLINE;
+ q->dbell_jiffies = jiffies;
+
+ if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) {
netif_napi_add(lif->netdev, &qcq->napi, ionic_tx_napi);
+ qcq->napi_qcq = qcq;
+ timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
+ }
qcq->flags |= IONIC_QCQ_F_INITED;
@@ -839,11 +855,17 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
dev_dbg(dev, "rxq->hw_type %d\n", q->hw_type);
dev_dbg(dev, "rxq->hw_index %d\n", q->hw_index);
+ q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE;
+ q->dbell_jiffies = jiffies;
+
if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state))
netif_napi_add(lif->netdev, &qcq->napi, ionic_rx_napi);
else
netif_napi_add(lif->netdev, &qcq->napi, ionic_txrx_napi);
+ qcq->napi_qcq = qcq;
+ timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
+
qcq->flags |= IONIC_QCQ_F_INITED;
return 0;
@@ -1161,6 +1183,7 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
struct ionic_dev *idev = &lif->ionic->idev;
unsigned long irqflags;
unsigned int flags = 0;
+ bool resched = false;
int rx_work = 0;
int tx_work = 0;
int n_work = 0;
@@ -1198,6 +1221,16 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
ionic_intr_credits(idev->intr_ctrl, intr->index, credits, flags);
}
+ if (!a_work && ionic_adminq_poke_doorbell(&lif->adminqcq->q))
+ resched = true;
+ if (lif->hwstamp_rxq && !rx_work && ionic_rxq_poke_doorbell(&lif->hwstamp_rxq->q))
+ resched = true;
+ if (lif->hwstamp_txq && !tx_work && ionic_txq_poke_doorbell(&lif->hwstamp_txq->q))
+ resched = true;
+ if (resched)
+ mod_timer(&lif->adminqcq->napi_deadline,
+ jiffies + IONIC_NAPI_DEADLINE);
+
return work_done;
}
@@ -3277,8 +3310,14 @@ static int ionic_lif_adminq_init(struct ionic_lif *lif)
dev_dbg(dev, "adminq->hw_type %d\n", q->hw_type);
dev_dbg(dev, "adminq->hw_index %d\n", q->hw_index);
+ q->dbell_deadline = IONIC_ADMIN_DOORBELL_DEADLINE;
+ q->dbell_jiffies = jiffies;
+
netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi);
+ qcq->napi_qcq = qcq;
+ timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
+
napi_enable(&qcq->napi);
if (qcq->flags & IONIC_QCQ_F_INTR)
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.h b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
index a53984bf3544..734519895614 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.h
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.h
@@ -74,8 +74,10 @@ struct ionic_qcq {
struct ionic_queue q;
struct ionic_cq cq;
struct ionic_intr_info intr;
+ struct timer_list napi_deadline;
struct napi_struct napi;
unsigned int flags;
+ struct ionic_qcq *napi_qcq;
struct dentry *dentry;
};
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c
index 79d4dfa9e07e..1dc79cecc5cc 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_main.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c
@@ -289,6 +289,35 @@ static void ionic_adminq_cb(struct ionic_queue *q,
complete_all(&ctx->work);
}
+bool ionic_adminq_poke_doorbell(struct ionic_queue *q)
+{
+ struct ionic_lif *lif = q->lif;
+ unsigned long now, then, dif;
+ unsigned long irqflags;
+
+ spin_lock_irqsave(&lif->adminq_lock, irqflags);
+
+ if (q->tail_idx == q->head_idx) {
+ spin_unlock_irqrestore(&lif->adminq_lock, irqflags);
+ return false;
+ }
+
+ now = READ_ONCE(jiffies);
+ then = q->dbell_jiffies;
+ dif = now - then;
+
+ if (dif > q->dbell_deadline) {
+ ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
+ q->dbval | q->head_idx);
+
+ q->dbell_jiffies = now;
+ }
+
+ spin_unlock_irqrestore(&lif->adminq_lock, irqflags);
+
+ return true;
+}
+
int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
{
struct ionic_desc_info *desc_info;
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
index 0c3977416cd1..f761780f0162 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c
@@ -22,6 +22,67 @@ static inline void ionic_rxq_post(struct ionic_queue *q, bool ring_dbell,
ionic_q_post(q, ring_dbell, cb_func, cb_arg);
}
+bool ionic_txq_poke_doorbell(struct ionic_queue *q)
+{
+ unsigned long now, then, dif;
+ struct netdev_queue *netdev_txq;
+ struct net_device *netdev;
+
+ netdev = q->lif->netdev;
+ netdev_txq = netdev_get_tx_queue(netdev, q->index);
+
+ HARD_TX_LOCK(netdev, netdev_txq, smp_processor_id());
+
+ if (q->tail_idx == q->head_idx) {
+ HARD_TX_UNLOCK(netdev, netdev_txq);
+ return false;
+ }
+
+ now = READ_ONCE(jiffies);
+ then = q->dbell_jiffies;
+ dif = now - then;
+
+ if (dif > q->dbell_deadline) {
+ ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
+ q->dbval | q->head_idx);
+
+ q->dbell_jiffies = now;
+ }
+
+ HARD_TX_UNLOCK(netdev, netdev_txq);
+
+ return true;
+}
+
+bool ionic_rxq_poke_doorbell(struct ionic_queue *q)
+{
+ unsigned long now, then, dif;
+
+ /* no lock, called from rx napi or txrx napi, nothing else can fill */
+
+ if (q->tail_idx == q->head_idx)
+ return false;
+
+ now = READ_ONCE(jiffies);
+ then = q->dbell_jiffies;
+ dif = now - then;
+
+ if (dif > q->dbell_deadline) {
+ ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
+ q->dbval | q->head_idx);
+
+ q->dbell_jiffies = now;
+
+ dif = 2 * q->dbell_deadline;
+ if (dif > IONIC_RX_MAX_DOORBELL_DEADLINE)
+ dif = IONIC_RX_MAX_DOORBELL_DEADLINE;
+
+ q->dbell_deadline = dif;
+ }
+
+ return true;
+}
+
static inline struct netdev_queue *q_to_ndq(struct ionic_queue *q)
{
return netdev_get_tx_queue(q->lif->netdev, q->index);
@@ -424,6 +485,12 @@ void ionic_rx_fill(struct ionic_queue *q)
ionic_dbell_ring(q->lif->kern_dbpage, q->hw_type,
q->dbval | q->head_idx);
+
+ q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE;
+ q->dbell_jiffies = jiffies;
+
+ mod_timer(&q_to_qcq(q)->napi_qcq->napi_deadline,
+ jiffies + IONIC_NAPI_DEADLINE);
}
void ionic_rx_empty(struct ionic_queue *q)
@@ -511,6 +578,9 @@ int ionic_tx_napi(struct napi_struct *napi, int budget)
work_done, flags);
}
+ if (!work_done && ionic_txq_poke_doorbell(&qcq->q))
+ mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+
return work_done;
}
@@ -544,23 +614,29 @@ int ionic_rx_napi(struct napi_struct *napi, int budget)
work_done, flags);
}
+ if (!work_done && ionic_rxq_poke_doorbell(&qcq->q))
+ mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+
return work_done;
}
int ionic_txrx_napi(struct napi_struct *napi, int budget)
{
- struct ionic_qcq *qcq = napi_to_qcq(napi);
+ struct ionic_qcq *rxqcq = napi_to_qcq(napi);
struct ionic_cq *rxcq = napi_to_cq(napi);
unsigned int qi = rxcq->bound_q->index;
+ struct ionic_qcq *txqcq;
struct ionic_dev *idev;
struct ionic_lif *lif;
struct ionic_cq *txcq;
+ bool resched = false;
u32 rx_work_done = 0;
u32 tx_work_done = 0;
u32 flags = 0;
lif = rxcq->bound_q->lif;
idev = &lif->ionic->idev;
+ txqcq = lif->txqcqs[qi];
txcq = &lif->txqcqs[qi]->cq;
tx_work_done = ionic_cq_service(txcq, IONIC_TX_BUDGET_DEFAULT,
@@ -572,7 +648,7 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
ionic_rx_fill(rxcq->bound_q);
if (rx_work_done < budget && napi_complete_done(napi, rx_work_done)) {
- ionic_dim_update(qcq, 0);
+ ionic_dim_update(rxqcq, 0);
flags |= IONIC_INTR_CRED_UNMASK;
rxcq->bound_intr->rearm_count++;
}
@@ -583,6 +659,13 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
tx_work_done + rx_work_done, flags);
}
+ if (!rx_work_done && ionic_rxq_poke_doorbell(&rxqcq->q))
+ resched = true;
+ if (!tx_work_done && ionic_txq_poke_doorbell(&txqcq->q))
+ resched = true;
+ if (resched)
+ mod_timer(&rxqcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+
return rx_work_done;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH net 1/6] ionic: remove unnecessary indirection
2023-02-02 1:29 ` [PATCH net 1/6] ionic: remove unnecessary indirection Shannon Nelson
@ 2023-02-02 8:43 ` Leon Romanovsky
0 siblings, 0 replies; 16+ messages in thread
From: Leon Romanovsky @ 2023-02-02 8:43 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, kuba, drivers
On Wed, Feb 01, 2023 at 05:29:57PM -0800, Shannon Nelson wrote:
> We have the pointer already, don't need to go through the
> lif struct for it.
>
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
> ---
> drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
It is not net material.
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 2/6] ionic: remove unnecessary void casts
2023-02-02 1:29 ` [PATCH net 2/6] ionic: remove unnecessary void casts Shannon Nelson
@ 2023-02-02 8:43 ` Leon Romanovsky
0 siblings, 0 replies; 16+ messages in thread
From: Leon Romanovsky @ 2023-02-02 8:43 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, kuba, drivers
On Wed, Feb 01, 2023 at 05:29:58PM -0800, Shannon Nelson wrote:
> Minor Code cleanup details.
>
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
> ---
> drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c | 4 ++--
> drivers/net/ethernet/pensando/ionic/ionic_main.c | 4 ++--
> drivers/net/ethernet/pensando/ionic/ionic_phc.c | 2 +-
> drivers/net/ethernet/pensando/ionic/ionic_rx_filter.c | 4 ++--
> 4 files changed, 7 insertions(+), 7 deletions(-)
>
It is not net material.
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 1:29 ` [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig Shannon Nelson
@ 2023-02-02 8:44 ` Leon Romanovsky
2023-02-02 18:05 ` Jakub Kicinski
1 sibling, 0 replies; 16+ messages in thread
From: Leon Romanovsky @ 2023-02-02 8:44 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, kuba, drivers
On Wed, Feb 01, 2023 at 05:29:59PM -0800, Shannon Nelson wrote:
> Make sure there are qcqs to clean before trying to swap resources
> or clean their interrupt assignments.
>
> Fixes: 101b40a0171f ("ionic: change queue count with no reset")
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
> ---
> .../net/ethernet/pensando/ionic/ionic_lif.c | 27 ++++++++++++++++---
> 1 file changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
> index 8499165b1563..c08d0762212c 100644
> --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
> +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
> @@ -2741,6 +2741,14 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,
> sg_desc_sz = sizeof(struct ionic_txq_sg_desc);
>
> for (i = 0; i < qparam->nxqs; i++) {
> + /* If missing, short placeholder qcq needed for swap */
> + if (!lif->txqcqs[i]) {
> + flags = IONIC_QCQ_F_TX_STATS | IONIC_QCQ_F_SG;
> + err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, i, "tx", flags,
> + 4, desc_sz, comp_sz, sg_desc_sz,
> + lif->kern_pid, &lif->txqcqs[i]);
You are not checking return value, so you don't really need to store
returned value in err variable.
Thanks
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race
2023-02-02 1:30 ` [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race Shannon Nelson
@ 2023-02-02 8:46 ` Leon Romanovsky
0 siblings, 0 replies; 16+ messages in thread
From: Leon Romanovsky @ 2023-02-02 8:46 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, kuba, drivers, Neel Patel
On Wed, Feb 01, 2023 at 05:30:00PM -0800, Shannon Nelson wrote:
> From: Neel Patel <neel.patel@amd.com>
>
> Clear the interrupt credits before enabling the queue rather
> than after to be sure that the enabled queue starts at 0 and
> that we don't wipe away possible credits after enabling the
> queue.
>
> Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
> Signed-off-by: Neel Patel <neel.patel@amd.com>
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
> ---
> drivers/net/ethernet/pensando/ionic/ionic_lif.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 5/6] ionic: clear up notifyq alloc commentary
2023-02-02 1:30 ` [PATCH net 5/6] ionic: clear up notifyq alloc commentary Shannon Nelson
@ 2023-02-02 8:46 ` Leon Romanovsky
0 siblings, 0 replies; 16+ messages in thread
From: Leon Romanovsky @ 2023-02-02 8:46 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, kuba, drivers
On Wed, Feb 01, 2023 at 05:30:01PM -0800, Shannon Nelson wrote:
> Make sure the q+cq alloc for NotifyQ is clearly documented
> and don't bother with unnecessary local variables.
>
> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
> ---
> drivers/net/ethernet/pensando/ionic/ionic_lif.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 1:29 ` [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig Shannon Nelson
2023-02-02 8:44 ` Leon Romanovsky
@ 2023-02-02 18:05 ` Jakub Kicinski
2023-02-02 20:06 ` Shannon Nelson
1 sibling, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2023-02-02 18:05 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, drivers
On Wed, 1 Feb 2023 17:29:59 -0800 Shannon Nelson wrote:
> Make sure there are qcqs to clean before trying to swap resources
> or clean their interrupt assignments.
... Otherwise $what-may-happen
Bug fixes should come with an explanation of what the user-visible
misbehavior is
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 18:05 ` Jakub Kicinski
@ 2023-02-02 20:06 ` Shannon Nelson
2023-02-02 20:46 ` Jakub Kicinski
0 siblings, 1 reply; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 20:06 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: netdev, davem, drivers
On 2/2/23 10:05 AM, Jakub Kicinski wrote:
> On Wed, 1 Feb 2023 17:29:59 -0800 Shannon Nelson wrote:
>> Make sure there are qcqs to clean before trying to swap resources
>> or clean their interrupt assignments.
>
> ... Otherwise $what-may-happen
>
> Bug fixes should come with an explanation of what the user-visible
> misbehavior is
I can add some text here and post a v2.
Would you prefer I repost some of these as net-next rather than net as
Leon was suggesting, or keep this patchset together for v2? I have a
couple other larger net-next patches getting ready as well...
sln
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 20:06 ` Shannon Nelson
@ 2023-02-02 20:46 ` Jakub Kicinski
2023-02-02 20:55 ` Shannon Nelson
0 siblings, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2023-02-02 20:46 UTC (permalink / raw)
To: Shannon Nelson; +Cc: netdev, davem, drivers
On Thu, 2 Feb 2023 12:06:52 -0800 Shannon Nelson wrote:
> On 2/2/23 10:05 AM, Jakub Kicinski wrote:
> > On Wed, 1 Feb 2023 17:29:59 -0800 Shannon Nelson wrote:
> >> Make sure there are qcqs to clean before trying to swap resources
> >> or clean their interrupt assignments.
> >
> > ... Otherwise $what-may-happen
> >
> > Bug fixes should come with an explanation of what the user-visible
> > misbehavior is
>
> I can add some text here and post a v2.
>
> Would you prefer I repost some of these as net-next rather than net as
> Leon was suggesting, or keep this patchset together for v2? I have a
> couple other larger net-next patches getting ready as well...
I'm not sure what the user impact of the fixes is, but at a glance
splitting this into separate series makes most sense. We merge net
into net-next every Thu, so if there is a dependency the wait should
not be too long.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig
2023-02-02 20:46 ` Jakub Kicinski
@ 2023-02-02 20:55 ` Shannon Nelson
0 siblings, 0 replies; 16+ messages in thread
From: Shannon Nelson @ 2023-02-02 20:55 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: netdev, davem, drivers
On 2/2/23 12:46 PM, Jakub Kicinski wrote:
> On Thu, 2 Feb 2023 12:06:52 -0800 Shannon Nelson wrote:
>> On 2/2/23 10:05 AM, Jakub Kicinski wrote:
>>> On Wed, 1 Feb 2023 17:29:59 -0800 Shannon Nelson wrote:
>>>> Make sure there are qcqs to clean before trying to swap resources
>>>> or clean their interrupt assignments.
>>>
>>> ... Otherwise $what-may-happen
>>>
>>> Bug fixes should come with an explanation of what the user-visible
>>> misbehavior is
>>
>> I can add some text here and post a v2.
>>
>> Would you prefer I repost some of these as net-next rather than net as
>> Leon was suggesting, or keep this patchset together for v2? I have a
>> couple other larger net-next patches getting ready as well...
>
> I'm not sure what the user impact of the fixes is, but at a glance
> splitting this into separate series makes most sense. We merge net
> into net-next every Thu, so if there is a dependency the wait should
> not be too long.
Thanks. I'll resubmit 3 of these for net shortly, and pull the others
into the net-next list and send after I rebase tonight or tomorrow.
sln
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-02-02 20:55 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-02 1:29 [PATCH net 0/6] ionic: code maintenance Shannon Nelson
2023-02-02 1:29 ` [PATCH net 1/6] ionic: remove unnecessary indirection Shannon Nelson
2023-02-02 8:43 ` Leon Romanovsky
2023-02-02 1:29 ` [PATCH net 2/6] ionic: remove unnecessary void casts Shannon Nelson
2023-02-02 8:43 ` Leon Romanovsky
2023-02-02 1:29 ` [PATCH net 3/6] ionic: add check for NULL t/rxqcqs in reconfig Shannon Nelson
2023-02-02 8:44 ` Leon Romanovsky
2023-02-02 18:05 ` Jakub Kicinski
2023-02-02 20:06 ` Shannon Nelson
2023-02-02 20:46 ` Jakub Kicinski
2023-02-02 20:55 ` Shannon Nelson
2023-02-02 1:30 ` [PATCH net 4/6] ionic: clean interrupt before enabling queue to avoid credit race Shannon Nelson
2023-02-02 8:46 ` Leon Romanovsky
2023-02-02 1:30 ` [PATCH net 5/6] ionic: clear up notifyq alloc commentary Shannon Nelson
2023-02-02 8:46 ` Leon Romanovsky
2023-02-02 1:30 ` [PATCH net 6/6] ionic: missed doorbell workaround Shannon Nelson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).