提交 e6c97234 编写于 作者: J Joe Perches 提交者: Jeff Kirsher

i40e: Reduce stack in i40e_dbg_dump_desc

Reduce stack use by using kmemdup and not using a very
large struct on stack.

In function ‘i40e_dbg_dump_desc’:
warning: the frame size of 8192 bytes is larger than 2048 bytes [-Wframe-larger-than=]
Signed-off-by: NJoe Perches <joe@perches.com>
Tested-by: NJim Young <jamesx.m.young@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 a36fdd8e
...@@ -773,7 +773,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -773,7 +773,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
{ {
struct i40e_tx_desc *txd; struct i40e_tx_desc *txd;
union i40e_rx_desc *rxd; union i40e_rx_desc *rxd;
struct i40e_ring ring; struct i40e_ring *ring;
struct i40e_vsi *vsi; struct i40e_vsi *vsi;
int i; int i;
...@@ -792,29 +792,32 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -792,29 +792,32 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
vsi_seid); vsi_seid);
return; return;
} }
if (is_rx_ring)
ring = *vsi->rx_rings[ring_id]; ring = kmemdup(is_rx_ring
else ? vsi->rx_rings[ring_id] : vsi->tx_rings[ring_id],
ring = *vsi->tx_rings[ring_id]; sizeof(*ring), GFP_KERNEL);
if (!ring)
return;
if (cnt == 2) { if (cnt == 2) {
dev_info(&pf->pdev->dev, "vsi = %02i %s ring = %02i\n", dev_info(&pf->pdev->dev, "vsi = %02i %s ring = %02i\n",
vsi_seid, is_rx_ring ? "rx" : "tx", ring_id); vsi_seid, is_rx_ring ? "rx" : "tx", ring_id);
for (i = 0; i < ring.count; i++) { for (i = 0; i < ring->count; i++) {
if (!is_rx_ring) { if (!is_rx_ring) {
txd = I40E_TX_DESC(&ring, i); txd = I40E_TX_DESC(ring, i);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" d[%03i] = 0x%016llx 0x%016llx\n", " d[%03i] = 0x%016llx 0x%016llx\n",
i, txd->buffer_addr, i, txd->buffer_addr,
txd->cmd_type_offset_bsz); txd->cmd_type_offset_bsz);
} else if (sizeof(union i40e_rx_desc) == } else if (sizeof(union i40e_rx_desc) ==
sizeof(union i40e_16byte_rx_desc)) { sizeof(union i40e_16byte_rx_desc)) {
rxd = I40E_RX_DESC(&ring, i); rxd = I40E_RX_DESC(ring, i);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" d[%03i] = 0x%016llx 0x%016llx\n", " d[%03i] = 0x%016llx 0x%016llx\n",
i, rxd->read.pkt_addr, i, rxd->read.pkt_addr,
rxd->read.hdr_addr); rxd->read.hdr_addr);
} else { } else {
rxd = I40E_RX_DESC(&ring, i); rxd = I40E_RX_DESC(ring, i);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n", " d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
i, rxd->read.pkt_addr, i, rxd->read.pkt_addr,
...@@ -823,26 +826,26 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -823,26 +826,26 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
} }
} }
} else if (cnt == 3) { } else if (cnt == 3) {
if (desc_n >= ring.count || desc_n < 0) { if (desc_n >= ring->count || desc_n < 0) {
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"descriptor %d not found\n", desc_n); "descriptor %d not found\n", desc_n);
return; return;
} }
if (!is_rx_ring) { if (!is_rx_ring) {
txd = I40E_TX_DESC(&ring, desc_n); txd = I40E_TX_DESC(ring, desc_n);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"vsi = %02i tx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n", "vsi = %02i tx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
vsi_seid, ring_id, desc_n, vsi_seid, ring_id, desc_n,
txd->buffer_addr, txd->cmd_type_offset_bsz); txd->buffer_addr, txd->cmd_type_offset_bsz);
} else if (sizeof(union i40e_rx_desc) == } else if (sizeof(union i40e_rx_desc) ==
sizeof(union i40e_16byte_rx_desc)) { sizeof(union i40e_16byte_rx_desc)) {
rxd = I40E_RX_DESC(&ring, desc_n); rxd = I40E_RX_DESC(ring, desc_n);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n", "vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
vsi_seid, ring_id, desc_n, vsi_seid, ring_id, desc_n,
rxd->read.pkt_addr, rxd->read.hdr_addr); rxd->read.pkt_addr, rxd->read.hdr_addr);
} else { } else {
rxd = I40E_RX_DESC(&ring, desc_n); rxd = I40E_RX_DESC(ring, desc_n);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n", "vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
vsi_seid, ring_id, desc_n, vsi_seid, ring_id, desc_n,
...@@ -852,6 +855,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -852,6 +855,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
} else { } else {
dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n"); dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n");
} }
kfree(ring);
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册