Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 121444
b: refs/heads/master
c: 64f22fa
h: refs/heads/master
v: v3
  • Loading branch information
Michael Ellerman authored and Roland Dreier committed Dec 2, 2008
1 parent 7b8b17f commit 5ea3025
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 32 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: 139cdab0a2af6f5eaee47cc0144608e53b65279d
refs/heads/master: 64f22fa17c1a531e682ebc882566856ea5718495
7 changes: 0 additions & 7 deletions trunk/drivers/infiniband/hw/ehca/ehca_classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,6 @@ struct ehca_queue_map {
unsigned int next_wqe_idx; /* Idx to first wqe to be flushed */
};

/* function to calculate the next index for the qmap */
static inline unsigned int next_index(unsigned int cur_index, unsigned int limit)
{
unsigned int temp = cur_index + 1;
return (temp == limit) ? 0 : temp;
}

struct ehca_qp {
union {
struct ib_qp ib_qp;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/infiniband/hw/ehca/ehca_eq.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ int ehca_create_eq(struct ehca_shca *shca,
if (h_ret != H_SUCCESS || vpage)
goto create_eq_exit2;
} else {
if (h_ret != H_PAGE_REGISTERED)
if (h_ret != H_PAGE_REGISTERED || !vpage)
goto create_eq_exit2;
}
}
Expand Down
17 changes: 7 additions & 10 deletions trunk/drivers/infiniband/hw/ehca/ehca_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -717,7 +717,6 @@ static int __devinit ehca_probe(struct of_device *dev,
const u64 *handle;
struct ib_pd *ibpd;
int ret, i, eq_size;
unsigned long flags;

handle = of_get_property(dev->node, "ibm,hca-handle", NULL);
if (!handle) {
Expand Down Expand Up @@ -831,9 +830,9 @@ static int __devinit ehca_probe(struct of_device *dev,
ehca_err(&shca->ib_device,
"Cannot create device attributes ret=%d", ret);

spin_lock_irqsave(&shca_list_lock, flags);
spin_lock(&shca_list_lock);
list_add(&shca->shca_list, &shca_list);
spin_unlock_irqrestore(&shca_list_lock, flags);
spin_unlock(&shca_list_lock);

return 0;

Expand Down Expand Up @@ -879,7 +878,6 @@ static int __devinit ehca_probe(struct of_device *dev,
static int __devexit ehca_remove(struct of_device *dev)
{
struct ehca_shca *shca = dev->dev.driver_data;
unsigned long flags;
int ret;

sysfs_remove_group(&dev->dev.kobj, &ehca_dev_attr_grp);
Expand Down Expand Up @@ -917,9 +915,9 @@ static int __devexit ehca_remove(struct of_device *dev)

ib_dealloc_device(&shca->ib_device);

spin_lock_irqsave(&shca_list_lock, flags);
spin_lock(&shca_list_lock);
list_del(&shca->shca_list);
spin_unlock_irqrestore(&shca_list_lock, flags);
spin_unlock(&shca_list_lock);

return ret;
}
Expand Down Expand Up @@ -977,7 +975,6 @@ static int ehca_mem_notifier(struct notifier_block *nb,
unsigned long action, void *data)
{
static unsigned long ehca_dmem_warn_time;
unsigned long flags;

switch (action) {
case MEM_CANCEL_OFFLINE:
Expand All @@ -988,12 +985,12 @@ static int ehca_mem_notifier(struct notifier_block *nb,
case MEM_GOING_ONLINE:
case MEM_GOING_OFFLINE:
/* only ok if no hca is attached to the lpar */
spin_lock_irqsave(&shca_list_lock, flags);
spin_lock(&shca_list_lock);
if (list_empty(&shca_list)) {
spin_unlock_irqrestore(&shca_list_lock, flags);
spin_unlock(&shca_list_lock);
return NOTIFY_OK;
} else {
spin_unlock_irqrestore(&shca_list_lock, flags);
spin_unlock(&shca_list_lock);
if (printk_timed_ratelimit(&ehca_dmem_warn_time,
30 * 1000))
ehca_gen_err("DMEM operations are not allowed"
Expand Down
12 changes: 6 additions & 6 deletions trunk/drivers/infiniband/hw/ehca/ehca_qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1138,14 +1138,14 @@ static int calc_left_cqes(u64 wqe_p, struct ipz_queue *ipz_queue,
return -EFAULT;
}

tail_idx = next_index(qmap->tail, qmap->entries);
tail_idx = (qmap->tail + 1) % qmap->entries;
wqe_idx = q_ofs / ipz_queue->qe_size;

/* check all processed wqes, whether a cqe is requested or not */
while (tail_idx != wqe_idx) {
if (qmap->map[tail_idx].cqe_req)
qmap->left_to_poll++;
tail_idx = next_index(tail_idx, qmap->entries);
tail_idx = (tail_idx + 1) % qmap->entries;
}
/* save index in queue, where we have to start flushing */
qmap->next_wqe_idx = wqe_idx;
Expand Down Expand Up @@ -1195,14 +1195,14 @@ static int check_for_left_cqes(struct ehca_qp *my_qp, struct ehca_shca *shca)
} else {
spin_lock_irqsave(&my_qp->send_cq->spinlock, flags);
my_qp->sq_map.left_to_poll = 0;
my_qp->sq_map.next_wqe_idx = next_index(my_qp->sq_map.tail,
my_qp->sq_map.entries);
my_qp->sq_map.next_wqe_idx = (my_qp->sq_map.tail + 1) %
my_qp->sq_map.entries;
spin_unlock_irqrestore(&my_qp->send_cq->spinlock, flags);

spin_lock_irqsave(&my_qp->recv_cq->spinlock, flags);
my_qp->rq_map.left_to_poll = 0;
my_qp->rq_map.next_wqe_idx = next_index(my_qp->rq_map.tail,
my_qp->rq_map.entries);
my_qp->rq_map.next_wqe_idx = (my_qp->rq_map.tail + 1) %
my_qp->rq_map.entries;
spin_unlock_irqrestore(&my_qp->recv_cq->spinlock, flags);
}

Expand Down
13 changes: 7 additions & 6 deletions trunk/drivers/infiniband/hw/ehca/ehca_reqs.c
Original file line number Diff line number Diff line change
Expand Up @@ -726,13 +726,13 @@ static inline int ehca_poll_cq_one(struct ib_cq *cq, struct ib_wc *wc)
* set left_to_poll to 0 because in error state, we will not
* get any additional CQEs
*/
my_qp->sq_map.next_wqe_idx = next_index(my_qp->sq_map.tail,
my_qp->sq_map.entries);
my_qp->sq_map.next_wqe_idx = (my_qp->sq_map.tail + 1) %
my_qp->sq_map.entries;
my_qp->sq_map.left_to_poll = 0;
ehca_add_to_err_list(my_qp, 1);

my_qp->rq_map.next_wqe_idx = next_index(my_qp->rq_map.tail,
my_qp->rq_map.entries);
my_qp->rq_map.next_wqe_idx = (my_qp->rq_map.tail + 1) %
my_qp->rq_map.entries;
my_qp->rq_map.left_to_poll = 0;
if (HAS_RQ(my_qp))
ehca_add_to_err_list(my_qp, 0);
Expand Down Expand Up @@ -860,8 +860,9 @@ static int generate_flush_cqes(struct ehca_qp *my_qp, struct ib_cq *cq,

/* mark as reported and advance next_wqe pointer */
qmap_entry->reported = 1;
qmap->next_wqe_idx = next_index(qmap->next_wqe_idx,
qmap->entries);
qmap->next_wqe_idx++;
if (qmap->next_wqe_idx == qmap->entries)
qmap->next_wqe_idx = 0;
qmap_entry = &qmap->map[qmap->next_wqe_idx];

wc++; nr++;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/infiniband/hw/ipath/ipath_fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ static int create_file(const char *name, mode_t mode,
*dentry = NULL;
mutex_lock(&parent->d_inode->i_mutex);
*dentry = lookup_one_len(name, parent, strlen(name));
if (!IS_ERR(dentry))
if (!IS_ERR(*dentry))
error = ipathfs_mknod(parent->d_inode, *dentry,
mode, fops, data);
else
Expand Down

0 comments on commit 5ea3025

Please sign in to comment.