aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/sa_query.c
diff options
context:
space:
mode:
authorHal Rosenstock <halr@voltaire.com>2005-07-27 14:45:22 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-27 19:26:09 -0400
commitb82cab6b331b51d82f90d2207f3bbfdf09361ac9 (patch)
tree5aad260a806939b2ea5b2d5a029b38b77a4fcd07 /drivers/infiniband/core/sa_query.c
parentc183a4c33528d17cde0dcb093ae4248d8cb8f649 (diff)
[PATCH] IB: Update MAD client API
Automatically allocate a MR when registering a MAD agent. MAD clients are modified to use this updated API. Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Hal Rosenstock <halr@voltaire.com> Cc: Roland Dreier <rolandd@cisco.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/infiniband/core/sa_query.c')
-rw-r--r--drivers/infiniband/core/sa_query.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index 5a08e81fa82..649824e3325 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -77,7 +77,6 @@ struct ib_sa_sm_ah {
77 77
78struct ib_sa_port { 78struct ib_sa_port {
79 struct ib_mad_agent *agent; 79 struct ib_mad_agent *agent;
80 struct ib_mr *mr;
81 struct ib_sa_sm_ah *sm_ah; 80 struct ib_sa_sm_ah *sm_ah;
82 struct work_struct update_task; 81 struct work_struct update_task;
83 spinlock_t ah_lock; 82 spinlock_t ah_lock;
@@ -492,7 +491,7 @@ retry:
492 sizeof (struct ib_sa_mad), 491 sizeof (struct ib_sa_mad),
493 DMA_TO_DEVICE); 492 DMA_TO_DEVICE);
494 gather_list.length = sizeof (struct ib_sa_mad); 493 gather_list.length = sizeof (struct ib_sa_mad);
495 gather_list.lkey = port->mr->lkey; 494 gather_list.lkey = port->agent->mr->lkey;
496 pci_unmap_addr_set(query, mapping, gather_list.addr); 495 pci_unmap_addr_set(query, mapping, gather_list.addr);
497 496
498 ret = ib_post_send_mad(port->agent, &wr, &bad_wr); 497 ret = ib_post_send_mad(port->agent, &wr, &bad_wr);
@@ -780,7 +779,6 @@ static void ib_sa_add_one(struct ib_device *device)
780 sa_dev->end_port = e; 779 sa_dev->end_port = e;
781 780
782 for (i = 0; i <= e - s; ++i) { 781 for (i = 0; i <= e - s; ++i) {
783 sa_dev->port[i].mr = NULL;
784 sa_dev->port[i].sm_ah = NULL; 782 sa_dev->port[i].sm_ah = NULL;
785 sa_dev->port[i].port_num = i + s; 783 sa_dev->port[i].port_num = i + s;
786 spin_lock_init(&sa_dev->port[i].ah_lock); 784 spin_lock_init(&sa_dev->port[i].ah_lock);
@@ -792,13 +790,6 @@ static void ib_sa_add_one(struct ib_device *device)
792 if (IS_ERR(sa_dev->port[i].agent)) 790 if (IS_ERR(sa_dev->port[i].agent))
793 goto err; 791 goto err;
794 792
795 sa_dev->port[i].mr = ib_get_dma_mr(sa_dev->port[i].agent->qp->pd,
796 IB_ACCESS_LOCAL_WRITE);
797 if (IS_ERR(sa_dev->port[i].mr)) {
798 ib_unregister_mad_agent(sa_dev->port[i].agent);
799 goto err;
800 }
801
802 INIT_WORK(&sa_dev->port[i].update_task, 793 INIT_WORK(&sa_dev->port[i].update_task,
803 update_sm_ah, &sa_dev->port[i]); 794 update_sm_ah, &sa_dev->port[i]);
804 } 795 }
@@ -822,10 +813,8 @@ static void ib_sa_add_one(struct ib_device *device)
822 return; 813 return;
823 814
824err: 815err:
825 while (--i >= 0) { 816 while (--i >= 0)
826 ib_dereg_mr(sa_dev->port[i].mr);
827 ib_unregister_mad_agent(sa_dev->port[i].agent); 817 ib_unregister_mad_agent(sa_dev->port[i].agent);
828 }
829 818
830 kfree(sa_dev); 819 kfree(sa_dev);
831 820