Skip to content

Commit

Permalink
net: mana: Add debug logs in MANA network driver
Browse files Browse the repository at this point in the history
Add more logs to assist in debugging and monitoring
driver behaviour, making it easier to identify potential
issues  during development and testing.

Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Link: https://patch.msgid.link/1739842455-23899-1-git-send-email-ernis@linux.microsoft.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Erni Sri Satya Vennela authored and Jakub Kicinski committed Feb 20, 2025
1 parent a60a27c commit 47dfd7a
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 20 deletions.
50 changes: 42 additions & 8 deletions drivers/net/ethernet/microsoft/mana/gdma_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -666,8 +666,11 @@ int mana_gd_create_hwc_queue(struct gdma_dev *gd,

gmi = &queue->mem_info;
err = mana_gd_alloc_memory(gc, spec->queue_size, gmi);
if (err)
if (err) {
dev_err(gc->dev, "GDMA queue type: %d, size: %u, gdma memory allocation err: %d\n",
spec->type, spec->queue_size, err);
goto free_q;
}

queue->head = 0;
queue->tail = 0;
Expand All @@ -688,6 +691,8 @@ int mana_gd_create_hwc_queue(struct gdma_dev *gd,
*queue_ptr = queue;
return 0;
out:
dev_err(gc->dev, "Failed to create queue type %d of size %u, err: %d\n",
spec->type, spec->queue_size, err);
mana_gd_free_memory(gmi);
free_q:
kfree(queue);
Expand Down Expand Up @@ -770,7 +775,13 @@ static int mana_gd_create_dma_region(struct gdma_dev *gd,
}

gmi->dma_region_handle = resp.dma_region_handle;
dev_dbg(gc->dev, "Created DMA region handle 0x%llx\n",
gmi->dma_region_handle);
out:
if (err)
dev_dbg(gc->dev,
"Failed to create DMA region of length: %u, page_type: %d, status: 0x%x, err: %d\n",
length, req->gdma_page_type, resp.hdr.status, err);
kfree(req);
return err;
}
Expand All @@ -793,8 +804,11 @@ int mana_gd_create_mana_eq(struct gdma_dev *gd,

gmi = &queue->mem_info;
err = mana_gd_alloc_memory(gc, spec->queue_size, gmi);
if (err)
if (err) {
dev_err(gc->dev, "GDMA queue type: %d, size: %u, gdma memory allocation err: %d\n",
spec->type, spec->queue_size, err);
goto free_q;
}

err = mana_gd_create_dma_region(gd, gmi);
if (err)
Expand All @@ -815,6 +829,8 @@ int mana_gd_create_mana_eq(struct gdma_dev *gd,
*queue_ptr = queue;
return 0;
out:
dev_err(gc->dev, "Failed to create queue type %d of size: %u, err: %d\n",
spec->type, spec->queue_size, err);
mana_gd_free_memory(gmi);
free_q:
kfree(queue);
Expand All @@ -841,8 +857,11 @@ int mana_gd_create_mana_wq_cq(struct gdma_dev *gd,

gmi = &queue->mem_info;
err = mana_gd_alloc_memory(gc, spec->queue_size, gmi);
if (err)
if (err) {
dev_err(gc->dev, "GDMA queue type: %d, size: %u, memory allocation err: %d\n",
spec->type, spec->queue_size, err);
goto free_q;
}

err = mana_gd_create_dma_region(gd, gmi);
if (err)
Expand All @@ -862,6 +881,8 @@ int mana_gd_create_mana_wq_cq(struct gdma_dev *gd,
*queue_ptr = queue;
return 0;
out:
dev_err(gc->dev, "Failed to create queue type %d of size: %u, err: %d\n",
spec->type, spec->queue_size, err);
mana_gd_free_memory(gmi);
free_q:
kfree(queue);
Expand Down Expand Up @@ -1157,8 +1178,11 @@ int mana_gd_post_and_ring(struct gdma_queue *queue,
int err;

err = mana_gd_post_work_request(queue, wqe_req, wqe_info);
if (err)
if (err) {
dev_err(gc->dev, "Failed to post work req from queue type %d of size %u (err=%d)\n",
queue->type, queue->queue_size, err);
return err;
}

mana_gd_wq_ring_doorbell(gc, queue);

Expand Down Expand Up @@ -1435,8 +1459,10 @@ static int mana_gd_setup(struct pci_dev *pdev)
mana_smc_init(&gc->shm_channel, gc->dev, gc->shm_base);

err = mana_gd_setup_irqs(pdev);
if (err)
if (err) {
dev_err(gc->dev, "Failed to setup IRQs: %d\n", err);
return err;
}

err = mana_hwc_create_channel(gc);
if (err)
Expand All @@ -1454,12 +1480,14 @@ static int mana_gd_setup(struct pci_dev *pdev)
if (err)
goto destroy_hwc;

dev_dbg(&pdev->dev, "mana gdma setup successful\n");
return 0;

destroy_hwc:
mana_hwc_destroy_channel(gc);
remove_irq:
mana_gd_remove_irqs(pdev);
dev_err(&pdev->dev, "%s failed (error %d)\n", __func__, err);
return err;
}

Expand All @@ -1470,6 +1498,7 @@ static void mana_gd_cleanup(struct pci_dev *pdev)
mana_hwc_destroy_channel(gc);

mana_gd_remove_irqs(pdev);
dev_dbg(&pdev->dev, "mana gdma cleanup successful\n");
}

static bool mana_is_pf(unsigned short dev_id)
Expand All @@ -1488,8 +1517,10 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
BUILD_BUG_ON(2 * MAX_PORTS_IN_MANA_DEV * GDMA_EQE_SIZE > EQ_SIZE);

err = pci_enable_device(pdev);
if (err)
if (err) {
dev_err(&pdev->dev, "Failed to enable pci device (err=%d)\n", err);
return -ENXIO;
}

pci_set_master(pdev);

Expand All @@ -1498,9 +1529,10 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto disable_dev;

err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
if (err)
if (err) {
dev_err(&pdev->dev, "DMA set mask failed: %d\n", err);
goto release_region;

}
dma_set_max_seg_size(&pdev->dev, UINT_MAX);

err = -ENOMEM;
Expand Down Expand Up @@ -1575,6 +1607,8 @@ static void mana_gd_remove(struct pci_dev *pdev)

pci_release_regions(pdev);
pci_disable_device(pdev);

dev_dbg(&pdev->dev, "mana gdma remove successful\n");
}

/* The 'state' parameter is not used. */
Expand Down
6 changes: 5 additions & 1 deletion drivers/net/ethernet/microsoft/mana/hw_channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,8 @@ static int mana_hwc_alloc_dma_buf(struct hw_channel_context *hwc, u16 q_depth,
gmi = &dma_buf->mem_info;
err = mana_gd_alloc_memory(gc, buf_size, gmi);
if (err) {
dev_err(hwc->dev, "Failed to allocate DMA buffer: %d\n", err);
dev_err(hwc->dev, "Failed to allocate DMA buffer size: %u, err %d\n",
buf_size, err);
goto out;
}

Expand Down Expand Up @@ -529,6 +530,9 @@ static int mana_hwc_create_wq(struct hw_channel_context *hwc,
out:
if (err)
mana_hwc_destroy_wq(hwc, hwc_wq);

dev_err(hwc->dev, "Failed to create HWC queue size= %u type= %d err= %d\n",
queue_size, q_type, err);
return err;
}

Expand Down
58 changes: 47 additions & 11 deletions drivers/net/ethernet/microsoft/mana/mana_en.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ static int mana_open(struct net_device *ndev)
{
struct mana_port_context *apc = netdev_priv(ndev);
int err;

err = mana_alloc_queues(ndev);
if (err)

if (err) {
netdev_err(ndev, "%s failed to allocate queues: %d\n", __func__, err);
return err;
}

apc->port_is_up = true;

Expand All @@ -64,7 +66,7 @@ static int mana_open(struct net_device *ndev)

netif_carrier_on(ndev);
netif_tx_wake_all_queues(ndev);

netdev_dbg(ndev, "%s successful\n", __func__);
return 0;
}

Expand Down Expand Up @@ -176,6 +178,9 @@ static int mana_map_skb(struct sk_buff *skb, struct mana_port_context *apc,
return 0;

frag_err:
if (net_ratelimit())
netdev_err(apc->ndev, "Failed to map skb of size %u to DMA\n",
skb->len);
for (i = sg_i - 1; i >= hsg; i--)
dma_unmap_page(dev, ash->dma_handle[i], ash->size[i],
DMA_TO_DEVICE);
Expand Down Expand Up @@ -690,6 +695,7 @@ int mana_pre_alloc_rxbufs(struct mana_port_context *mpc, int new_mtu, int num_qu
return 0;

error:
netdev_err(mpc->ndev, "Failed to pre-allocate RX buffers for %d queues\n", num_queues);
mana_pre_dealloc_rxbufs(mpc);
return -ENOMEM;
}
Expand Down Expand Up @@ -1307,8 +1313,10 @@ static int mana_create_eq(struct mana_context *ac)
for (i = 0; i < gc->max_num_queues; i++) {
spec.eq.msix_index = (i + 1) % gc->num_msix_usable;
err = mana_gd_create_mana_eq(gd, &spec, &ac->eqs[i].eq);
if (err)
if (err) {
dev_err(gc->dev, "Failed to create EQ %d : %d\n", i, err);
goto out;
}
mana_create_eq_debugfs(ac, i);
}

Expand Down Expand Up @@ -2083,6 +2091,8 @@ static int mana_create_txq(struct mana_port_context *apc,

return 0;
out:
netdev_err(net, "Failed to create %d TX queues, %d\n",
apc->num_queues, err);
mana_destroy_txq(apc);
return err;
}
Expand Down Expand Up @@ -2418,6 +2428,7 @@ static int mana_add_rx_queues(struct mana_port_context *apc,
rxq = mana_create_rxq(apc, i, &ac->eqs[i], ndev);
if (!rxq) {
err = -ENOMEM;
netdev_err(ndev, "Failed to create rxq %d : %d\n", i, err);
goto out;
}

Expand Down Expand Up @@ -2664,12 +2675,18 @@ int mana_alloc_queues(struct net_device *ndev)
int err;

err = mana_create_vport(apc, ndev);
if (err)
if (err) {
netdev_err(ndev, "Failed to create vPort %u : %d\n", apc->port_idx, err);
return err;
}

err = netif_set_real_num_tx_queues(ndev, apc->num_queues);
if (err)
if (err) {
netdev_err(ndev,
"netif_set_real_num_tx_queues () failed for ndev with num_queues %u : %d\n",
apc->num_queues, err);
goto destroy_vport;
}

err = mana_add_rx_queues(apc, ndev);
if (err)
Expand All @@ -2678,14 +2695,20 @@ int mana_alloc_queues(struct net_device *ndev)
apc->rss_state = apc->num_queues > 1 ? TRI_STATE_TRUE : TRI_STATE_FALSE;

err = netif_set_real_num_rx_queues(ndev, apc->num_queues);
if (err)
if (err) {
netdev_err(ndev,
"netif_set_real_num_rx_queues () failed for ndev with num_queues %u : %d\n",
apc->num_queues, err);
goto destroy_vport;
}

mana_rss_table_init(apc);

err = mana_config_rss(apc, TRI_STATE_TRUE, true, true);
if (err)
if (err) {
netdev_err(ndev, "Failed to configure RSS table: %d\n", err);
goto destroy_vport;
}

if (gd->gdma_context->is_pf) {
err = mana_pf_register_filter(apc);
Expand Down Expand Up @@ -2826,8 +2849,10 @@ int mana_detach(struct net_device *ndev, bool from_close)

if (apc->port_st_save) {
err = mana_dealloc_queues(ndev);
if (err)
if (err) {
netdev_err(ndev, "%s failed to deallocate queues: %d\n", __func__, err);
return err;
}
}

if (!from_close) {
Expand Down Expand Up @@ -2973,6 +2998,8 @@ static int add_adev(struct gdma_dev *gd)
goto add_fail;

gd->adev = adev;
dev_dbg(gd->gdma_context->dev,
"Auxiliary device added successfully\n");
return 0;

add_fail:
Expand Down Expand Up @@ -3014,8 +3041,10 @@ int mana_probe(struct gdma_dev *gd, bool resuming)
}

err = mana_create_eq(ac);
if (err)
if (err) {
dev_err(dev, "Failed to create EQs: %d\n", err);
goto out;
}

err = mana_query_device_cfg(ac, MANA_MAJOR_VERSION, MANA_MINOR_VERSION,
MANA_MICRO_VERSION, &num_ports);
Expand Down Expand Up @@ -3071,8 +3100,14 @@ int mana_probe(struct gdma_dev *gd, bool resuming)

err = add_adev(gd);
out:
if (err)
if (err) {
mana_remove(gd, false);
} else {
dev_dbg(dev, "gd=%p, id=%u, num_ports=%d, type=%u, instance=%u\n",
gd, gd->dev_id.as_uint32, ac->num_ports,
gd->dev_id.type, gd->dev_id.instance);
dev_dbg(dev, "%s succeeded\n", __func__);
}

return err;
}
Expand Down Expand Up @@ -3134,6 +3169,7 @@ void mana_remove(struct gdma_dev *gd, bool suspending)
gd->driver_data = NULL;
gd->gdma_context = NULL;
kfree(ac);
dev_dbg(dev, "%s succeeded\n", __func__);
}

struct net_device *mana_get_primary_netdev_rcu(struct mana_context *ac, u32 port_index)
Expand Down

0 comments on commit 47dfd7a

Please sign in to comment.