diff options
| -rw-r--r-- | drivers/infiniband/hw/nes/nes.h | 15 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_utils.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 14 |
3 files changed, 20 insertions, 11 deletions
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h index c438e4691b3c..0da62b904d00 100644 --- a/drivers/infiniband/hw/nes/nes.h +++ b/drivers/infiniband/hw/nes/nes.h | |||
| @@ -399,11 +399,20 @@ static inline void nes_write8(void __iomem *addr, u8 val) | |||
| 399 | writeb(val, addr); | 399 | writeb(val, addr); |
| 400 | } | 400 | } |
| 401 | 401 | ||
| 402 | 402 | enum nes_resource { | |
| 403 | NES_RESOURCE_MW = 1, | ||
| 404 | NES_RESOURCE_FAST_MR, | ||
| 405 | NES_RESOURCE_PHYS_MR, | ||
| 406 | NES_RESOURCE_USER_MR, | ||
| 407 | NES_RESOURCE_PD, | ||
| 408 | NES_RESOURCE_QP, | ||
| 409 | NES_RESOURCE_CQ, | ||
| 410 | NES_RESOURCE_ARP | ||
| 411 | }; | ||
| 403 | 412 | ||
| 404 | static inline int nes_alloc_resource(struct nes_adapter *nesadapter, | 413 | static inline int nes_alloc_resource(struct nes_adapter *nesadapter, |
| 405 | unsigned long *resource_array, u32 max_resources, | 414 | unsigned long *resource_array, u32 max_resources, |
| 406 | u32 *req_resource_num, u32 *next) | 415 | u32 *req_resource_num, u32 *next, enum nes_resource resource_type) |
| 407 | { | 416 | { |
| 408 | unsigned long flags; | 417 | unsigned long flags; |
| 409 | u32 resource_num; | 418 | u32 resource_num; |
| @@ -414,7 +423,7 @@ static inline int nes_alloc_resource(struct nes_adapter *nesadapter, | |||
| 414 | if (resource_num >= max_resources) { | 423 | if (resource_num >= max_resources) { |
| 415 | resource_num = find_first_zero_bit(resource_array, max_resources); | 424 | resource_num = find_first_zero_bit(resource_array, max_resources); |
| 416 | if (resource_num >= max_resources) { | 425 | if (resource_num >= max_resources) { |
| 417 | printk(KERN_ERR PFX "%s: No available resourcess.\n", __func__); | 426 | printk(KERN_ERR PFX "%s: No available resources [type=%u].\n", __func__, resource_type); |
| 418 | spin_unlock_irqrestore(&nesadapter->resource_lock, flags); | 427 | spin_unlock_irqrestore(&nesadapter->resource_lock, flags); |
| 419 | return -EMFILE; | 428 | return -EMFILE; |
| 420 | } | 429 | } |
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c index e98f4fc0b768..2042c0f29759 100644 --- a/drivers/infiniband/hw/nes/nes_utils.c +++ b/drivers/infiniband/hw/nes/nes_utils.c | |||
| @@ -699,7 +699,7 @@ int nes_arp_table(struct nes_device *nesdev, u32 ip_addr, u8 *mac_addr, u32 acti | |||
| 699 | 699 | ||
| 700 | arp_index = 0; | 700 | arp_index = 0; |
| 701 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_arps, | 701 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_arps, |
| 702 | nesadapter->arp_table_size, (u32 *)&arp_index, &nesadapter->next_arp_index); | 702 | nesadapter->arp_table_size, (u32 *)&arp_index, &nesadapter->next_arp_index, NES_RESOURCE_ARP); |
| 703 | if (err) { | 703 | if (err) { |
| 704 | nes_debug(NES_DBG_NETDEV, "nes_alloc_resource returned error = %u\n", err); | 704 | nes_debug(NES_DBG_NETDEV, "nes_alloc_resource returned error = %u\n", err); |
| 705 | return err; | 705 | return err; |
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index 8b8812de4b5c..1dadcf388c02 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c | |||
| @@ -80,7 +80,7 @@ static struct ib_mw *nes_alloc_mw(struct ib_pd *ibpd) { | |||
| 80 | next_stag_index %= nesadapter->max_mr; | 80 | next_stag_index %= nesadapter->max_mr; |
| 81 | 81 | ||
| 82 | ret = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, | 82 | ret = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, |
| 83 | nesadapter->max_mr, &stag_index, &next_stag_index); | 83 | nesadapter->max_mr, &stag_index, &next_stag_index, NES_RESOURCE_MW); |
| 84 | if (ret) { | 84 | if (ret) { |
| 85 | return ERR_PTR(ret); | 85 | return ERR_PTR(ret); |
| 86 | } | 86 | } |
| @@ -404,7 +404,7 @@ static struct ib_mr *nes_alloc_fast_reg_mr(struct ib_pd *ibpd, int max_page_list | |||
| 404 | 404 | ||
| 405 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, | 405 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, |
| 406 | nesadapter->max_mr, &stag_index, | 406 | nesadapter->max_mr, &stag_index, |
| 407 | &next_stag_index); | 407 | &next_stag_index, NES_RESOURCE_FAST_MR); |
| 408 | if (err) | 408 | if (err) |
| 409 | return ERR_PTR(err); | 409 | return ERR_PTR(err); |
| 410 | 410 | ||
| @@ -780,7 +780,7 @@ static struct ib_pd *nes_alloc_pd(struct ib_device *ibdev, | |||
| 780 | netdev_refcnt_read(nesvnic->netdev)); | 780 | netdev_refcnt_read(nesvnic->netdev)); |
| 781 | 781 | ||
| 782 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_pds, | 782 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_pds, |
| 783 | nesadapter->max_pd, &pd_num, &nesadapter->next_pd); | 783 | nesadapter->max_pd, &pd_num, &nesadapter->next_pd, NES_RESOURCE_PD); |
| 784 | if (err) { | 784 | if (err) { |
| 785 | return ERR_PTR(err); | 785 | return ERR_PTR(err); |
| 786 | } | 786 | } |
| @@ -1157,7 +1157,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, | |||
| 1157 | nes_debug(NES_DBG_QP, "RQ size=%u, SQ Size=%u\n", rq_size, sq_size); | 1157 | nes_debug(NES_DBG_QP, "RQ size=%u, SQ Size=%u\n", rq_size, sq_size); |
| 1158 | 1158 | ||
| 1159 | ret = nes_alloc_resource(nesadapter, nesadapter->allocated_qps, | 1159 | ret = nes_alloc_resource(nesadapter, nesadapter->allocated_qps, |
| 1160 | nesadapter->max_qp, &qp_num, &nesadapter->next_qp); | 1160 | nesadapter->max_qp, &qp_num, &nesadapter->next_qp, NES_RESOURCE_QP); |
| 1161 | if (ret) { | 1161 | if (ret) { |
| 1162 | return ERR_PTR(ret); | 1162 | return ERR_PTR(ret); |
| 1163 | } | 1163 | } |
| @@ -1546,7 +1546,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, | |||
| 1546 | return ERR_PTR(-EINVAL); | 1546 | return ERR_PTR(-EINVAL); |
| 1547 | 1547 | ||
| 1548 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_cqs, | 1548 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_cqs, |
| 1549 | nesadapter->max_cq, &cq_num, &nesadapter->next_cq); | 1549 | nesadapter->max_cq, &cq_num, &nesadapter->next_cq, NES_RESOURCE_CQ); |
| 1550 | if (err) { | 1550 | if (err) { |
| 1551 | return ERR_PTR(err); | 1551 | return ERR_PTR(err); |
| 1552 | } | 1552 | } |
| @@ -2129,7 +2129,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd, | |||
| 2129 | return ERR_PTR(-EINVAL); | 2129 | return ERR_PTR(-EINVAL); |
| 2130 | 2130 | ||
| 2131 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr, | 2131 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr, |
| 2132 | &stag_index, &next_stag_index); | 2132 | &stag_index, &next_stag_index, NES_RESOURCE_PHYS_MR); |
| 2133 | if (err) { | 2133 | if (err) { |
| 2134 | return ERR_PTR(err); | 2134 | return ERR_PTR(err); |
| 2135 | } | 2135 | } |
| @@ -2360,7 +2360,7 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, | |||
| 2360 | next_stag_index %= nesadapter->max_mr; | 2360 | next_stag_index %= nesadapter->max_mr; |
| 2361 | 2361 | ||
| 2362 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, | 2362 | err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, |
| 2363 | nesadapter->max_mr, &stag_index, &next_stag_index); | 2363 | nesadapter->max_mr, &stag_index, &next_stag_index, NES_RESOURCE_USER_MR); |
| 2364 | if (err) { | 2364 | if (err) { |
| 2365 | ib_umem_release(region); | 2365 | ib_umem_release(region); |
| 2366 | return ERR_PTR(err); | 2366 | return ERR_PTR(err); |
