mad.c (3dd1faf89b418f036ff664edbf04d4e266e2ceaa) | mad.c (3711baf27d78475436b063f33399908ba208a8f2) |
---|---|
1/* 2 * Copyright(c) 2015 Intel Corporation. 3 * 4 * This file is provided under a dual BSD/GPLv2 license. When using or 5 * redistributing this file, you may do so under either license. 6 * 7 * GPL LICENSE SUMMARY 8 * --- 31 unchanged lines hidden (view full) --- 40 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45 * 46 */ 47 | 1/* 2 * Copyright(c) 2015 Intel Corporation. 3 * 4 * This file is provided under a dual BSD/GPLv2 license. When using or 5 * redistributing this file, you may do so under either license. 6 * 7 * GPL LICENSE SUMMARY 8 * --- 31 unchanged lines hidden (view full) --- 40 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45 * 46 */ 47 |
48#include <rdma/ib_mad.h> |
|
48#include "mad.h" 49 50/** 51 * rvt_process_mad - process an incoming MAD packet 52 * @ibdev: the infiniband device this packet came in on 53 * @mad_flags: MAD flags 54 * @port: the port number this packet came in on 55 * @in_wc: the work completion entry for this packet --- 22 unchanged lines hidden (view full) --- 78 * structure. More study will be needed to finalize the interface 79 * between drivers and rvt for mad packets. 80 * 81 *VT-DRIVER-API: ???? 82 * 83 */ 84 return IB_MAD_RESULT_FAILURE; 85} | 49#include "mad.h" 50 51/** 52 * rvt_process_mad - process an incoming MAD packet 53 * @ibdev: the infiniband device this packet came in on 54 * @mad_flags: MAD flags 55 * @port: the port number this packet came in on 56 * @in_wc: the work completion entry for this packet --- 22 unchanged lines hidden (view full) --- 79 * structure. More study will be needed to finalize the interface 80 * between drivers and rvt for mad packets. 81 * 82 *VT-DRIVER-API: ???? 83 * 84 */ 85 return IB_MAD_RESULT_FAILURE; 86} |
87 88static void rvt_send_mad_handler(struct ib_mad_agent *agent, 89 struct ib_mad_send_wc *mad_send_wc) 90{ 91 ib_free_send_mad(mad_send_wc->send_buf); 92} 93 94int rvt_create_mad_agents(struct rvt_dev_info *rdi) 95{ 96 struct ib_mad_agent *agent; 97 struct rvt_ibport *rvp; 98 int p; 99 int ret; 100 101 for (p = 0; p < rdi->dparms.nports; p++) { 102 rvp = rdi->ports[p]; 103 agent = ib_register_mad_agent(&rdi->ibdev, p + 1, 104 IB_QPT_SMI, 105 NULL, 0, rvt_send_mad_handler, 106 NULL, NULL, 0); 107 if (IS_ERR(agent)) { 108 ret = PTR_ERR(agent); 109 goto err; 110 } 111 112 rvp->send_agent = agent; 113 114 if (rdi->driver_f.notify_create_mad_agent) 115 rdi->driver_f.notify_create_mad_agent(rdi, p); 116 } 117 118 return 0; 119 120err: 121 for (p = 0; p < rdi->dparms.nports; p++) { 122 rvp = rdi->ports[p]; 123 if (rvp->send_agent) { 124 agent = rvp->send_agent; 125 rvp->send_agent = NULL; 126 ib_unregister_mad_agent(agent); 127 if (rdi->driver_f.notify_free_mad_agent) 128 rdi->driver_f.notify_free_mad_agent(rdi, p); 129 } 130 } 131 132 return ret; 133} 134 135void rvt_free_mad_agents(struct rvt_dev_info *rdi) 136{ 137 struct ib_mad_agent *agent; 138 struct rvt_ibport *rvp; 139 int p; 140 141 for (p = 0; p < rdi->dparms.nports; p++) { 142 rvp = rdi->ports[p]; 143 if (rvp->send_agent) { 144 agent = rvp->send_agent; 145 rvp->send_agent = NULL; 146 ib_unregister_mad_agent(agent); 147 } 148 if (rvp->sm_ah) { 149 ib_destroy_ah(&rvp->sm_ah->ibah); 150 rvp->sm_ah = NULL; 151 } 152 153 if (rdi->driver_f.notify_free_mad_agent) 154 rdi->driver_f.notify_free_mad_agent(rdi, p); 155 } 156} 157 |
|