linux/net/rds/ib_cm.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2006 Oracle.  All rights reserved.
   3 *
   4 * This software is available to you under a choice of one of two
   5 * licenses.  You may choose to be licensed under the terms of the GNU
   6 * General Public License (GPL) Version 2, available from the file
   7 * COPYING in the main directory of this source tree, or the
   8 * OpenIB.org BSD license below:
   9 *
  10 *     Redistribution and use in source and binary forms, with or
  11 *     without modification, are permitted provided that the following
  12 *     conditions are met:
  13 *
  14 *      - Redistributions of source code must retain the above
  15 *        copyright notice, this list of conditions and the following
  16 *        disclaimer.
  17 *
  18 *      - Redistributions in binary form must reproduce the above
  19 *        copyright notice, this list of conditions and the following
  20 *        disclaimer in the documentation and/or other materials
  21 *        provided with the distribution.
  22 *
  23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30 * SOFTWARE.
  31 *
  32 */
  33#include <linux/kernel.h>
  34#include <linux/in.h>
  35#include <linux/slab.h>
  36#include <linux/vmalloc.h>
  37#include <linux/ratelimit.h>
  38
  39#include "rds.h"
  40#include "ib.h"
  41
  42static char *rds_ib_event_type_strings[] = {
  43#define RDS_IB_EVENT_STRING(foo) \
  44                [IB_EVENT_##foo] = __stringify(IB_EVENT_##foo)
  45        RDS_IB_EVENT_STRING(CQ_ERR),
  46        RDS_IB_EVENT_STRING(QP_FATAL),
  47        RDS_IB_EVENT_STRING(QP_REQ_ERR),
  48        RDS_IB_EVENT_STRING(QP_ACCESS_ERR),
  49        RDS_IB_EVENT_STRING(COMM_EST),
  50        RDS_IB_EVENT_STRING(SQ_DRAINED),
  51        RDS_IB_EVENT_STRING(PATH_MIG),
  52        RDS_IB_EVENT_STRING(PATH_MIG_ERR),
  53        RDS_IB_EVENT_STRING(DEVICE_FATAL),
  54        RDS_IB_EVENT_STRING(PORT_ACTIVE),
  55        RDS_IB_EVENT_STRING(PORT_ERR),
  56        RDS_IB_EVENT_STRING(LID_CHANGE),
  57        RDS_IB_EVENT_STRING(PKEY_CHANGE),
  58        RDS_IB_EVENT_STRING(SM_CHANGE),
  59        RDS_IB_EVENT_STRING(SRQ_ERR),
  60        RDS_IB_EVENT_STRING(SRQ_LIMIT_REACHED),
  61        RDS_IB_EVENT_STRING(QP_LAST_WQE_REACHED),
  62        RDS_IB_EVENT_STRING(CLIENT_REREGISTER),
  63#undef RDS_IB_EVENT_STRING
  64};
  65
  66static char *rds_ib_event_str(enum ib_event_type type)
  67{
  68        return rds_str_array(rds_ib_event_type_strings,
  69                             ARRAY_SIZE(rds_ib_event_type_strings), type);
  70};
  71
  72/*
  73 * Set the selected protocol version
  74 */
  75static void rds_ib_set_protocol(struct rds_connection *conn, unsigned int version)
  76{
  77        conn->c_version = version;
  78}
  79
  80/*
  81 * Set up flow control
  82 */
  83static void rds_ib_set_flow_control(struct rds_connection *conn, u32 credits)
  84{
  85        struct rds_ib_connection *ic = conn->c_transport_data;
  86
  87        if (rds_ib_sysctl_flow_control && credits != 0) {
  88                /* We're doing flow control */
  89                ic->i_flowctl = 1;
  90                rds_ib_send_add_credits(conn, credits);
  91        } else {
  92                ic->i_flowctl = 0;
  93        }
  94}
  95
  96/*
  97 * Tune RNR behavior. Without flow control, we use a rather
  98 * low timeout, but not the absolute minimum - this should
  99 * be tunable.
 100 *
 101 * We already set the RNR retry count to 7 (which is the
 102 * smallest infinite number :-) above.
 103 * If flow control is off, we want to change this back to 0
 104 * so that we learn quickly when our credit accounting is
 105 * buggy.
 106 *
 107 * Caller passes in a qp_attr pointer - don't waste stack spacv
 108 * by allocation this twice.
 109 */
 110static void
 111rds_ib_tune_rnr(struct rds_ib_connection *ic, struct ib_qp_attr *attr)
 112{
 113        int ret;
 114
 115        attr->min_rnr_timer = IB_RNR_TIMER_000_32;
 116        ret = ib_modify_qp(ic->i_cm_id->qp, attr, IB_QP_MIN_RNR_TIMER);
 117        if (ret)
 118                printk(KERN_NOTICE "ib_modify_qp(IB_QP_MIN_RNR_TIMER): err=%d\n", -ret);
 119}
 120
 121/*
 122 * Connection established.
 123 * We get here for both outgoing and incoming connection.
 124 */
 125void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_event *event)
 126{
 127        const struct rds_ib_connect_private *dp = NULL;
 128        struct rds_ib_connection *ic = conn->c_transport_data;
 129        struct ib_qp_attr qp_attr;
 130        int err;
 131
 132        if (event->param.conn.private_data_len >= sizeof(*dp)) {
 133                dp = event->param.conn.private_data;
 134
 135                /* make sure it isn't empty data */
 136                if (dp->dp_protocol_major) {
 137                        rds_ib_set_protocol(conn,
 138                                RDS_PROTOCOL(dp->dp_protocol_major,
 139                                dp->dp_protocol_minor));
 140                        rds_ib_set_flow_control(conn, be32_to_cpu(dp->dp_credit));
 141                }
 142        }
 143
 144        if (conn->c_version < RDS_PROTOCOL(3,1)) {
 145                printk(KERN_NOTICE "RDS/IB: Connection to %pI4 version %u.%u failed,"
 146                       " no longer supported\n",
 147                       &conn->c_faddr,
 148                       RDS_PROTOCOL_MAJOR(conn->c_version),
 149                       RDS_PROTOCOL_MINOR(conn->c_version));
 150                rds_conn_destroy(conn);
 151                return;
 152        } else {
 153                printk(KERN_NOTICE "RDS/IB: connected to %pI4 version %u.%u%s\n",
 154                       &conn->c_faddr,
 155                       RDS_PROTOCOL_MAJOR(conn->c_version),
 156                       RDS_PROTOCOL_MINOR(conn->c_version),
 157                       ic->i_flowctl ? ", flow control" : "");
 158        }
 159
 160        /*
 161         * Init rings and fill recv. this needs to wait until protocol negotiation
 162         * is complete, since ring layout is different from 3.0 to 3.1.
 163         */
 164        rds_ib_send_init_ring(ic);
 165        rds_ib_recv_init_ring(ic);
 166        /* Post receive buffers - as a side effect, this will update
 167         * the posted credit count. */
 168        rds_ib_recv_refill(conn, 1);
 169
 170        /* Tune RNR behavior */
 171        rds_ib_tune_rnr(ic, &qp_attr);
 172
 173        qp_attr.qp_state = IB_QPS_RTS;
 174        err = ib_modify_qp(ic->i_cm_id->qp, &qp_attr, IB_QP_STATE);
 175        if (err)
 176                printk(KERN_NOTICE "ib_modify_qp(IB_QP_STATE, RTS): err=%d\n", err);
 177
 178        /* update ib_device with this local ipaddr */
 179        err = rds_ib_update_ipaddr(ic->rds_ibdev, conn->c_laddr);
 180        if (err)
 181                printk(KERN_ERR "rds_ib_update_ipaddr failed (%d)\n",
 182                        err);
 183
 184        /* If the peer gave us the last packet it saw, process this as if
 185         * we had received a regular ACK. */
 186        if (dp && dp->dp_ack_seq)
 187                rds_send_drop_acked(conn, be64_to_cpu(dp->dp_ack_seq), NULL);
 188
 189        rds_connect_complete(conn);
 190}
 191
 192static void rds_ib_cm_fill_conn_param(struct rds_connection *conn,
 193                        struct rdma_conn_param *conn_param,
 194                        struct rds_ib_connect_private *dp,
 195                        u32 protocol_version,
 196                        u32 max_responder_resources,
 197                        u32 max_initiator_depth)
 198{
 199        struct rds_ib_connection *ic = conn->c_transport_data;
 200        struct rds_ib_device *rds_ibdev = ic->rds_ibdev;
 101 2um.c#L112" id="L12t/rds/ib_2m.c#L102" id="L102" clas2="lin20" name="L62">  62       memsrdmf">c_version));
 183
 174       (ic->ref="+code=max_responder_resourcelass="sref">max_respond =="L183"> 183
 145               r" ca href="+code=rem" caconnect_complete dp_ack_seq),;attr->max_respondes="sref">u32 max_respond">c_version));
 116       (ic->href="+code=max_initiator_deptlass="sref">max_ini =="L183"> 183
 187               r" ca href="+code=rem" caconnect_complete dp_ack_seq),;attr->max_inies="sref">u32 max_init>c_version));
 168       (ic->rtry_e posponder_resourcelatry_e pos"sref">rds_ibdev =r" ca href="+code=rem" caconnesref">conndp_ack_seq),;c_version));
 189       (ic->nr_;rtry_e posponder_resourcelnr_;rtry_e pos"sref">7>c_version));
 120
 186        if ((3,1)) {
  92               mems >= sizeof(*c_version));
 133                dp->ic = conn-> 194                dp->ic = conn-> 145               (dp->dp_prss="sref">ic = RDS_PROTOCOL_MAJOR prots>c_version));
 176                dp->dp_prss="sref">ic = RDS_PROTOCOL_MINOR prots>c_version));
 187                dp->ic = pulassbem.c#L116" ic_faddrpulassbem.S_PROTOCOL_MINORG" clasSUPR" cEDclass="sr"+code=IB_QPS_RTG" clasSUPR" cEDclass="sr"prots>c_version));
 118               (dp->err = (ic);
 169
 150 184        
 181 186        if  ic-> 182        sref">conn, unsigned intcic);
 183
 194        >, unsigned intcqp_state = qp, &(ic-> 195                       (dp->ic = pulassbecredits);
 196                       "srmic_sub+code=IB_QPS_RT"srmic_subconnect_completelasSET_POST_CREDI="+code=IB_QPS_RTS" SET_POST_CREDI="connect_complete(qp, &(ic->credits);
 187="L190"> 190}
 188
  89               (ic->.ss="sref">ic =(credits);
 150               (ic->.privaata_len >= sizeof(*credits);
 f">credits);
credits);
 183
 192static void         struct rds_ib_device   192a> >= sizeof(*"+code=private_dat="sref">tiator_depth)
(3,1)) {
 116        dsdebuib_recv_init_ring" debuiconnec">KERN_ERR ,
 137 _ib_device  ic-> static void rds_i_ib_device  ic-> tef">credits);
  78}
 169
 11"static void         struct rds_ib_device   192a> >= sizeof(*"+code=private_dat="sref">tiator_depth)
(3,1)) {
_conn_param(struct rds_connection *ic =("+code=private_dat="sref">ef">credits);
_conn_param(struct rds_ib_connection *ic = conn->c_transport_data;
 134
 165        KERN_ERR ,(conn,(  ic->  134
 146 static void rds_i_ib_device  ic-> credits);
 177
switch32        if (event-> case">qp_state = (3,1)) {
 150                (ic->qp_attr, credits);
 151breakef">credits);
default:OCOL(3,1)) {
 153                KERN_ERR l QP E" cl%pIte_ipads) u.%u failed,"
 154       ef">KERN_ERR  155        _ib_device  ic-> static void rds_i_ib_device  ic->  156                        &conn->qp, & conn->credits);
 157aram(struct conn);
 118breakef">credits);
e="L78">  78}
 190}
 2um.c#L112" id="L12t/rds/ib_2m.c#L162" id="L162" clas2="lin2" name="L162"> 162/*
 163ca">/ulrecvow tle/* IISlassses in as arou  * o, we use a rather
 104 

105 int " class="up"+code=ib_modify_q " class="up"+cconne 129 struct rds_connection *) (3,1)) { 128 struct rds_ib_connection *ic = conn->c_transport_data 129 struct rds_ib_device ef="+code=rds_ibdess="sref">rds_ibdev = ic->i_cm_id->f="+code=rds_ib_devics="sref">ransport_data 200 structhreqpsef">ref="+code=ib_qp_attr" claef">ref="name= "sa href="+code=attr" classansport_data 200 struct rds_ib_device * 113 int ret; 183 "L162"> 162/* 185/* uif 185th outgoing and inc rarespos="comment">/* 185/* uremoval, somentdo make suk" cl a warntgo from 3.0 to 3.1. 167 168 rds_ibdev =e" clasget_cli"sreode=c_transport_date" clasget_cli"sreode=connect_completeef="+code=rds_ibdess="sre="sref">conn); 186! 168 150 \n", EOPNOTSUPR"+code=rds_ibdeEOPNOTSUPRclass="sref">ret; 2um.c#L112" id="L12t/rds/ib_2m.c#L182" id="L182" clas2="lin2" name="L182"> 184 * Conn 173 e" clascla_ conn); 134 175 if ;attr->ic->qp_attrw_de=rds_ib_tune_rnw_dename=+ 1tiator_depth) 176 lmizode=rds_ib_device" clas;s_if">mizoconne="sref">qp, &(ic->dp_ack_seq),;attr->conn, 1); 175 if ;attr->ic->qp_attrw_de=rds_ib_tune_rnw_dename=+ 1tiator_depth) 118 lmizode=rds_ib_device" clas;s_if">mizoconne="sref">qp, &(ic->dp_ack_seq),;attr->conn, 1); 169 170 171 (ic->rds_ibdev =e" claef="+code=rds_ibdev" class="sre="sref">attr->pef="+code=i_cm_ipd"sreef">conn, 1); 62 (ic->rds_ibdev =e" claef="+code=rds_ibdev" class="sre="sref">attr->m"+code=ib_qp_attmclassansport_data 183 f">qp, &(ic->rds_ibdev = b>rdslassc"+code=dp_ack_se;b>rdslassc"connect_completeef="+code=rds_ibdess="sre,"static void ehandlcode=min_rnr_time ehandlco"sre,="L183"> 183 195 118"> 118 l,( 183 196 118"> 118 ic->qp_attrw_de=rds_ib_tune_rnw_dename=+ 1, 0ref">conn, 1); 175 if ISlass+code=IB_QPS_RTSSlass="srOTOCOL_MINOR(ic->(3,1)) { 118 lrds_ibdev =PTRlass+code=IB_QPS_RTPTRlass="srOTOCOL_MINOR(ic->conn, 1); 89 (ic->rds_ibdev = conn, 1); 150 KERN_ERR rdslassc" lassib_upda: TATE, RTS): err=%d\n",lconn, 1); 30 name="L151"> 151goto\n",oua href="+code=reoualassef">conn, 1); ="L190"> 190} 183 174 (ic->rds_ibdev = b>rdslassc"+code=dp_ack_se;b>rdslassc"connect_completeef="+code=rds_ibdess="sre,"static void ehandlcode=min_rnr_time ehandlcolass=="L183"> 183 145 118"> 118 l,( 183 196 118"> 118 ic->qp_attrw_de=rds_ib_tune_rnw_dename, 0ref">conn, 1); 175 if ISlass+code=IB_QPS_RTSSlass="srOTOCOL_MINOR(ic->(3,1)) { 118 lrds_ibdev =PTRlass+code=IB_QPS_RTPTRlass="srOTOCOL_MINOR(ic->conn, 1); 89 (ic->rds_ibdev = conn, 1); 150 KERN_ERR rdslassc" s="sib_upda: TATE, RTS): err=%d\n",lconn, 1); 151goto\n",oua href="+code=reoualassef">conn, 1); ="L190"> 190} 183 174 lrds_ibdev =hres=q_notif=sc"+code=dp_ack_se;b>s=q_notif=sc"="srOTOCOL_MINOR(ic->qp_attr, conn, 1); 175 if ;(3,1)) { 176 KERN_ERR s=q_notif=sc" lassib_upda: TATE, RTS): err=%d\n",lconn, 1); 187goto\n",oua href="+code=reoualassef">conn, 1); 158 } 169 174 lrds_ibdev =hres=q_notif=sc"+code=dp_ack_se;b>s=q_notif=sc"="srOTOCOL_MINOR(ic->qp_attr, conn, 1); 175 if ;(3,1)) { 182 KERN_ERR s=q_notif=sc" s="sib_upda: TATE, RTS): err=%d\n",lconn, 1); 153goto\n",oua href="+code=reoualassef">conn, 1); 158 } 170 f">attr->memsqp, &"sa href="+code=attr" classs 0,ta_lenqp, &"sa href="+code=attr" class"tef">credits); 168 "sa href="+code=attr" classref">qp_attrs="srehandlcode=min_rnr_times="srehandlcoconnf">rds_ibdev =e" clasqpss="srehandlcode=min_rnr_time credits); 189 "sa href="+code=attr" classref">qp_attrqps9;reexa href="+code=reqps9;reexaconnf">rds_ibdev =(credits); 170 171 "sa href="+code=attr" classref">qp_attrcacode=ib_modify_qcaclassref">qp_attrs" class=w"+code=ib_qp_attm" class=w"clasf">rds_ibdev =hic->qp_attrw_de=rds_ib_tune_rnw_dename=+ 1ef">credits); 62 "sa href="+code=attr" classref">qp_attrcacode=ib_modify_qcaclassref">qp_attrs" cs="srw"+code=ib_qp_attm" cs="srw"clasf">rds_ibdev =hic->qp_attrw_de=rds_ib_tune_rnw_dename=+ 1ef">credits); 173 "sa href="+code=attr" classref">qp_attrcacode=ib_modify_qcaclassref">qp_attrs" class=sgode=rds_ib_devics" class=sgoconnf">rds_ibdev =e" claef="+code=rds_ibdev" class="sre="sref">attr->ransport_data 174 "sa href="+code=attr" classref">qp_attrcacode=ib_modify_qcaclassref">qp_attrs" cs="srsgode=rds_ib_devics" cs="srsgoconnf">rds_ibdev =G" clasRECV_SGEde=rds_ib_devicG" clasRECV_SGEf">ransport_data 165 "sa href="+code=attr" classref">qp_attrsq_sig_typode=rds_ib_devicsq_sig_typoconnf">rds_ibdev =S" SIGNALsREQ_Ws+code=IB_QPS_RTS" SIGNALsREQ_Wsf">ransport_data 116 "sa href="+code=attr" classref">qp_attrqpstypode=rds_ib_devicqpstypoconnf">rds_ibdev =S" QPT_RC+code=IB_QPS_RTS" QPT_RCf">ransport_dataf">attr->"sa href="+code=attr" classref">qp_attrsass=c"+code=dp_ack_selass=c""sref">rds_ibdev = ic-> 168 "sa href="+code=attr" classref">qp_attrs="src"+code=dp_ack_ses="src""sref">rds_ibdev = ic-> 169 170 185 162 163 174 lrds_ibdev =m" cladslass+code=ib_modify_q " cladslass+c="srOTOCOL_MINOR(ic->qp_attr,(ic->qp, &"sa href="+code=attr" class"ansport_data 175 if ;(3,1)) { 146 KERN_ERR ,lconn, 1); 187goto\n",oua href="+code=reoualassef">conn, 1); 158 } 169 174 ic->rds_ibdev =hre" clale&c_cohera href="+code=even 169 151>>>>>>>>>>>>>>>>>>>>>>>>>>>rds_ibdev =hic->qp_attrw_de=rds_ib_tune_rnw_dename=*="L169"> 169 182>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a_len 169 153>>>>>>>>>>>>>>>>>>>>>>>>>>>="sref">qp, &(ic->qp_attr,GFP_KERNE href="+code=NULGFP_KERNE clasPef">conn, 1); 186! 168 ic->(3,1)) { 155 174 ln", ENOMEM href="+code=reENOMEMlassef">conn, 1); 156 KERN_ERR " clale&c_cohera h lassib_updaRTS): err=%Pef">conn, 1); 157goto\n",oua href="+code=reoualassef">conn, 1); 158 } 169 174 ic->rds_ibdev =hre" clale&c_cohera href="+code=even 169 151>>>>>>>>>>>>>>>>>>>>>>>>>>>rds_ibdev =hic->qp_attrw_de=rds_ib_tune_rnw_dename=*="L169"> 169 182>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a_len 169 153>>>>>>>>>>>>>>>>>>>>>>>>>>>="sref">qp, &(ic->qp_attr,GFP_KERNE href="+code=NULGFP_KERNE clasPef">conn, 1); 186! 168 ic->(3,1)) { 155 174 ln", ENOMEM href="+code=reENOMEMlassef">conn, 1); 156 KERN_ERR " clale&c_cohera h s="sib_updaRTS): err=%Pef">conn, 1); 157goto\n",oua href="+code=reoualassef">conn, 1); 158 } 169 174 ic->rds_ibdev =hre" clale&c_cohera href="+code=even a_len 169 151>>>>>>>>>>>>>>>>>>>>>>>="sref">qp, &(ic->qp_attr,GFP_KERNE href="+code=NULGFP_KERNE clasPef">conn, 1); 186! 168 ic->(3,1)) { 153 n", ENOMEM href="+code=reENOMEMlassef">conn, 1); 156 KERN_ERR " clale&c_cohera h ack b_updaRTS): err=%Pef">conn, 1); 155goto\n",oua href="+code=reoualassef">conn, 1); 158 } 177 168 ic->rds_ibdev =vzale&c_na> ponder_resourcevzale&c_na> ="srOTOCOL_MINOR(ic->qp_attrw_de=rds_ib_tune_rnw_dename=*>a_len 169 89>>>>>>>>>>>>>>>>>>>rds_ibdev =hrss=lassna> ponder_resourcehrss=lassna> ="srOTOCOL_MINORef="+code=rds_ibdess="sre"tef">credits); 186! 168 ic->(3,1)) { 151 n", ENOMEM href="+code=reENOMEMlassef">conn, 1); 182 KERN_ERR conn, 1); 153goto\n",oua href="+code=reoualassef">conn, 1); 158 } 116 ic->rds_ibdev =vzale&c_na> ponder_resourcevzale&c_na> ="srOTOCOL_MINOR(ic->qp_attrw_de=rds_ib_tune_rnw_dename=*>a_len 169 157>>>>>>>>>>>>>>>>>>>rds_ibdev =hrss=lassna> ponder_resourcehrss=lassna> ="srOTOCOL_MINORef="+code=rds_ibdess="sre"tef">credits); 186! 168 ic->(3,1)) { 89 n", ENOMEM href="+code=reENOMEMlassef">conn, 1); 150 KERN_ERR conn, 1); 151goto\n",oua href="+code=reoualassef">conn, 1); 158 } 183 f">qp, &lrelaponder_resourcelrela="srOTOCOL_MINOR(conn, 1); 116 KERN_ERR ,(qp_attr,(ic->qp_attr,(ic-> 169 157>TOCOL_MINOR(ic->qp_attr,(ic->conn, 1); conn, 1); ,oua href="+code=reoualass:OCOL(3,1)) { 174 l" class="_pua href="+code=rel" class="_pua="srOTOCOL_MINORe" claef="+code=rds_ibdev" class="srePef">conn, 1); 40 name="L151"> \ conn, 1); } 183 l" clasprotocolref">L11bl ponder_resourcel" clasprotocolref">L11bl ="srO struct < clama 183 n" st> 128 struct rds_ibdev = ic->paramref="+code=evenparam claref">qp_attr(qp_attrprivat eode=c_transport_datprivat eode=clasef">conn, 1); f">attr->um.c#L116" iode=reu1 name=ef">qp_attr(conn, 1); 168 um.c#L132" iode=reu3" name 174 verse=rds_ib_connectioverse=rclasf">0ef">conn, 1); 169 170 185 162 163 104ehich aremef">ial_ledrecvzero from 3.0 to 3.1. 185 185 167 163 169 170 175! 168 ic->paramref="+code=evenparam claref">qp_attr(qp_attrprivat eode=_le href="+code=conprivat eode=_le clasPOTOCOL(3,1)) { 182 k" claponder_resourcek" cla="srOTOCOL_MINORKERN_NOTICEde=rds_ib_devicKERN_NOTICE name ">KERN_ERR (3,1)) { 153="L170"> 170 a> conn, 1); 156 \0ef">conn, 1); 158 } f170 1illvwantrecvcheck it. -ASG mg flow control */ 186 168 ic->paramref="+code=evenparam claref">qp_attr(qp_attrprivat eode=_le href="+code=conprivat eode=_le clas=">c_va_len< (* structdcode=ib_modify_qdpclas) ||ontrol */ 89 structdcode=ib_modify_qdpclasref">i_cm_id->fpsprotocolrmajo"+code=ib_qp_attfpsprotocolrmajo"clasf"">0"="L183"> 183 150 \i_cm_id->G" cPROTOCOL_3_0+code=ib_qp_attG" cPROTOCOL_3_0clasef">conn, 1); 2um.c#L112" id="L14t/rds/ib_4m.c#L132" id="L132" clas4="lin43" name="L62"> 62 (rds_ibdev =be16lasscpuds_ib_connectiobe16lasscpu="srOTOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpsprotocolrminorrmasaponder_resourcefpsprotocolrminorrmasaclas) ="sre>rds_ibdev =G" clasSUPRORTEDcPROTOCOLS+code=ib_qp_attG" clasSUPRORTEDcPROTOCOLSclasef">conn, 1); 186 168 dcode=ib_modify_qdpclasref">i_cm_id->fpsprotocolrmajo"+code=ib_qp_attfpsprotocolrmajo"clasf"">3 ="sre="sre>rds_ibdev =((3,1)) { 156 verse=rds_ib_connectioverse=rclasf">i_cm_id->G" cPROTOCOL_3_0+code=ib_qp_attG" cPROTOCOL_3_0clasef">conn, 1); 155ehile (6 168 (ef">= 1) !">0"="L183"> 183 196 verse=rds_ib_connectioverse=rclas++ef">conn, 1); 158 } 168 k" cla_rat limiteef="+code=i_cm_ip" cla_rat limitee="srOTOCOL_MINORKERN_NOTICEde=rds_ib_devicKERN_NOTICE name ">KERN_ERR (3,1)) { 89>>>>>>>>c">KERN_ERR L11bl pprotocol verse=r B: cou.B: cou failed (%d)OCOL(3,1)) { 150>>>>>>>>="sref">qp, &dcode=ib_modify_qdpclasref">i_cm_id->fpssadd"+code=ib_qp_attfpssadd""sre,="L169"> 169 151>>>>>>>> 168 dcode=ib_modify_qdpclasref">i_cm_id->fpsprotocolrmajo"+code=ib_qp_attfpsprotocolrmajo"clas,="L169"> 169 182>>>>>>>>TOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpsprotocolrminorponder_resourcefpsprotocolrminor"srePef">conn, 1); \i_cm_id->verse=rds_ib_connectioverse=rclasef">conn, 1); struct 187>>>>>>>>>>>>>>>>>>>> struct < clama 183 189 __bem.c#L164" ie=even__bem. name 174 lguref="+code=i_cm_ilgureclasf">i_cm_id->amaref="+code=i_cm_i class="sref">i_cm_id->rout ponder_resourcelout lassref">qp_attrpathi_cm_id->sgref="+code=i_cm_isgrelassref">qp_attrglobalf="+code=i_cm_igloballassref">qp_attr clerfacehref="+code=i_cm_idclerfacehreclasef">conn, 1); 174 __bem.c#L164" ie=even__bem. name 174 fguref="+code=i_cm_ifgureclasf">i_cm_id->amaref="+code=i_cm_i class="sref">i_cm_id->rout ponder_resourcelout lassref">qp_attrpathi_cm_id->dgref="+code=i_cm_idgrelassref">qp_attrglobalf="+code=i_cm_igloballassref">qp_attr clerfacehref="+code=i_cm_idclerfacehreclasef">conn, 1); n" st> 128 struct rds_ibdev = ic->paramref="+code=evenparam claref">qp_attr(qp_attrprivat eode=c_transport_datprivat eode=clasef">conn, 1); 128 struct conn, 1); 128 struct rds_ibdev = conn, 1); 128 struct rds_ibdev = conn, 1); struct < cla="+_paramref="+code=even < cla="+_paramname=ef">qp_attr(<"+_paramref="+code=evena="+_paramnameef">conn, 1); 116 um.c#L132" iode=reu3" name 174 verse=rds_ib_connectioverse=rclasef">conn, 1); cla> structerode=min_rnr_timesr"clasf">1ref">qp_attr,de oyode=ib_modify_qde oyclasf">1ef">conn, 1); conn, 1); 170 174 verse=rds_ib_connectioverse=rclasf">i_cm_id->l" clasprotocolref">L11bl ponder_resourcel" clasprotocolref">L11bl ="srO struct conn, 1); 175! 168 verse=rds_ib_connectioverse=rclas"="L183"> 183 182goto\n",oua href="+code=reoualassef">conn, 1); 183 i_cm_id->l" debuib_recv_init_ring" debuiconnec">KERN_ERR (3,1)) { 155>c">KERN_ERR qp, &dcode=ib_modify_qdpclasref">i_cm_id->fpssadd"+code=ib_qp_attfpssadd""sre,\="sref">qp, &dcode=ib_modify_qdpclasref">i_cm_id->fpsdadd"+code=ib_qp_attfpsdadd""sre,="L169"> 169 156>i_cm_id->G" cPROTOCOL_MAJOs+code=IB_QPS_RTG" cPROTOCOL_MAJOs="srO structverse=rds_ib_connectioverse=rclas"ref">qp_attr,G" cPROTOCOL_MINOs+code=IB_QPS_RTG" cPROTOCOL_MINOs="srO structverse=rds_ib_connectioverse=rclas"r="L169"> 169 157 (unsigned long long)rds_ibdev =be64lasscpuds_ib_connectiobe64lasscpu="srO structlguref="+code=i_cm_ilgureclas"r="L169"> 169 118 (unsigned long long)rds_ibdev =be64lasscpuds_ib_connectiobe64lasscpu="srO structfguref="+code=i_cm_ifgureclas"tef">credits); 169 174 ards_ibdev =l" cng aladslasponder_resourcel" cng aladslas="srOTOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpsdadd"+code=ib_qp_attfpsdadd""sre,>TOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpssadd"+code=ib_qp_attfpssadd""sre,\="sref">qp, &l" clastransportponder_resourcel" clastransport"sre,="L169"> 169 151>>>>>>>>>>>>>>>f">qp, &GFP_KERNE href="+code=NULGFP_KERNE clasPef">conn, 1); 186f">qp, &ISlass+code=IB_QPS_RTSSlass="srOTOCOL_MINORa(3,1)) { 153 KERN_ERR ,PTRlass+code=IB_QPS_RTPTRlass="srOTOCOL_MINORaconn, 1); 156 ards_ibdev = conn, 1); 155goto\n",oua href="+code=reoualassef">conn, 1); 158 } 177 170 167ehile he flow control */ 167e.g. inicase of b_upover from 3.0 to 3.1. 185iatda simultaneouslyfrom 3.0 to 3.1. 162 163 104 165 mutex_lolaponder_resourcemutex_lola="srO="sref">qp, &ai_cm_id->clamalolaponder_resourceclamalolaclasPef">conn, 1); 175! 168 " cng altransi incponder_resourcel" cng altransi inc="srOTOCOL_MINORaqp_attr,G" cCONN_DOWN+code=IB_QPS_RTG" cCONN_DOWNlassref">qp_attr,G" cCONN_CONNECTING+code=IB_QPS_RTG" cCONN_CONNECTINGlassPROTOCOL(3,1)) { 157 175 if ;" cng al="L1sponder_resourcel" cng al="L1s="srOTOCOL_MINORaf">qp_attr,G" cCONN_UP+code=IB_QPS_RTG" cCONN_UPlassPfTOCOL(3,1)) { 118 "L165"> 165 KERN_ERR ehile n" and ingRTS): err=%Pef">conn, 1); 89 "L165"> 165 conn, 1); 150 "L165"> 165 aca hlistealalosdsh="Ll ponder_resourceaca hlistealalosdsh="Ll lassPef">conn, 1); 151} elsef">conn, 1); 182 175 if ;" cng al="L1sponder_resourcel" cng al="L1s="srOTOCOL_MINORaf">qp_attr,G" cCONN_CONNECTING+code=IB_QPS_RTG" cCONN_CONNECTINGlassPfTOCOL(3,1)) { 153="L170"> 170 may 1illvbntsucceedtgoimg flow control */ 156 "L165"> 165 aca hf="+codsraceef="+code=i_cm_iaca hf="+codsraceelassPef">conn, 1); 155 158 } 156goto\n",oua href="+code=reoualassef">conn, 1); 158 } conn, 1); 189 (rds_ibdev =ai_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn, 1); conn, 1); 50 name="L151"> 165 aqp_attr,verse=rds_ib_connectioverse=rclas"ef">conn, 1); 62 qp_attr,be32lasscpuds_ib_connectiobe32lasscpu="srOTOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpscredta href="+code=refpscredtalassPRef">conn, 1); 183 i170 t packet ia saw,pprocess>it saas> 1 flow control */ 185 175TOCOL_MINORecode=ib_modify_qdpclasref">i_cm_id->fpsclasse"+code=dp_ack_sefpsclasse"clas"="L183"> 183 157 62 aqp_attr,be64lasscpuds_ib_connectiobe64lasscpu="srO structecode=ib_modify_qdpclasref">i_cm_id->fpsclasse"+code=dp_ack_sefpsclasse"clas"ref">qp_attr, conn, 1); conn, 1); 189 BUG_ON+code=IB_QPS_RTBUG_ON="srOTOCOL_MINORamaref="+code=i_cm_i class="sref">i_cm_id->n" tsxa href="+code=ren" tsxalassRef">conn, 1); 174 BUG_ON+code=IB_QPS_RTBUG_ON="srOTOCOL_MINOR(ic->conn, 1); 2um.c#L112" id="L15t2rds/ib_5m.c#L112" id="L112" clas5="lin51" name="L62"> 62 (ic->i_cm_id->amaref="+code=i_cm_i class="sef">conn, 1); 62 amaref="+code=i_cm_i class="sref">i_cm_id->n" tsxa href="+code=ren" tsxalassf">rds_ibdev =aconn, 1); conn, 1); i170 got h/lfwayrehroughusetttgoiupihe href="+codinc,> 17w flow control */ 185f">attr->de oyode=ib_modify_qde oyclasf">0ef">conn, 1); conn, 1); 189 erode=min_rnr_timesr"clasf"> 62 aconn, 1); 186 168 rode=min_rnr_timesr"clasPfTOCOL(3,1)) { 151 " chref="+_sr"orponder_resource " chref="+_sr"or="srOTOCOL_MINORaKERN_ERR , rode=min_rnr_timesr"clasPef">conn, 1); 182goto\n",oua href="+code=reoualassef">conn, 1); 158 } conn, 1); 165 l" clasfmefillla="+_paramref="+code=even < clasfmefillla="+_param="srOTOCOL_MINORaqp, &aqp, &dcsrecode=ib_modify_qdpsrecclasref">qp_attr,verse=rds_ib_connectioverse=rclas,="L169"> 169 156 ic->paramref="+code=evenparam claref">qp_attr(qp_attrrespondersresourcesref="+code=even espondersresourcesclas,="L169"> 169 157 62 ic->paramref="+code=evenparam claref">qp_attr(qp_attref">iator_depthf="+code=i_cm_idf">iator_depthclasPef">conn, 1); conn, 1); 170 174 erode=min_rnr_timesr"clasf"> 62 < clacceptref="+code=even < claccept="srOTOCOL_MINORamaref="+code=i_cm_i class="sre="sref">qp, &aconn, 1); 175n", rode=min_rnr_timesr"clasPf">conn, 1); 182 " chref="+_sr"orponder_resource " chref="+_sr"or="srOTOCOL_MINORaKERN_ERR , rode=min_rnr_timesr"clasPef">conn, 1); 183 (3,1)) { 175n",a(3,1)) { 196n",mutex_unlolaponder_resourcemutex_unlola="srO="sref">qp, &ai_cm_id->clamalolaponder_resourceclamalolaclasPef">conn, 1); 175n", rode=min_rnr_timesr"clasPf">conn, 1); 118 62 < cls=jnd ref="+code=even < cls=jnd ="srOTOCOL_MINORamaref="+code=i_cm_i class="sref">qp_attr, conn, 1); \i_cm_id->de oyode=ib_modify_qde oyclasef">conn, 1); 2um.c#L112" id="L15t/rds/ib_5m.c#L142" id="L142" clas5="lin54 name 2um.c#L112" id="L15t/rds/ib_5m.c#L143" id="L143" clas5="lin54 name cla> struct iatdsf="+codponder_resourcel" clasfmeef">iatdsf="+cod="srO struct < clamaref="+code=i_cm_i < clamarename=* structamaref="+code=i_cm_i class="sPf">conn, 1); struct rds_ibdev =amaref="+code=i_cm_i class="sref">i_cm_id->n" tsxa href="+code=ren" tsxalassef">conn, 1); struct rds_ibdev =ai_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn, 1); struct < cla="+_paramref="+code=even < cla="+_paramname=ef">qp_attr(<"+_paramref="+code=evena="+_paramnameef">conn, 1); struct conn, 1); cla> struct conn, 1); conn, 1); i170 iatinc,>we must flow control */ 162 62 aqp_attr,G" cPROTOCOL_3_0+code=ib_qp_attG" cPROTOCOL_3_0clasPef">conn, 1); 62 (ic-> 62 i170 116 62 aconn, 1); 175n", (3,1)) { 118 62 < chref="+_sr"orponder_resource " chref="+_sr"or="srOTOCOL_MINORaKERN_ERR , conn, 1); 89goto\n",oua href="+code=reoualassef">conn, 1); 158 } 2um.c#L112" id="L15t/rds/ib_5m.c#L162" id="L162" clas5="lin56" name="L62"> 62 aqp, &aqp, &dcode=ib_modify_qdpclasref">qp_attr,G" cPROTOCOL_VERSION+code=IB_QPS_RTG" cPROTOCOL_VERSIONclas,="L169"> 169 153 UINT_MAX+code=IB_QPS_RTUINT_MAXclasref">qp_attr,UINT_MAX+code=IB_QPS_RTUINT_MAXclasPef">conn, 1); i_cm_id->l 62 < cla="+nd ref="+code=even < clf="+cod="srOTOCOL_MINORamaref="+code=i_cm_i class="sre="sref">qp, &aconn, 1); 175n", conn, 1); 156 62 < chref="+_sr"orponder_resource " chref="+_sr"or="srOTOCOL_MINORaKERN_ERR conn, 1); 177 (3,1)) { 170 tgoinon-zerou>ellsihe < clam to\de oycllow control */ 167 185 186f">qp, & (3,1)) { 153 186f">qp, &(ic->rds_ibdev =amaref="+code=i_cm_i class="sPf">conn, 1); 156="L154">i_cm_id->l0ef">conn, 1); 158 } \i_cm_id-> conn, 1); conn, 1); struct conn, 1); struct rds_ibdev =ai_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn, 1); 128 structsockadd"_i href="+code=consockadd"_i name=i_cm_id->srqp_attr,de ode=ib_modify_qde lassef">conn, 1); cla> struct conn, 1); conn, 1); i170 i170 f">attr->(ic->i_cm_id-> < cladslasaref="+code=i_cm_i < cladslasare="srOTOCOL_MINORl" c < clama i_cm_id-> 3ex">i170 169 165 4">i_cm_id->l, 1); 89 "/a>, &ISlass+code=IB_QPS_RTSSlass="srOTOCOL_MINORaic->conn(3,1)) { 150 "L165"> 1>->l 62 < cla="+nde=IB_QPS_RTPTRlass="srOTOCOL_MINORaic->conn, 1); 151} elsef">c>->(ic->i_cm_id-> < cladsla+code=NULL" classef">conn, 1); 182 175 Rl" c < clama v_init_ring" debuiconnec">KERN_ERR conn, 1); 153="L170"> 1t;,oua href="+code=reoualassef">conn, 1); 156 " } } 116 KERN_ERR , ic->i_cm_id , 1); 177 598"> 168 k" cla_rat"+code=isrqp_attref">iator_sin_famildify_qde oyclasin_famildm_id-> < cladslaAF_INETify_qde oyclaAF_INETnn, 1); 189 (qp_attref">iator_sin_ib_qp_attfpssadd""ssin_ib_qp_attref">iator_s_ib_qp_attfpssadd""ss_ib_qp_ata =be64lasscp+code=conn" classref">i_cm_id->cltransportelib_qp_attfpssadd""stelib_qnn, 1); 600"> 174 erode=min_"+code=isrqp_attref">iator_sin__resourcel" clastrasin__resp_ata 1 =be64lasscphtone=even espondershtoneRN_ER, 1); 50 n6me="L601"> 2um.c#L112" id="L15t/rds/ib_6m.c#L192"6id="L192" clas5="lin50" 6ame="662"> 62 connef">iator_sin_famildify_qde oyclasin_famildm_id-> < cladslaAF_INETify_qde oyclaAF_INETnn, 1); 62 connef">iator_sin_ib_qp_attfpssadd""ssin_ib_qp_attref">iator_s_ib_qp_attfpssadd""ss_ib_qp_ata =be64lasscp+code=conn" classref">i_cm_id->cltransportefib_qp_attfpssadd""stefib_qnn, 1); i_cm_id->lconnef">iator_sin__resourcel" clastrasin__resp_ata 1 =be64lasscphtone=even espondershtoneRN_ER,G" cPROTOCOL_VEORTify_qde oyclaOL_VEORT170"/a>, 1); } 116 62 aic->conn<, struct , &aqp_att } 157 62 struct , &aconn60s/ib_4m.ct 165 4">i_cm_,G" cPROTOCOL_VPlMA_RESOLVE_TIMEOUT_MSify_qde oyclaOL_VPlMA_RESOLVE_TIMEOUT_MS170"/a>, 1); 89 "/a>, &ISlass+cod+code=ret" clasPfTOCOL(3,1)) { 150 "L165"> 1>->lKERN_ERR , ic->conn<,,1)) { 151>>>>>>>>>>>>>>>f">qpan>, conn, 1); 182 175 Rl" c < clama"srow conte=i_cm_i < cladslasare=ow conte=i_MINORaic->conn, 1); 153 UINT_MAX+c+code=ic" class="sref">ic->i_cm_id-> < cladsla+code=NULL" classef">conn, 1); 614"> 156 " } } 18an>,oua href="+code=reoualassef">connf">attr-> conn, 1); 6onn 169 167 185 162 163624"> 104 1voRl" c < clama <"+cod="sshutdowsourcel" chref="+codincnamesshutdows_MINO struct conn, 1); 13,1)) { struct < cla="+_paodincponder_resourcel" chref="+codincname=* struct(rds_ibdev =ai_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn, 1); 62s/ib_4m.ct 1ref">qp_a/a>, 1); 169 174 erode=min_+a v_init_ring" debuiconnec">KERN_ERR , ic->i_cm_id 69 151>>>>>>>>>>>pan>, ic->ic->ic-> 182 UINT_MAX+c+code=ic" class="sref">ic->i_cm_idic->i_cm_idic->, conn, 1); 183 156 "/a>, &(ic->rds_ib>(3,1)) { 155 158 struct < cla="+_t/rdevicsourcel" clasf="t/rdevics struct(v_ibdev =aic->i_cm_idic-> 1>, 1); 157 62 KERN_ERR ehim37SvB: #37;d)\n", ic->i_cm_id/a>, 1); 118 62 < cls=jndrnr_timesr"clasf"> 62 < clacceptref=disname=* _cm_i < cladslasare=oisname=* _MINORaic->conn, 1); 89goto\n&quoa> rode=min_rnr_timesr"clasPfTOCOL(3,1)) { 150 "L165"> 165 185c with ou g and >ehile n" to 3.1. 162 153="L170"> 170 KERN_ERR 156="L154">i_cm_id ic->i_cm_id conn, 1); 155 158 } 1>, 1); 157 62 7 62 167ake he plbtrol */ 657"> 167 185 162 163 104 185 156 62 < chref="we -_+code=event" class=swe -_+code_MINORa 157 62 Ra, &aic->(,,69 118 62 ORaic-> 89goto\n&quo>->ic->, 1); , 1); 151>>>>>>>>>>/a>, &(ic-> 182 o\n&quo>->av_ibd 69 153 57 62 Raic->tref">iator_w_nr_timesr"clasPefw_nr s69 156="L154">i_cm_id sizeofO struct -> 3ex">i170 155 158 57 62 Raic-> 156 62 57 62 Raic-> 177 118 62 /a>, &(ic-> 89goto\n&quo Raav_ibd 69 150 "L165"> 165 62 Raic->ef">iator_w_nr_timesr"clasPefw_nr s69 151>>>>>>>>>>>>>>>f">qqqqqqqqqqqqqqqqqqqqqqqqsizeofO struct -> 3ex">i170 182 o\n&quo62 Raic-> 153 186f">qp< o\n&quo62 Raic-> 155 158 /a>, &(ic-> 156 62 57 Raav_ibd qsizeofO struct -> 3ex">i170 157 62 Raic->ic->, 1); 6onn, 1); 89goto\n&quoa> rode=min_+code=ic" class="sref">ic-> 150 "L165"> 165 aa/a>, 1); 151>>>>>>>>>>/a>, &(ic-> 182 o\n&quo>->a/a>, 1); 183 684"> 156="L154">i_/a>, &(ic->rds_ibic->, 1); 155 158 57 < clacceptref=dw conteodify_q "aca h=etupef=dw conteod_MINORaic->conn, 1); 156 62 /a>, &(ic->, 1); 157 62 Raaic->, 1); 169 1/a>, &(ic->, 1); 89goto\n&quo Raaic->, 1); 150 "L165"> 1>->laic->conn, 1); 2um.c#L112" id="L15t/rds/ib_6m.c#L192"6id="L192" clas4="lin49 n6me="L682"> 182 175 R7 163 104 155 158 /a>, &(ic-> 156 62 57 Raaic->, 1); 177 698"> 118 62 < cls=jnd+code=ic" class="sref">ic->i_cm_id-> < cladsla+code=NULL" classef">conn, 1); 89goto\n&quo>->ic->conn, 1); 700"> 150 "L165"> 1>->lic->i+cmdm_id-> < cladsla+code=NULL" classef">conn, 1); 151} elsef">c>->(ic->-> < cladsla+code=NULL" classef">conn, 1); 182 175 Rl" c < cla+code=ic" class="sref">ic->-> < cladsla+code=NULL" classef">conn, 1); 153 186f">qpaic->conn, 1); 156="L154">i_Raic->conn, 1); 155 158 Raic->conn, 1); 116 } f">attr->(aic->70nn, 1); 170 Clear plaes " tde=lmicontrol */ 150 "/a>, &(ic->co_odify_q "aca h=et+c">co_odm_id/(3,1)) { 151>>>>>>>>>> struct 2um.c#L112" id="L15t/rds/ib_7m.c#L113"7id="L113" clas5="lin513 7ame="713"> 153 UINT_MAX+c e=even < clasfmefonn =aaic->co_odify_q "aca h=et+c">co_odm_id,> struct conn, 1); 714"> 156="L154">i_Raa 155 158 Raic->co_odify_q "aca h=et+c">co_odm_id-> < cladsla+code=NULL" classef">conn, 1); 116 } 177 718"> 170 Clear a abACK stateontrol */ 189 (, &aic->, 1); 1#ifdef ( 177 189 (, &aic->, 1); 1#else>, 1); 62 ic->, 1); 724"> 1#laesf>, 1); 62 ic->, 1); 1>, 1); Clear flowbov trol stateontrol */ 728"> 168 k" cla_rat+code=ic" class="sref">ic-> 189 (, &aic->, 1); 189 (, &aic->/span>, , 1); 62 , &aic->, , 1); 183 156 "/a>, &(ic-> 155 158 pan>, , &aic-> 156 62 < chref="+code=ic" class="sref">ic->conn, 1); 157 } , 1); 189 (aic-> 174 erode=min_+code=ic" class="sref">ic->conn, 1); 189 (aic-> 62 ic->conn, 1); 1 } 177 1 struct conn, , 13,1)) { struct < cla="+_paodincponder_resourcel" chref="+codincname=* struct(rds_ibda>, 1); 168 unsigned longstruct < cla="+_flage=even espondersflagenn, 1); 89 "/ struct conn, 1); 75nn, 1); 189 62 -> < cladslakzallocode=ic" class="kzalloc_MINO izeofO struct , 1); cla> a>,! a77 156="L154">i_m_id 116 62 aaa>, 1); 157 /a>, &ISlass+cod+code=ret" clasPfTOCOL(3,1)) { 118 62 >-> < cladslak y "e=NULL" classefk y "_MINORaaa>, 1); 89goto\n&quom_id-> conn, 1); 174 } 2um.c#L112" id="L15t/rds/ib_7m.c#L162"7id="L162" clas5="lin56" 7ame="762"> 62 , &aic->aa>, 1); 153 >->ic->, , 1); 156="L154">i_cm_id(unsigned long) aa>, 1); 62 ic->aa>, 1); 1#ifndef ( 177 f">attr->(ic->aa>, 1); 1#laesf>, 1); 189 (, &aic->, 1); 189 162 163 104 62 , &aic->/span>, , 1); 116 , &aic->, , 1); 177 778"> 168 k" cla_rat+code=ic" class="sref">ic->conn =ai_cm_a>, 1); 189 (i_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn =aa>, 1); 189 (, 62 , &aic->tr, &a, 1); 153 >->, 78d"> 177 } 116 KERN_ERR , conn, i_cm_id->cltransporteode=c_transport_datcltransporteode=lassef">conn, 1); f">attr, 1); 169 169 167 185 162 1voRl" c < clama <"+cod="s y "e=NULL" classefma <"+cod="s y "RN_ERvostruct(a77 13,1)) { 155 1 struct < cla="+_paodincponder_resourcel" chref="+codincname=* struct(rds_ibdev =aa>, 1); 116 116struct(a>, 1); 177 798"> 168 k" cla_rat+cov_init_ring" debuiconnec">KERN_ERR , aa>, 1); "L165a> a>, a> =aic->ic->el" chref="spinlock_-">ev, &a, 1); attr->(a>, 1); , &aic->aa>, 1); (a>, 1); , 1); (aaa>, 1); >->aaa>, 1); , 1); aconnnn< 3 charucta name=* _dry_ORa, 1); , 1); attr->(, k" cla_rat+codvprintsefpsclasse"+b_nvprintsORa (

Tv 1original LXR softwarewe -ov 1} LXR ="couniINO _xr.="lux.no kind couostefory1} nn< ulhforaasplopera s services sinwih1995.