Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 116851
b: refs/heads/master
c: 7b49d95
h: refs/heads/master
i:
  116849: 40073a2
  116847: fc52e2f
v: v3
  • Loading branch information
Roland Dreier committed Oct 16, 2008
1 parent 3283cf8 commit d788bda
Show file tree
Hide file tree
Showing 33 changed files with 63 additions and 6,252 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 57893d1cff4606915c13a4610d4e2d6048633f8e
refs/heads/master: 7b49d9548e59bbb23cd8bd433ca30125eb28987e
4 changes: 2 additions & 2 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -2899,9 +2899,9 @@ S: Maintained

NETEFFECT IWARP RNIC DRIVER (IW_NES)
P: Faisal Latif
M: flatif@neteffect.com
M: faisal.latif@intel.com
P: Chien Tung
M: ctung@neteffect.com
M: chien.tin.tung@intel.com
L: general@lists.openfabrics.org
W: http://www.neteffect.com
S: Supported
Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/infiniband/hw/mlx4/mad.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ int mlx4_ib_mad_init(struct mlx4_ib_dev *dev)
int p, q;
int ret;

for (p = 0; p < dev->num_ports; ++p)
for (p = 0; p < dev->dev->caps.num_ports; ++p)
for (q = 0; q <= 1; ++q) {
agent = ib_register_mad_agent(&dev->ib_dev, p + 1,
q ? IB_QPT_GSI : IB_QPT_SMI,
Expand All @@ -314,7 +314,7 @@ int mlx4_ib_mad_init(struct mlx4_ib_dev *dev)
return 0;

err:
for (p = 0; p < dev->num_ports; ++p)
for (p = 0; p < dev->dev->caps.num_ports; ++p)
for (q = 0; q <= 1; ++q)
if (dev->send_agent[p][q])
ib_unregister_mad_agent(dev->send_agent[p][q]);
Expand All @@ -327,7 +327,7 @@ void mlx4_ib_mad_cleanup(struct mlx4_ib_dev *dev)
struct ib_mad_agent *agent;
int p, q;

for (p = 0; p < dev->num_ports; ++p) {
for (p = 0; p < dev->dev->caps.num_ports; ++p) {
for (q = 0; q <= 1; ++q) {
agent = dev->send_agent[p][q];
dev->send_agent[p][q] = NULL;
Expand Down
11 changes: 2 additions & 9 deletions trunk/drivers/infiniband/hw/mlx4/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -574,10 +574,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
ibdev->ib_dev.owner = THIS_MODULE;
ibdev->ib_dev.node_type = RDMA_NODE_IB_CA;
ibdev->ib_dev.local_dma_lkey = dev->caps.reserved_lkey;
ibdev->num_ports = 0;
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
ibdev->num_ports++;
ibdev->ib_dev.phys_port_cnt = ibdev->num_ports;
ibdev->ib_dev.phys_port_cnt = dev->caps.num_ports;
ibdev->ib_dev.num_comp_vectors = 1;
ibdev->ib_dev.dma_device = &dev->pdev->dev;

Expand Down Expand Up @@ -694,7 +691,7 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
struct mlx4_ib_dev *ibdev = ibdev_ptr;
int p;

for (p = 1; p <= ibdev->num_ports; ++p)
for (p = 1; p <= dev->caps.num_ports; ++p)
mlx4_CLOSE_PORT(dev, p);

mlx4_ib_mad_cleanup(ibdev);
Expand All @@ -709,10 +706,6 @@ static void mlx4_ib_event(struct mlx4_dev *dev, void *ibdev_ptr,
enum mlx4_dev_event event, int port)
{
struct ib_event ibev;
struct mlx4_ib_dev *ibdev = to_mdev((struct ib_device *) ibdev_ptr);

if (port > ibdev->num_ports)
return;

switch (event) {
case MLX4_DEV_EVENT_PORT_UP:
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/infiniband/hw/mlx4/mlx4_ib.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,6 @@ struct mlx4_ib_ah {
struct mlx4_ib_dev {
struct ib_device ib_dev;
struct mlx4_dev *dev;
int num_ports;
void __iomem *uar_map;

struct mlx4_uar priv_uar;
Expand Down
21 changes: 2 additions & 19 deletions trunk/drivers/infiniband/hw/mlx4/qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,6 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
struct ib_qp_init_attr *init_attr,
struct ib_udata *udata, int sqpn, struct mlx4_ib_qp *qp)
{
int qpn;
int err;

mutex_init(&qp->mutex);
Expand Down Expand Up @@ -546,17 +545,9 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
}
}

if (sqpn) {
qpn = sqpn;
} else {
err = mlx4_qp_reserve_range(dev->dev, 1, 1, &qpn);
if (err)
goto err_wrid;
}

err = mlx4_qp_alloc(dev->dev, qpn, &qp->mqp);
err = mlx4_qp_alloc(dev->dev, sqpn, &qp->mqp);
if (err)
goto err_qpn;
goto err_wrid;

/*
* Hardware wants QPN written in big-endian order (after
Expand All @@ -569,10 +560,6 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,

return 0;

err_qpn:
if (!sqpn)
mlx4_qp_release_range(dev->dev, qpn, 1);

err_wrid:
if (pd->uobject) {
if (!init_attr->srq)
Expand Down Expand Up @@ -668,10 +655,6 @@ static void destroy_qp_common(struct mlx4_ib_dev *dev, struct mlx4_ib_qp *qp,
mlx4_ib_unlock_cqs(send_cq, recv_cq);

mlx4_qp_free(dev->dev, &qp->mqp);

if (!is_sqp(dev, qp))
mlx4_qp_release_range(dev->dev, qp->mqp.qpn, 1);

mlx4_mtt_cleanup(dev->dev, &qp->mtt);

if (is_user) {
Expand Down
9 changes: 0 additions & 9 deletions trunk/drivers/net/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2465,15 +2465,6 @@ config PASEMI_MAC
This driver supports the on-chip 1/10Gbit Ethernet controller on
PA Semi's PWRficient line of chips.

config MLX4_EN
tristate "Mellanox Technologies 10Gbit Ethernet support"
depends on PCI && INET
select MLX4_CORE
select INET_LRO
help
This driver supports Mellanox Technologies ConnectX Ethernet
devices.

config MLX4_CORE
tristate
depends on PCI
Expand Down
7 changes: 1 addition & 6 deletions trunk/drivers/net/mlx4/Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
obj-$(CONFIG_MLX4_CORE) += mlx4_core.o

mlx4_core-y := alloc.o catas.o cmd.o cq.o eq.o fw.o icm.o intf.o main.o mcg.o \
mr.o pd.o port.o profile.o qp.o reset.o srq.o

obj-$(CONFIG_MLX4_EN) += mlx4_en.o

mlx4_en-y := en_main.o en_tx.o en_rx.o en_params.o en_port.o en_cq.o \
en_resources.o en_netdev.o
mr.o pd.o profile.o qp.o reset.o srq.o
97 changes: 9 additions & 88 deletions trunk/drivers/net/mlx4/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,13 @@ u32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap)

obj = find_next_zero_bit(bitmap->table, bitmap->max, bitmap->last);
if (obj >= bitmap->max) {
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
& bitmap->mask;
bitmap->top = (bitmap->top + bitmap->max) & bitmap->mask;
obj = find_first_zero_bit(bitmap->table, bitmap->max);
}

if (obj < bitmap->max) {
set_bit(obj, bitmap->table);
bitmap->last = (obj + 1);
if (bitmap->last == bitmap->max)
bitmap->last = 0;
bitmap->last = (obj + 1) & (bitmap->max - 1);
obj |= bitmap->top;
} else
obj = -1;
Expand All @@ -68,90 +65,16 @@ u32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap)

void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
{
mlx4_bitmap_free_range(bitmap, obj, 1);
}

static unsigned long find_aligned_range(unsigned long *bitmap,
u32 start, u32 nbits,
int len, int align)
{
unsigned long end, i;

again:
start = ALIGN(start, align);

while ((start < nbits) && test_bit(start, bitmap))
start += align;

if (start >= nbits)
return -1;

end = start+len;
if (end > nbits)
return -1;

for (i = start + 1; i < end; i++) {
if (test_bit(i, bitmap)) {
start = i + 1;
goto again;
}
}

return start;
}

u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
{
u32 obj, i;

if (likely(cnt == 1 && align == 1))
return mlx4_bitmap_alloc(bitmap);

spin_lock(&bitmap->lock);

obj = find_aligned_range(bitmap->table, bitmap->last,
bitmap->max, cnt, align);
if (obj >= bitmap->max) {
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
& bitmap->mask;
obj = find_aligned_range(bitmap->table, 0, bitmap->max,
cnt, align);
}

if (obj < bitmap->max) {
for (i = 0; i < cnt; i++)
set_bit(obj + i, bitmap->table);
if (obj == bitmap->last) {
bitmap->last = (obj + cnt);
if (bitmap->last >= bitmap->max)
bitmap->last = 0;
}
obj |= bitmap->top;
} else
obj = -1;

spin_unlock(&bitmap->lock);

return obj;
}

void mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt)
{
u32 i;

obj &= bitmap->max + bitmap->reserved_top - 1;
obj &= bitmap->max - 1;

spin_lock(&bitmap->lock);
for (i = 0; i < cnt; i++)
clear_bit(obj + i, bitmap->table);
clear_bit(obj, bitmap->table);
bitmap->last = min(bitmap->last, obj);
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
& bitmap->mask;
bitmap->top = (bitmap->top + bitmap->max) & bitmap->mask;
spin_unlock(&bitmap->lock);
}

int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask,
u32 reserved_bot, u32 reserved_top)
int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask, u32 reserved)
{
int i;

Expand All @@ -161,16 +84,14 @@ int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask,

bitmap->last = 0;
bitmap->top = 0;
bitmap->max = num - reserved_top;
bitmap->max = num;
bitmap->mask = mask;
bitmap->reserved_top = reserved_top;
spin_lock_init(&bitmap->lock);
bitmap->table = kzalloc(BITS_TO_LONGS(bitmap->max) *
sizeof (long), GFP_KERNEL);
bitmap->table = kzalloc(BITS_TO_LONGS(num) * sizeof (long), GFP_KERNEL);
if (!bitmap->table)
return -ENOMEM;

for (i = 0; i < reserved_bot; ++i)
for (i = 0; i < reserved; ++i)
set_bit(i, bitmap->table);

return 0;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/mlx4/cq.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ int mlx4_init_cq_table(struct mlx4_dev *dev)
INIT_RADIX_TREE(&cq_table->tree, GFP_ATOMIC);

err = mlx4_bitmap_init(&cq_table->bitmap, dev->caps.num_cqs,
dev->caps.num_cqs - 1, dev->caps.reserved_cqs, 0);
dev->caps.num_cqs - 1, dev->caps.reserved_cqs);
if (err)
return err;

Expand Down
Loading

0 comments on commit d788bda

Please sign in to comment.