Skip to content

Commit

Permalink
Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/g…
Browse files Browse the repository at this point in the history
…it/roland/infiniband
  • Loading branch information
Linus Torvalds committed Feb 1, 2006
2 parents 2f4c541 + fd9cfdd commit a6df590
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 61 deletions.
13 changes: 5 additions & 8 deletions drivers/infiniband/hw/mthca/mthca_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,7 @@ static int mthca_cmd_post(struct mthca_dev *dev,
{
int err = 0;

if (down_interruptible(&dev->cmd.hcr_sem))
return -EINTR;
mutex_lock(&dev->cmd.hcr_mutex);

if (event) {
unsigned long end = jiffies + GO_BIT_TIMEOUT;
Expand Down Expand Up @@ -238,7 +237,7 @@ static int mthca_cmd_post(struct mthca_dev *dev,
op), dev->hcr + 6 * 4);

out:
up(&dev->cmd.hcr_sem);
mutex_unlock(&dev->cmd.hcr_mutex);
return err;
}

Expand All @@ -255,8 +254,7 @@ static int mthca_cmd_poll(struct mthca_dev *dev,
int err = 0;
unsigned long end;

if (down_interruptible(&dev->cmd.poll_sem))
return -EINTR;
down(&dev->cmd.poll_sem);

err = mthca_cmd_post(dev, in_param,
out_param ? *out_param : 0,
Expand Down Expand Up @@ -333,8 +331,7 @@ static int mthca_cmd_wait(struct mthca_dev *dev,
int err = 0;
struct mthca_cmd_context *context;

if (down_interruptible(&dev->cmd.event_sem))
return -EINTR;
down(&dev->cmd.event_sem);

spin_lock(&dev->cmd.context_lock);
BUG_ON(dev->cmd.free_head < 0);
Expand Down Expand Up @@ -438,7 +435,7 @@ static int mthca_cmd_imm(struct mthca_dev *dev,

int mthca_cmd_init(struct mthca_dev *dev)
{
sema_init(&dev->cmd.hcr_sem, 1);
mutex_init(&dev->cmd.hcr_mutex);
sema_init(&dev->cmd.poll_sem, 1);
dev->cmd.use_events = 0;

Expand Down
8 changes: 5 additions & 3 deletions drivers/infiniband/hw/mthca/mthca_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
#include <linux/pci.h>
#include <linux/dma-mapping.h>
#include <linux/timer.h>
#include <linux/mutex.h>

#include <asm/semaphore.h>

#include "mthca_provider.h"
Expand Down Expand Up @@ -111,7 +113,7 @@ enum {
struct mthca_cmd {
struct pci_pool *pool;
int use_events;
struct semaphore hcr_sem;
struct mutex hcr_mutex;
struct semaphore poll_sem;
struct semaphore event_sem;
int max_cmds;
Expand Down Expand Up @@ -256,7 +258,7 @@ struct mthca_av_table {
};

struct mthca_mcg_table {
struct semaphore sem;
struct mutex mutex;
struct mthca_alloc alloc;
struct mthca_icm_table *table;
};
Expand Down Expand Up @@ -301,7 +303,7 @@ struct mthca_dev {
u64 ddr_end;

MTHCA_DECLARE_DOORBELL_LOCK(doorbell_lock)
struct semaphore cap_mask_mutex;
struct mutex cap_mask_mutex;

void __iomem *hcr;
void __iomem *kar;
Expand Down
10 changes: 8 additions & 2 deletions drivers/infiniband/hw/mthca/mthca_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,13 @@ static int __devinit mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim
return -ENODEV;
}

if (dev_lim->uar_size > pci_resource_len(mdev->pdev, 2)) {
mthca_err(mdev, "HCA reported UAR size of 0x%x bigger than "
"PCI resource 2 size of 0x%lx, aborting.\n",
dev_lim->uar_size, pci_resource_len(mdev->pdev, 2));
return -ENODEV;
}

mdev->limits.num_ports = dev_lim->num_ports;
mdev->limits.vl_cap = dev_lim->max_vl;
mdev->limits.mtu_cap = dev_lim->max_mtu;
Expand Down Expand Up @@ -976,8 +983,7 @@ static int __devinit mthca_init_one(struct pci_dev *pdev,
err = -ENODEV;
goto err_disable_pdev;
}
if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM) ||
pci_resource_len(pdev, 2) != 1 << 23) {
if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
dev_err(&pdev->dev, "Missing UAR, aborting.\n");
err = -ENODEV;
goto err_disable_pdev;
Expand Down
20 changes: 7 additions & 13 deletions drivers/infiniband/hw/mthca/mthca_mcg.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,7 @@ int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
return PTR_ERR(mailbox);
mgm = mailbox->buf;

if (down_interruptible(&dev->mcg_table.sem)) {
err = -EINTR;
goto err_sem;
}
mutex_lock(&dev->mcg_table.mutex);

err = find_mgm(dev, gid->raw, mailbox, &hash, &prev, &index);
if (err)
Expand Down Expand Up @@ -241,8 +238,8 @@ int mthca_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
BUG_ON(index < dev->limits.num_mgms);
mthca_free(&dev->mcg_table.alloc, index);
}
up(&dev->mcg_table.sem);
err_sem:
mutex_unlock(&dev->mcg_table.mutex);

mthca_free_mailbox(dev, mailbox);
return err;
}
Expand All @@ -263,10 +260,7 @@ int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
return PTR_ERR(mailbox);
mgm = mailbox->buf;

if (down_interruptible(&dev->mcg_table.sem)) {
err = -EINTR;
goto err_sem;
}
mutex_lock(&dev->mcg_table.mutex);

err = find_mgm(dev, gid->raw, mailbox, &hash, &prev, &index);
if (err)
Expand Down Expand Up @@ -371,8 +365,8 @@ int mthca_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
}

out:
up(&dev->mcg_table.sem);
err_sem:
mutex_unlock(&dev->mcg_table.mutex);

mthca_free_mailbox(dev, mailbox);
return err;
}
Expand All @@ -389,7 +383,7 @@ int __devinit mthca_init_mcg_table(struct mthca_dev *dev)
if (err)
return err;

init_MUTEX(&dev->mcg_table.sem);
mutex_init(&dev->mcg_table.mutex);

return 0;
}
Expand Down
36 changes: 18 additions & 18 deletions drivers/infiniband/hw/mthca/mthca_memfree.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ enum {
};

struct mthca_user_db_table {
struct semaphore mutex;
struct mutex mutex;
struct {
u64 uvirt;
struct scatterlist mem;
Expand Down Expand Up @@ -158,7 +158,7 @@ int mthca_table_get(struct mthca_dev *dev, struct mthca_icm_table *table, int ob
int ret = 0;
u8 status;

down(&table->mutex);
mutex_lock(&table->mutex);

if (table->icm[i]) {
++table->icm[i]->refcount;
Expand All @@ -184,7 +184,7 @@ int mthca_table_get(struct mthca_dev *dev, struct mthca_icm_table *table, int ob
++table->icm[i]->refcount;

out:
up(&table->mutex);
mutex_unlock(&table->mutex);
return ret;
}

Expand All @@ -198,7 +198,7 @@ void mthca_table_put(struct mthca_dev *dev, struct mthca_icm_table *table, int o

i = (obj & (table->num_obj - 1)) * table->obj_size / MTHCA_TABLE_CHUNK_SIZE;

down(&table->mutex);
mutex_lock(&table->mutex);

if (--table->icm[i]->refcount == 0) {
mthca_UNMAP_ICM(dev, table->virt + i * MTHCA_TABLE_CHUNK_SIZE,
Expand All @@ -207,7 +207,7 @@ void mthca_table_put(struct mthca_dev *dev, struct mthca_icm_table *table, int o
table->icm[i] = NULL;
}

up(&table->mutex);
mutex_unlock(&table->mutex);
}

void *mthca_table_find(struct mthca_icm_table *table, int obj)
Expand All @@ -220,7 +220,7 @@ void *mthca_table_find(struct mthca_icm_table *table, int obj)
if (!table->lowmem)
return NULL;

down(&table->mutex);
mutex_lock(&table->mutex);

idx = (obj & (table->num_obj - 1)) * table->obj_size;
icm = table->icm[idx / MTHCA_TABLE_CHUNK_SIZE];
Expand All @@ -240,7 +240,7 @@ void *mthca_table_find(struct mthca_icm_table *table, int obj)
}

out:
up(&table->mutex);
mutex_unlock(&table->mutex);
return page ? lowmem_page_address(page) + offset : NULL;
}

Expand Down Expand Up @@ -301,7 +301,7 @@ struct mthca_icm_table *mthca_alloc_icm_table(struct mthca_dev *dev,
table->num_obj = nobj;
table->obj_size = obj_size;
table->lowmem = use_lowmem;
init_MUTEX(&table->mutex);
mutex_init(&table->mutex);

for (i = 0; i < num_icm; ++i)
table->icm[i] = NULL;
Expand Down Expand Up @@ -380,7 +380,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
if (index < 0 || index > dev->uar_table.uarc_size / 8)
return -EINVAL;

down(&db_tab->mutex);
mutex_lock(&db_tab->mutex);

i = index / MTHCA_DB_REC_PER_PAGE;

Expand Down Expand Up @@ -424,7 +424,7 @@ int mthca_map_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
db_tab->page[i].refcount = 1;

out:
up(&db_tab->mutex);
mutex_unlock(&db_tab->mutex);
return ret;
}

Expand All @@ -439,11 +439,11 @@ void mthca_unmap_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
* pages until we clean up the whole db table.
*/

down(&db_tab->mutex);
mutex_lock(&db_tab->mutex);

--db_tab->page[index / MTHCA_DB_REC_PER_PAGE].refcount;

up(&db_tab->mutex);
mutex_unlock(&db_tab->mutex);
}

struct mthca_user_db_table *mthca_init_user_db_tab(struct mthca_dev *dev)
Expand All @@ -460,7 +460,7 @@ struct mthca_user_db_table *mthca_init_user_db_tab(struct mthca_dev *dev)
if (!db_tab)
return ERR_PTR(-ENOMEM);

init_MUTEX(&db_tab->mutex);
mutex_init(&db_tab->mutex);
for (i = 0; i < npages; ++i) {
db_tab->page[i].refcount = 0;
db_tab->page[i].uvirt = 0;
Expand Down Expand Up @@ -499,7 +499,7 @@ int mthca_alloc_db(struct mthca_dev *dev, enum mthca_db_type type,
int ret = 0;
u8 status;

down(&dev->db_tab->mutex);
mutex_lock(&dev->db_tab->mutex);

switch (type) {
case MTHCA_DB_TYPE_CQ_ARM:
Expand Down Expand Up @@ -585,7 +585,7 @@ int mthca_alloc_db(struct mthca_dev *dev, enum mthca_db_type type,
*db = (__be32 *) &page->db_rec[j];

out:
up(&dev->db_tab->mutex);
mutex_unlock(&dev->db_tab->mutex);

return ret;
}
Expand All @@ -601,7 +601,7 @@ void mthca_free_db(struct mthca_dev *dev, int type, int db_index)

page = dev->db_tab->page + i;

down(&dev->db_tab->mutex);
mutex_lock(&dev->db_tab->mutex);

page->db_rec[j] = 0;
if (i >= dev->db_tab->min_group2)
Expand All @@ -624,7 +624,7 @@ void mthca_free_db(struct mthca_dev *dev, int type, int db_index)
++dev->db_tab->min_group2;
}

up(&dev->db_tab->mutex);
mutex_unlock(&dev->db_tab->mutex);
}

int mthca_init_db_tab(struct mthca_dev *dev)
Expand All @@ -638,7 +638,7 @@ int mthca_init_db_tab(struct mthca_dev *dev)
if (!dev->db_tab)
return -ENOMEM;

init_MUTEX(&dev->db_tab->mutex);
mutex_init(&dev->db_tab->mutex);

dev->db_tab->npages = dev->uar_table.uarc_size / 4096;
dev->db_tab->max_group1 = 0;
Expand Down
7 changes: 3 additions & 4 deletions drivers/infiniband/hw/mthca/mthca_memfree.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@

#include <linux/list.h>
#include <linux/pci.h>

#include <asm/semaphore.h>
#include <linux/mutex.h>

#define MTHCA_ICM_CHUNK_LEN \
((256 - sizeof (struct list_head) - 2 * sizeof (int)) / \
Expand All @@ -64,7 +63,7 @@ struct mthca_icm_table {
int num_obj;
int obj_size;
int lowmem;
struct semaphore mutex;
struct mutex mutex;
struct mthca_icm *icm[0];
};

Expand Down Expand Up @@ -147,7 +146,7 @@ struct mthca_db_table {
int max_group1;
int min_group2;
struct mthca_db_page *page;
struct semaphore mutex;
struct mutex mutex;
};

enum mthca_db_type {
Expand Down
6 changes: 3 additions & 3 deletions drivers/infiniband/hw/mthca/mthca_provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ static int mthca_modify_port(struct ib_device *ibdev,
int err;
u8 status;

if (down_interruptible(&to_mdev(ibdev)->cap_mask_mutex))
if (mutex_lock_interruptible(&to_mdev(ibdev)->cap_mask_mutex))
return -ERESTARTSYS;

err = mthca_query_port(ibdev, port, &attr);
Expand All @@ -207,7 +207,7 @@ static int mthca_modify_port(struct ib_device *ibdev,
}

out:
up(&to_mdev(ibdev)->cap_mask_mutex);
mutex_unlock(&to_mdev(ibdev)->cap_mask_mutex);
return err;
}

Expand Down Expand Up @@ -1185,7 +1185,7 @@ int mthca_register_device(struct mthca_dev *dev)
dev->ib_dev.post_recv = mthca_tavor_post_receive;
}

init_MUTEX(&dev->cap_mask_mutex);
mutex_init(&dev->cap_mask_mutex);

ret = ib_register_device(&dev->ib_dev);
if (ret)
Expand Down
Loading

0 comments on commit a6df590

Please sign in to comment.