projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/mlx4: Change QP allocation scheme
[deliverable/linux.git]
/
drivers
/
net
/
ethernet
/
mellanox
/
mlx4
/
en_tx.c
diff --git
a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index 454d9fea640ecb0aa849b8d8106695d017ca3309..a308d41e4de08678107b185df2c7b8b7df3b39a7 100644
(file)
--- a/
drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/
drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@
-46,7
+46,7
@@
#include "mlx4_en.h"
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
#include "mlx4_en.h"
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
- struct mlx4_en_tx_ring **pring,
int qpn,
u32 size,
+ struct mlx4_en_tx_ring **pring, u32 size,
u16 stride, int node, int queue_index)
{
struct mlx4_en_dev *mdev = priv->mdev;
u16 stride, int node, int queue_index)
{
struct mlx4_en_dev *mdev = priv->mdev;
@@
-112,11
+112,17
@@
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
ring, ring->buf, ring->size, ring->buf_size,
(unsigned long long) ring->wqres.buf.direct.map);
ring, ring->buf, ring->size, ring->buf_size,
(unsigned long long) ring->wqres.buf.direct.map);
- ring->qpn = qpn;
+ err = mlx4_qp_reserve_range(mdev->dev, 1, 1, &ring->qpn,
+ MLX4_RESERVE_ETH_BF_QP);
+ if (err) {
+ en_err(priv, "failed reserving qp for TX ring\n");
+ goto err_map;
+ }
+
err = mlx4_qp_alloc(mdev->dev, ring->qpn, &ring->qp, GFP_KERNEL);
if (err) {
en_err(priv, "Failed allocating qp %d\n", ring->qpn);
err = mlx4_qp_alloc(mdev->dev, ring->qpn, &ring->qp, GFP_KERNEL);
if (err) {
en_err(priv, "Failed allocating qp %d\n", ring->qpn);
- goto err_
map
;
+ goto err_
reserve
;
}
ring->qp.event = mlx4_en_sqp_event;
}
ring->qp.event = mlx4_en_sqp_event;
@@
-143,6
+149,8
@@
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
*pring = ring;
return 0;
*pring = ring;
return 0;
+err_reserve:
+ mlx4_qp_release_range(mdev->dev, ring->qpn, 1);
err_map:
mlx4_en_unmap_buffer(&ring->wqres.buf);
err_hwq_res:
err_map:
mlx4_en_unmap_buffer(&ring->wqres.buf);
err_hwq_res:
@@
-479,8
+487,8
@@
void mlx4_en_tx_irq(struct mlx4_cq *mcq)
struct mlx4_en_cq *cq = container_of(mcq, struct mlx4_en_cq, mcq);
struct mlx4_en_priv *priv = netdev_priv(cq->dev);
struct mlx4_en_cq *cq = container_of(mcq, struct mlx4_en_cq, mcq);
struct mlx4_en_priv *priv = netdev_priv(cq->dev);
- if (
priv->port_up
)
- napi_schedule(&cq->napi);
+ if (
likely(priv->port_up)
)
+ napi_schedule
_irqoff
(&cq->napi);
else
mlx4_en_arm_cq(priv, cq);
}
else
mlx4_en_arm_cq(priv, cq);
}
This page took
0.026609 seconds
and
5
git commands to generate.