linux/drivers/infiniband/ulp/ipoib/ipoib_ib.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2004, 2005 Topspin Communications.  All rights reserved.
   3 * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
   4 * Copyright (c) 2005 Mellanox Technologies. All rights reserved.
   5 * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
   6 *
   7 * This software is available to you under a choice of one of two
   8 * licenses.  You may choose to be licensed under the terms of the GNU
   9 * General Public License (GPL) Version 2, available from the file
  10 * COPYING in the main directory of this source tree, or the
  11 * OpenIB.org BSD license below:
  12 *
  13 *     Redistribution and use in source and binary forms, with or
  14 *     without modification, are permitted provided that the following
  15 *     conditions are met:
  16 *
  17 *      - Redistributions of source code must retain the above
  18 *        copyright notice, this list of conditions and the following
  19 *        disclaimer.
  20 *
  21 *      - Redistributions in binary form must reproduce the above
  22 *        copyright notice, this list of conditions and the following
  23 *        disclaimer in the documentation and/or other materials
  24 *        provided with the distribution.
  25 *
  26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  30 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  31 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  32 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  33 * SOFTWARE.
  34 */
  35
  36#include <linux/delay.h>
  37#include <linux/dma-mapping.h>
  38
  39#include <linux/ip.h>
  40#include <linux/tcp.h>
  41
  42#include "ipoib.h"
  43
  44#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA
  45static int data_debug_level;
  46
  47module_param(data_debug_level, int, 0644);
  48MODULE_PARM_DESC(data_debug_level,
  49                 "Enable data path debug tracing if > 0");
  50#endif
  51
  52static DEFINE_MUTEX(pkey_mutex);
  53
  54struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
  55                                 struct ib_pd *pd, struct ib_ah_attr *attr)
  56{
  57        struct ipoib_ah *ah;
  58
  59        ah = kmalloc(sizeof *ah, GFP_KERNEL);
  60        if (!ah)
  61                return NULL;
  62
  63        ah->dev       = dev;
  64        ah->last_send = 0;
  65        kref_init(&ah->ref);
  66
  67        ah->ah = ib_create_ah(pd, attr);
  68        if (IS_ERR(ah->ah)) {
  69                kfree(ah);
  70                ah = NULL;
  71        } else
  72                ipoib_dbg(netdev_priv(dev), "Created ah %p\n", ah->ah);
  73
  74        return ah;
  75}
  76
  77void ipoib_free_ah(struct kref *kref)
  78{
  79        struct ipoib_ah *ah = container_of(kref, struct ipoib_ah, ref);
  80        struct ipoib_dev_priv *priv = netdev_priv(ah->dev);
  81
  82        unsigned long flags;
  83
  84        spin_lock_irqsave(&priv->lock, flags);
  85        list_add_tail(&ah->list, &priv->dead_ahs);
  86        spin_unlock_irqrestore(&priv->lock, flags);
  87}
  88
  89static void ipoib_ud_dma_unmap_rx(struct ipoib_dev_priv *priv,
  90                                  u64 mapping[IPOIB_UD_RX_SG])
  91{
  92        if (ipoib_ud_need_sg(priv->max_ib_mtu)) {
  93                ib_dma_unmap_single(priv->ca, mapping[0], IPOIB_UD_HEAD_SIZE,
  94                                    DMA_FROM_DEVICE);
  95                ib_dma_unmap_page(priv->ca, mapping[1], PAGE_SIZE,
  96                                  DMA_FROM_DEVICE);
  97        } else
  98                ib_dma_unmap_single(priv->ca, mapping[0],
  99                                    IPOIB_UD_BUF_SIZE(priv->max_ib_mtu),
 100                                    DMA_FROM_DEVICE);
 101}
 102
 103static void ipoib_ud_skb_put_frags(struct ipoib_dev_priv *priv,
 104                                   struct sk_buff *skb,
 105                                   unsigned int length)
 106{
 107        if (ipoib_ud_need_sg(priv->max_ib_mtu)) {
 108                skb_frag_t *frag = &skb_shinfo(skb)->frags[0];
 109                unsigned int size;
 110                /*
 111                 * There is only two buffers needed for max_payload = 4K,
 112                 * first buf size is IPOIB_UD_HEAD_SIZE
 113                 */
 114                skb->tail += IPOIB_UD_HEAD_SIZE;
 115                skb->len  += length;
 116
 117                size = length - IPOIB_UD_HEAD_SIZE;
 118
 119                frag->size     = size;
 120                skb->data_len += size;
 121                skb->truesize += size;
 122        } else
 123                skb_put(skb, length);
 124
 125}
 126
 127static int ipoib_ib_post_receive(struct net_device *dev, int id)
 128{
 129        struct ipoib_dev_priv *priv = netdev_priv(dev);
 130        struct ib_recv_wr *bad_wr;
 131        int ret;
 132
 133        priv->rx_wr.wr_id   = id | IPOIB_OP_RECV;
 134        priv->rx_sge[0].addr = priv->rx_ring[id].mapping[0];
 135        priv->rx_sge[1].addr = priv->rx_ring[id].mapping[1];
 136
 137
 138        ret = ib_post_recv(priv->qp, &priv->rx_wr, &bad_wr);
 139        if (unlikely(ret)) {
 140                ipoib_warn(priv, "receive failed for buf %d (%d)\n", id, ret);
 141                ipoib_ud_dma_unmap_rx(priv, priv->rx_ring[id].mapping);
 142                dev_kfree_skb_any(priv->rx_ring[id].skb);
 143                priv->rx_ring[id].skb = NULL;
 144        }
 145
 146        return ret;
 147}
 148
 149static struct sk_buff *ipoib_alloc_rx_skb(struct net_device *dev, int id)
 150{
 151        struct ipoib_dev_priv *priv = netdev_priv(dev);
 152        struct sk_buff *skb;
 153        int buf_size;
 154        u64 *mapping;
 155
 156        if (ipoib_ud_need_sg(priv->max_ib_mtu))
 157                buf_size = IPOIB_UD_HEAD_SIZE;
 158        else
 159                buf_size = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu);
 160
 161        skb = dev_alloc_skb(buf_size + 4);
 162        if (unlikely(!skb))
 163                return NULL;
 164
 165        /*
 166         * IB will leave a 40 byte gap for a GRH and IPoIB adds a 4 byte
 167         * header.  So we need 4 more bytes to get to 48 and align the
 168         * IP header to a multiple of 16.
 169         */
 170        skb_reserve(skb, 4);
 171
 172        mapping = priv->rx_ring[id].mapping;
 173        mapping[0] = ib_dma_map_single(priv->ca, skb->data, buf_size,
 174                                       DMA_FROM_DEVICE);
 175        if (unlikely(ib_dma_mapping_error(priv->ca, mapping[0])))
 176                goto error;
 177
 178        if (ipoib_ud_need_sg(priv->max_ib_mtu)) {
 179                struct page *page = alloc_page(GFP_ATOMIC);
 180                if (!page)
 181                        goto partial_error;
 182                skb_fill_page_desc(skb, 0, page, 0, PAGE_SIZE);
 183                mapping[1] =
 184                        ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[0].page,
 185                                        0, PAGE_SIZE, DMA_FROM_DEVICE);
 186                if (unlikely(ib_dma_mapping_error(priv->ca, mapping[1])))
 187                        goto partial_error;
 188        }
 189
 190        priv->rx_ring[id].skb = skb;
 191        return skb;
 192
 193partial_error:
 194        ib_dma_unmap_single(priv->ca, mapping[0], buf_size, DMA_FROM_DEVICE);
 195error:
 196        dev_kfree_skb_any(skb);
 197        return NULL;
 198}
 199
 200static int ipoib_ib_post_receives(struct net_device *dev)
 201{
 202        struct ipoib_dev_priv *priv = netdev_priv(dev);
 203        int i;
 204
 205        for (i = 0; i < ipoib_recvq_size; ++i) {
 206                if (!ipoib_alloc_rx_skb(dev, i)) {
 207                        ipoib_warn(priv, "failed to allocate receive buffer %d\n", i);
 208                        return -ENOMEM;
 209                }
 210                if (ipoib_ib_post_receive(dev, i)) {
 211                        ipoib_warn(priv, "ipoib_ib_post_receive failed for buf %d\n", i);
 212                        return -EIO;
 213                }
 214        }
 215
 216        return 0;
 217}
 218
 219static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
 220{
 221        struct ipoib_dev_priv *priv = netdev_priv(dev);
 222        unsigned int wr_id = wc->wr_id & ~IPOIB_OP_RECV;
 223        struct sk_buff *skb;
 224        u64 mapping[IPOIB_UD_RX_SG];
 225
 226        ipoib_dbg_data(priv, "recv completion: id %d, status: %d\n",
 227                       wr_id, wc->status);
 228
 229        if (unlikely(wr_id >= ipoib_recvq_size)) {
 230                ipoib_warn(priv, "recv completion event with wrid %d (> %d)\n",
 231                           wr_id, ipoib_recvq_size);
 232                return;
 233        }
 234
 235        skb  = priv->rx_ring[wr_id].skb;
 236
 237        if (unlikely(wc->status != IB_WC_SUCCESS)) {
 238                if (wc->status != IB_WC_WR_FLUSH_ERR)
 239                        ipoib_warn(priv, "failed recv event "
 240                                   "(status=%d, wrid=%d vend_err %x)\n",
 241                                   wc->status, wr_id, wc->vendor_err);
 242                ipoib_ud_dma_unmap_rx(priv, priv->rx_ring[wr_id].mapping);
 243                dev_kfree_skb_any(skb);
 244                priv->rx_ring[wr_id].skb = NULL;
 245                return;
 246        }
 247
 248        /*
 249         * Drop packets that this interface sent, ie multicast packets
 250         * that the HCA has replicated.
 251         */
 252        if (wc->slid == priv->local_lid && wc->src_qp == priv->qp->qp_num)
 253                goto repost;
 254
 255        memcpy(mapping, priv->rx_ring[wr_id].mapping,
 256               IPOIB_UD_RX_SG * sizeof *mapping);
 257
 258        /*
 259         * If we can't allocate a new RX buffer, dump
 260         * this packet and reuse the old buffer.
 261         */
 262        if (unlikely(!ipoib_alloc_rx_skb(dev, wr_id))) {
 263                ++dev->stats.rx_dropped;
 264                goto repost;
 265        }
 266
 267        ipoib_dbg_data(priv, "received %d bytes, SLID 0x%04x\n",
 268                       wc->byte_len, wc->slid);
 269
 270        ipoib_ud_dma_unmap_rx(priv, mapping);
 271        ipoib_ud_skb_put_frags(priv, skb, wc->byte_len);
 272
 273        skb_pull(skb, IB_GRH_BYTES);
 274
 275        skb->protocol = ((struct ipoib_header *) skb->data)->proto;
 276        skb_reset_mac_header(skb);
 277        skb_pull(skb, IPOIB_ENCAP_LEN);
 278
 279        ++dev->stats.rx_packets;
 280        dev->stats.rx_bytes += skb->len;
 281
 282        skb->dev = dev;
 283        /* XXX get correct PACKET_ type here */
 284        skb->pkt_type = PACKET_HOST;
 285
 286        if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
 287                skb->ip_summed = CHECKSUM_UNNECESSARY;
 288
 289        if (dev->features & NETIF_F_LRO)
 290                lro_receive_skb(&priv->lro.lro_mgr, skb, NULL);
 291        else
 292                netif_receive_skb(skb);
 293
 294repost:
 295        if (unlikely(ipoib_ib_post_receive(dev, wr_id)))
 296                ipoib_warn(priv, "ipoib_ib_post_receive failed "
 297                           "for buf %d\n", wr_id);
 298}
 299
 300static int ipoib_dma_map_tx(struct ib_device *ca,
 301                            struct ipoib_tx_buf *tx_req)
 302{
 303        struct sk_buff *skb = tx_req->skb;
 304        u64 *mapping = tx_req->mapping;
 305        int i;
 306        int off;
 307
 308        if (skb_headlen(skb)) {
 309                mapping[0] = ib_dma_map_single(ca, skb->data, skb_headlen(skb),
 310                                               DMA_TO_DEVICE);
 311                if (unlikely(ib_dma_mapping_error(ca, mapping[0])))
 312                        return -EIO;
 313
 314                off = 1;
 315        } else
 316                off = 0;
 317
 318        for (i = 0; i < skb_shinfo(skb)->nr_frags; ++i) {
 319                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 320                mapping[i + off] = ib_dma_map_page(ca, frag->page,
 321                                                 frag->page_offset, frag->size,
 322                                                 DMA_TO_DEVICE);
 323                if (unlikely(ib_dma_mapping_error(ca, mapping[i + off])))
 324                        goto partial_error;
 325        }
 326        return 0;
 327
 328partial_error:
 329        for (; i > 0; --i) {
 330                skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
 331                ib_dma_unmap_page(ca, mapping[i - !off], frag->size, DMA_TO_DEVICE);
 332        }
 333
 334        if (off)
 335                ib_dma_unmap_single(ca, mapping[0], skb_headlen(skb), DMA_TO_DEVICE);
 336
 337        return -EIO;
 338}
 339
 340static void ipoib_dma_unmap_tx(struct ib_device *ca,
 341                               struct ipoib_tx_buf *tx_req)
 342{
 343        struct sk_buff *skb = tx_req->skb;
 344        u64 *mapping = tx_req->mapping;
 345        int i;
 346        int off;
 347
 348        if (skb_headlen(skb)) {
 349                ib_dma_unmap_single(ca, mapping[0], skb_headlen(skb), DMA_TO_DEVICE);
 350                off = 1;
 351        } else
 352                off = 0;
 353
 354        for (i = 0; i < skb_shinfo(skb)->nr_frags; ++i) {
 355                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 356                ib_dma_unmap_page(ca, mapping[i + off], frag->size,
 357                                  DMA_TO_DEVICE);
 358        }
 359}
 360
 361static void ipoib_ib_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
 362{
 363        struct ipoib_dev_priv *priv = netdev_priv(dev);
 364        unsigned int wr_id = wc->wr_id;
 365        struct ipoib_tx_buf *tx_req;
 366
 367        ipoib_dbg_data(priv, "send completion: id %d, status: %d\n",
 368                       wr_id, wc->status);
 369
 370        if (unlikely(wr_id >= ipoib_sendq_size)) {
 371                ipoib_warn(priv, "send completion event with wrid %d (> %d)\n",
 372                           wr_id, ipoib_sendq_size);
 373                return;
 374        }
 375
 376        tx_req = &priv->tx_ring[wr_id];
 377
 378        ipoib_dma_unmap_tx(priv->ca, tx_req);
 379
 380        ++dev->stats.tx_packets;
 381        dev->stats.tx_bytes += tx_req->skb->len;
 382
 383        dev_kfree_skb_any(tx_req->skb);
 384
 385        ++priv->tx_tail;
 386        if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
 387            netif_queue_stopped(dev) &&
 388            test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
 389                netif_wake_queue(dev);
 390
 391        if (wc->status != IB_WC_SUCCESS &&
 392            wc->status != IB_WC_WR_FLUSH_ERR)
 393                ipoib_warn(priv, "failed send event "
 394                           "(status=%d, wrid=%d vend_err %x)\n",
 395                           wc->status, wr_id, wc->vendor_err);
 396}
 397
 398static int poll_tx(struct ipoib_dev_priv *priv)
 399{
 400        int n, i;
 401
 402        n = ib_poll_cq(priv->send_cq, MAX_SEND_CQE, priv->send_wc);
 403        for (i = 0; i < n; ++i)
 404                ipoib_ib_handle_tx_wc(priv->dev, priv->send_wc + i);
 405
 406        return n == MAX_SEND_CQE;
 407}
 408
 409int ipoib_poll(struct napi_struct *napi, int budget)
 410{
 411        struct ipoib_dev_priv *priv = container_of(napi, struct ipoib_dev_priv, napi);
 412        struct net_device *dev = priv->dev;
 413        int done;
 414        int t;
 415        int n, i;
 416
 417        done  = 0;
 418
 419poll_more:
 420        while (done < budget) {
 421                int max = (budget - done);
 422
 423                t = min(IPOIB_NUM_WC, max);
 424                n = ib_poll_cq(priv->recv_cq, t, priv->ibwc);
 425
 426                for (i = 0; i < n; i++) {
 427                        struct ib_wc *wc = priv->ibwc + i;
 428
 429                        if (wc->wr_id & IPOIB_OP_RECV) {
 430                                ++done;
 431                                if (wc->wr_id & IPOIB_OP_CM)
 432                                        ipoib_cm_handle_rx_wc(dev, wc);
 433                                else
 434                                        ipoib_ib_handle_rx_wc(dev, wc);
 435                        } else
 436                                ipoib_cm_handle_tx_wc(priv->dev, wc);
 437                }
 438
 439                if (n != t)
 440                        break;
 441        }
 442
 443        if (done < budget) {
 444                if (dev->features & NETIF_F_LRO)
 445                        lro_flush_all(&priv->lro.lro_mgr);
 446
 447                napi_complete(napi);
 448                if (unlikely(ib_req_notify_cq(priv->recv_cq,
 449                                              IB_CQ_NEXT_COMP |
 450                                              IB_CQ_REPORT_MISSED_EVENTS)) &&
 451                    napi_reschedule(napi))
 452                        goto poll_more;
 453        }
 454
 455        return done;
 456}
 457
 458void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr)
 459{
 460        struct net_device *dev = dev_ptr;
 461        struct ipoib_dev_priv *priv = netdev_priv(dev);
 462
 463        napi_schedule(&priv->napi);
 464}
 465
 466static void drain_tx_cq(struct net_device *dev)
 467{
 468        struct ipoib_dev_priv *priv = netdev_priv(dev);
 469
 470        netif_tx_lock(dev);
 471        while (poll_tx(priv))
 472                ; /* nothing */
 473
 474        if (netif_queue_stopped(dev))
 475                mod_timer(&priv->poll_timer, jiffies + 1);
 476
 477        netif_tx_unlock(dev);
 478}
 479
 480void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr)
 481{
 482        struct ipoib_dev_priv *priv = netdev_priv(dev_ptr);
 483
 484        mod_timer(&priv->poll_timer, jiffies);
 485}
 486
 487static inline int post_send(struct ipoib_dev_priv *priv,
 488                            unsigned int wr_id,
 489                            struct ib_ah *address, u32 qpn,
 490                            struct ipoib_tx_buf *tx_req,
 491                            void *head, int hlen)
 492{
 493        struct ib_send_wr *bad_wr;
 494        int i, off;
 495        struct sk_buff *skb = tx_req->skb;
 496        skb_frag_t *frags = skb_shinfo(skb)->frags;
 497        int nr_frags = skb_shinfo(skb)->nr_frags;
 498        u64 *mapping = tx_req->mapping;
 499
 500        if (skb_headlen(skb)) {
 501                priv->tx_sge[0].addr         = mapping[0];
 502                priv->tx_sge[0].length       = skb_headlen(skb);
 503                off = 1;
 504        } else
 505                off = 0;
 506
 507        for (i = 0; i < nr_frags; ++i) {
 508                priv->tx_sge[i + off].addr = mapping[i + off];
 509                priv->tx_sge[i + off].length = frags[i].size;
 510        }
 511        priv->tx_wr.num_sge          = nr_frags + off;
 512        priv->tx_wr.wr_id            = wr_id;
 513        priv->tx_wr.wr.ud.remote_qpn = qpn;
 514        priv->tx_wr.wr.ud.ah         = address;
 515
 516        if (head) {
 517                priv->tx_wr.wr.ud.mss    = skb_shinfo(skb)->gso_size;
 518                priv->tx_wr.wr.ud.header = head;
 519                priv->tx_wr.wr.ud.hlen   = hlen;
 520                priv->tx_wr.opcode       = IB_WR_LSO;
 521        } else
 522                priv->tx_wr.opcode       = IB_WR_SEND;
 523
 524        return ib_post_send(priv->qp, &priv->tx_wr, &bad_wr);
 525}
 526
 527void ipoib_send(struct net_device *dev, struct sk_buff *skb,
 528                struct ipoib_ah *address, u32 qpn)
 529{
 530        struct ipoib_dev_priv *priv = netdev_priv(dev);
 531        struct ipoib_tx_buf *tx_req;
 532        int hlen;
 533        void *phead;
 534
 535        if (skb_is_gso(skb)) {
 536                hlen = skb_transport_offset(skb) + tcp_hdrlen(skb);
 537                phead = skb->data;
 538                if (unlikely(!skb_pull(skb, hlen))) {
 539                        ipoib_warn(priv, "linear data too small\n");
 540                        ++dev->stats.tx_dropped;
 541                        ++dev->stats.tx_errors;
 542                        dev_kfree_skb_any(skb);
 543                        return;
 544                }
 545        } else {
 546                if (unlikely(skb->len > priv->mcast_mtu + IPOIB_ENCAP_LEN)) {
 547                        ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n",
 548                                   skb->len, priv->mcast_mtu + IPOIB_ENCAP_LEN);
 549                        ++dev->stats.tx_dropped;
 550                        ++dev->stats.tx_errors;
 551                        ipoib_cm_skb_too_long(dev, skb, priv->mcast_mtu);
 552                        return;
 553                }
 554                phead = NULL;
 555                hlen  = 0;
 556        }
 557
 558        ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n",
 559                       skb->len, address, qpn);
 560
 561        /*
 562         * We put the skb into the tx_ring _before_ we call post_send()
 563         * because it's entirely possible that the completion handler will
 564         * run before we execute anything after the post_send().  That
 565         * means we have to make sure everything is properly recorded and
 566         * our state is consistent before we call post_send().
 567         */
 568        tx_req = &priv->tx_ring[priv->tx_head & (ipoib_sendq_size - 1)];
 569        tx_req->skb = skb;
 570        if (unlikely(ipoib_dma_map_tx(priv->ca, tx_req))) {
 571                ++dev->stats.tx_errors;
 572                dev_kfree_skb_any(skb);
 573                return;
 574        }
 575
 576        if (skb->ip_summed == CHECKSUM_PARTIAL)
 577                priv->tx_wr.send_flags |= IB_SEND_IP_CSUM;
 578        else
 579                priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM;
 580
 581        if (++priv->tx_outstanding == ipoib_sendq_size) {
 582                ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
 583                if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
 584                        ipoib_warn(priv, "request notify on send CQ failed\n");
 585                netif_stop_queue(dev);
 586        }
 587
 588        if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1),
 589                               address->ah, qpn, tx_req, phead, hlen))) {
 590                ipoib_warn(priv, "post_send failed\n");
 591                ++dev->stats.tx_errors;
 592                --priv->tx_outstanding;
 593                ipoib_dma_unmap_tx(priv->ca, tx_req);
 594                dev_kfree_skb_any(skb);
 595                if (netif_queue_stopped(dev))
 596                        netif_wake_queue(dev);
 597        } else {
 598                dev->trans_start = jiffies;
 599
 600                address->last_send = priv->tx_head;
 601                ++priv->tx_head;
 602                skb_orphan(skb);
 603
 604        }
 605
 606        if (unlikely(priv->tx_outstanding > MAX_SEND_CQE))
 607                while (poll_tx(priv))
 608                        ; /* nothing */
 609}
 610
 611static void __ipoib_reap_ah(struct net_device *dev)
 612{
 613        struct ipoib_dev_priv *priv = netdev_priv(dev);
 614        struct ipoib_ah *ah, *tah;
 615        LIST_HEAD(remove_list);
 616        unsigned long flags;
 617
 618        netif_tx_lock_bh(dev);
 619        spin_lock_irqsave(&priv->lock, flags);
 620
 621        list_for_each_entry_safe(ah, tah, &priv->dead_ahs, list)
 622                if ((int) priv->tx_tail - (int) ah->last_send >= 0) {
 623                        list_del(&ah->list);
 624                        ib_destroy_ah(ah->ah);
 625                        kfree(ah);
 626                }
 627
 628        spin_unlock_irqrestore(&priv->lock, flags);
 629        netif_tx_unlock_bh(dev);
 630}
 631
 632void ipoib_reap_ah(struct work_struct *work)
 633{
 634        struct ipoib_dev_priv *priv =
 635                container_of(work, struct ipoib_dev_priv, ah_reap_task.work);
 636        struct net_device *dev = priv->dev;
 637
 638        __ipoib_reap_ah(dev);
 639
 640        if (!test_bit(IPOIB_STOP_REAPER, &priv->flags))
 641                queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
 642                                   round_jiffies_relative(HZ));
 643}
 644
 645static void ipoib_ib_tx_timer_func(unsigned long ctx)
 646{
 647        drain_tx_cq((struct net_device *)ctx);
 648}
 649
 650int ipoib_ib_dev_open(struct net_device *dev)
 651{
 652        struct ipoib_dev_priv *priv = netdev_priv(dev);
 653        int ret;
 654
 655        if (ib_find_pkey(priv->ca, priv->port, priv->pkey, &priv->pkey_index)) {
 656                ipoib_warn(priv, "P_Key 0x%04x not found\n", priv->pkey);
 657                clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
 658                return -1;
 659        }
 660        set_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
 661
 662        ret = ipoib_init_qp(dev);
 663        if (ret) {
 664                ipoib_warn(priv, "ipoib_init_qp returned %d\n", ret);
 665                return -1;
 666        }
 667
 668        ret = ipoib_ib_post_receives(dev);
 669        if (ret) {
 670                ipoib_warn(priv, "ipoib_ib_post_receives returned %d\n", ret);
 671                ipoib_ib_dev_stop(dev, 1);
 672                return -1;
 673        }
 674
 675        ret = ipoib_cm_dev_open(dev);
 676        if (ret) {
 677                ipoib_warn(priv, "ipoib_cm_dev_open returned %d\n", ret);
 678                ipoib_ib_dev_stop(dev, 1);
 679                return -1;
 680        }
 681
 682        clear_bit(IPOIB_STOP_REAPER, &priv->flags);
 683        queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
 684                           round_jiffies_relative(HZ));
 685
 686        if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
 687                napi_enable(&priv->napi);
 688
 689        return 0;
 690}
 691
 692static void ipoib_pkey_dev_check_presence(struct net_device *dev)
 693{
 694        struct ipoib_dev_priv *priv = netdev_priv(dev);
 695        u16 pkey_index = 0;
 696
 697        if (ib_find_pkey(priv->ca, priv->port, priv->pkey, &pkey_index))
 698                clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
 699        else
 700                set_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
 701}
 702
 703int ipoib_ib_dev_up(struct net_device *dev)
 704{
 705        struct ipoib_dev_priv *priv = netdev_priv(dev);
 706
 707        ipoib_pkey_dev_check_presence(dev);
 708
 709        if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) {
 710                ipoib_dbg(priv, "PKEY is not assigned.\n");
 711                return 0;
 712        }
 713
 714        set_bit(IPOIB_FLAG_OPER_UP, &priv->flags);
 715
 716        return ipoib_mcast_start_thread(dev);
 717}
 718
 719int ipoib_ib_dev_down(struct net_device *dev, int flush)
 720{
 721        struct ipoib_dev_priv *priv = netdev_priv(dev);
 722
 723        ipoib_dbg(priv, "downing ib_dev\n");
 724
 725        clear_bit(IPOIB_FLAG_OPER_UP, &priv->flags);
 726        netif_carrier_off(dev);
 727
 728        /* Shutdown the P_Key thread if still active */
 729        if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) {
 730                mutex_lock(&pkey_mutex);
 731                set_bit(IPOIB_PKEY_STOP, &priv->flags);
 732                cancel_delayed_work(&priv->pkey_poll_task);
 733                mutex_unlock(&pkey_mutex);
 734                if (flush)
 735                        flush_workqueue(ipoib_workqueue);
 736        }
 737
 738        ipoib_mcast_stop_thread(dev, flush);
 739        ipoib_mcast_dev_flush(dev);
 740
 741        ipoib_flush_paths(dev);
 742
 743        return 0;
 744}
 745
 746static int recvs_pending(struct net_device *dev)
 747{
 748        struct ipoib_dev_priv *priv = netdev_priv(dev);
 749        int pending = 0;
 750        int i;
 751
 752        for (i = 0; i < ipoib_recvq_size; ++i)
 753                if (priv->rx_ring[i].skb)
 754                        ++pending;
 755
 756        return pending;
 757}
 758
 759void ipoib_drain_cq(struct net_device *dev)
 760{
 761        struct ipoib_dev_priv *priv = netdev_priv(dev);
 762        int i, n;
 763
 764        /*
 765         * We call completion handling routines that expect to be
 766         * called from the BH-disabled NAPI poll context, so disable
 767         * BHs here too.
 768         */
 769        local_bh_disable();
 770
 771        do {
 772                n = ib_poll_cq(priv->recv_cq, IPOIB_NUM_WC, priv->ibwc);
 773                for (i = 0; i < n; ++i) {
 774                        /*
 775                         * Convert any successful completions to flush
 776                         * errors to avoid passing packets up the
 777                         * stack after bringing the device down.
 778                         */
 779                        if (priv->ibwc[i].status == IB_WC_SUCCESS)
 780                                priv->ibwc[i].status = IB_WC_WR_FLUSH_ERR;
 781
 782                        if (priv->ibwc[i].wr_id & IPOIB_OP_RECV) {
 783                                if (priv->ibwc[i].wr_id & IPOIB_OP_CM)
 784                                        ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
 785                                else
 786                                        ipoib_ib_handle_rx_wc(dev, priv->ibwc + i);
 787                        } else
 788                                ipoib_cm_handle_tx_wc(dev, priv->ibwc + i);
 789                }
 790        } while (n == IPOIB_NUM_WC);
 791
 792        while (poll_tx(priv))
 793                ; /* nothing */
 794
 795        local_bh_enable();
 796}
 797
 798int ipoib_ib_dev_stop(struct net_device *dev, int flush)
 799{
 800        struct ipoib_dev_priv *priv = netdev_priv(dev);
 801        struct ib_qp_attr qp_attr;
 802        unsigned long begin;
 803        struct ipoib_tx_buf *tx_req;
 804        int i;
 805
 806        if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
 807                napi_disable(&priv->napi);
 808
 809        ipoib_cm_dev_stop(dev);
 810
 811        /*
 812         * Move our QP to the error state and then reinitialize in
 813         * when all work requests have completed or have been flushed.
 814         */
 815        qp_attr.qp_state = IB_QPS_ERR;
 816        if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
 817                ipoib_warn(priv, "Failed to modify QP to ERROR state\n");
 818
 819        /* Wait for all sends and receives to complete */
 820        begin = jiffies;
 821
 822        while (priv->tx_head != priv->tx_tail || recvs_pending(dev)) {
 823                if (time_after(jiffies, begin + 5 * HZ)) {
 824                        ipoib_warn(priv, "timing out; %d sends %d receives not completed\n",
 825                                   priv->tx_head - priv->tx_tail, recvs_pending(dev));
 826
 827                        /*
 828                         * assume the HW is wedged and just free up
 829                         * all our pending work requests.
 830                         */
 831                        while ((int) priv->tx_tail - (int) priv->tx_head < 0) {
 832                                tx_req = &priv->tx_ring[priv->tx_tail &
 833                                                        (ipoib_sendq_size - 1)];
 834                                ipoib_dma_unmap_tx(priv->ca, tx_req);
 835                                dev_kfree_skb_any(tx_req->skb);
 836                                ++priv->tx_tail;
 837                                --priv->tx_outstanding;
 838                        }
 839
 840                        for (i = 0; i < ipoib_recvq_size; ++i) {
 841                                struct ipoib_rx_buf *rx_req;
 842
 843                                rx_req = &priv->rx_ring[i];
 844                                if (!rx_req->skb)
 845                                        continue;
 846                                ipoib_ud_dma_unmap_rx(priv,
 847                                                      priv->rx_ring[i].mapping);
 848                                dev_kfree_skb_any(rx_req->skb);
 849                                rx_req->skb = NULL;
 850                        }
 851
 852                        goto timeout;
 853                }
 854
 855                ipoib_drain_cq(dev);
 856
 857                msleep(1);
 858        }
 859
 860        ipoib_dbg(priv, "All sends and receives done.\n");
 861
 862timeout:
 863        del_timer_sync(&priv->poll_timer);
 864        qp_attr.qp_state = IB_QPS_RESET;
 865        if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
 866                ipoib_warn(priv, "Failed to modify QP to RESET state\n");
 867
 868        /* Wait for all AHs to be reaped */
 869        set_bit(IPOIB_STOP_REAPER, &priv->flags);
 870        cancel_delayed_work(&priv->ah_reap_task);
 871        if (flush)
 872                flush_workqueue(ipoib_workqueue);
 873
 874        begin = jiffies;
 875
 876        while (!list_empty(&priv->dead_ahs)) {
 877                __ipoib_reap_ah(dev);
 878
 879                if (time_after(jiffies, begin + HZ)) {
 880                        ipoib_warn(priv, "timing out; will leak address handles\n");
 881                        break;
 882                }
 883
 884                msleep(1);
 885        }
 886
 887        ib_req_notify_cq(priv->recv_cq, IB_CQ_NEXT_COMP);
 888
 889        return 0;
 890}
 891
 892int ipoib_ib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
 893{
 894        struct ipoib_dev_priv *priv = netdev_priv(dev);
 895
 896        priv->ca = ca;
 897        priv->port = port;
 898        priv->qp = NULL;
 899
 900        if (ipoib_transport_dev_init(dev, ca)) {
 901                printk(KERN_WARNING "%s: ipoib_transport_dev_init failed\n", ca->name);
 902                return -ENODEV;
 903        }
 904
 905        setup_timer(&priv->poll_timer, ipoib_ib_tx_timer_func,
 906                    (unsigned long) dev);
 907
 908        if (dev->flags & IFF_UP) {
 909                if (ipoib_ib_dev_open(dev)) {
 910                        ipoib_transport_dev_cleanup(dev);
 911                        return -ENODEV;
 912                }
 913        }
 914
 915        return 0;
 916}
 917
 918static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv,
 919                                enum ipoib_flush_level level)
 920{
 921        struct ipoib_dev_priv *cpriv;
 922        struct net_device *dev = priv->dev;
 923        u16 new_index;
 924
 925        mutex_lock(&priv->vlan_mutex);
 926
 927        /*
 928         * Flush any child interfaces too -- they might be up even if
 929         * the parent is down.
 930         */
 931        list_for_each_entry(cpriv, &priv->child_intfs, list)
 932                __ipoib_ib_dev_flush(cpriv, level);
 933
 934        mutex_unlock(&priv->vlan_mutex);
 935
 936        if (!test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) {
 937                ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_INITIALIZED not set.\n");
 938                return;
 939        }
 940
 941        if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) {
 942                ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_ADMIN_UP not set.\n");
 943                return;
 944        }
 945
 946        if (level == IPOIB_FLUSH_HEAVY) {
 947                if (ib_find_pkey(priv->ca, priv->port, priv->pkey, &new_index)) {
 948                        clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
 949                        ipoib_ib_dev_down(dev, 0);
 950                        ipoib_ib_dev_stop(dev, 0);
 951                        if (ipoib_pkey_dev_delay_open(dev))
 952                                return;
 953                }
 954
 955                /* restart QP only if P_Key index is changed */
 956                if (test_and_set_bit(IPOIB_PKEY_ASSIGNED, &priv->flags) &&
 957                    new_index == priv->pkey_index) {
 958                        ipoib_dbg(priv, "Not flushing - P_Key index not changed.\n");
 959                        return;
 960                }
 961                priv->pkey_index = new_index;
 962        }
 963
 964        if (level == IPOIB_FLUSH_LIGHT) {
 965                ipoib_mark_paths_invalid(dev);
 966                ipoib_mcast_dev_flush(dev);
 967        }
 968
 969        if (level >= IPOIB_FLUSH_NORMAL)
 970                ipoib_ib_dev_down(dev, 0);
 971
 972        if (level == IPOIB_FLUSH_HEAVY) {
 973                ipoib_ib_dev_stop(dev, 0);
 974                ipoib_ib_dev_open(dev);
 975        }
 976
 977        /*
 978         * The device could have been brought down between the start and when
 979         * we get here, don't bring it back up if it's not configured up
 980         */
 981        if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) {
 982                if (level >= IPOIB_FLUSH_NORMAL)
 983                        ipoib_ib_dev_up(dev);
 984                ipoib_mcast_restart_task(&priv->restart_task);
 985        }
 986}
 987
 988void ipoib_ib_dev_flush_light(struct work_struct *work)
 989{
 990        struct ipoib_dev_priv *priv =
 991                container_of(work, struct ipoib_dev_priv, flush_light);
 992
 993        __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_LIGHT);
 994}
 995
 996void ipoib_ib_dev_flush_normal(struct work_struct *work)
 997{
 998        struct ipoib_dev_priv *priv =
 999                container_of(work, struct ipoib_dev_priv, flush_normal);
1000
1001        __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_NORMAL);
1002}
1003
1004void ipoib_ib_dev_flush_heavy(struct work_struct *work)
1005{
1006        struct ipoib_dev_priv *priv =
1007                container_of(work, struct ipoib_dev_priv, flush_heavy);
1008
1009        __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_HEAVY);
1010}
1011
1012void ipoib_ib_dev_cleanup(struct net_device *dev)
1013{
1014        struct ipoib_dev_priv *priv = netdev_priv(dev);
1015
1016        ipoib_dbg(priv, "cleaning up ib_dev\n");
1017
1018        ipoib_mcast_stop_thread(dev, 1);
1019        ipoib_mcast_dev_flush(dev);
1020
1021        ipoib_transport_dev_cleanup(dev);
1022}
1023
1024/*
1025 * Delayed P_Key Assigment Interim Support
1026 *
1027 * The following is initial implementation of delayed P_Key assigment
1028 * mechanism. It is using the same approach implemented for the multicast
1029 * group join. The single goal of this implementation is to quickly address
1030 * Bug #2507. This implementation will probably be removed when the P_Key
1031 * change async notification is available.
1032 */
1033
1034void ipoib_pkey_poll(struct work_struct *work)
1035{
1036        struct ipoib_dev_priv *priv =
1037                container_of(work, struct ipoib_dev_priv, pkey_poll_task.work);
1038        struct net_device *dev = priv->dev;
1039
1040        ipoib_pkey_dev_check_presence(dev);
1041
1042        if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags))
1043                ipoib_open(dev);
1044        else {
1045                mutex_lock(&pkey_mutex);
1046                if (!test_bit(IPOIB_PKEY_STOP, &priv->flags))
1047                        queue_delayed_work(ipoib_workqueue,
1048                                           &priv->pkey_poll_task,
1049                                           HZ);
1050                mutex_unlock(&pkey_mutex);
1051        }
1052}
1053
1054int ipoib_pkey_dev_delay_open(struct net_device *dev)
1055{
1056        struct ipoib_dev_priv *priv = netdev_priv(dev);
1057
1058        /* Look for the interface pkey value in the IB Port P_Key table and */
1059        /* set the interface pkey assigment flag                            */
1060        ipoib_pkey_dev_check_presence(dev);
1061
1062        /* P_Key value not assigned yet - start polling */
1063        if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) {
1064                mutex_lock(&pkey_mutex);
1065                clear_bit(IPOIB_PKEY_STOP, &priv->flags);
1066                queue_delayed_work(ipoib_workqueue,
1067                                   &priv->pkey_poll_task,
1068                                   HZ);
1069                mutex_unlock(&pkey_mutex);
1070                return 1;
1071        }
1072
1073        return 0;
1074}
1075
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.