diff options
author | Hal Rosenstock <halr@voltaire.com> | 2005-07-27 14:45:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-27 19:26:09 -0400 |
commit | b82cab6b331b51d82f90d2207f3bbfdf09361ac9 (patch) | |
tree | 5aad260a806939b2ea5b2d5a029b38b77a4fcd07 /drivers/infiniband/core/sa_query.c | |
parent | c183a4c33528d17cde0dcb093ae4248d8cb8f649 (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.c | 15 |
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 | ||
78 | struct ib_sa_port { | 78 | struct 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 | ||
824 | err: | 815 | err: |
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 | ||