source: src/linux/universal/linux-4.9/drivers/infiniband/ulp/ipoib/ipoib_main.c @ 31662

Last change on this file since 31662 was 31662, checked in by brainslayer, 11 days ago

use new squashfs in all kernels

File size: 55.6 KB
Line 
1/*
2 * Copyright (c) 2004 Topspin Communications.  All rights reserved.
3 * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
4 * Copyright (c) 2004 Voltaire, Inc. All rights reserved.
5 *
6 * This software is available to you under a choice of one of two
7 * licenses.  You may choose to be licensed under the terms of the GNU
8 * General Public License (GPL) Version 2, available from the file
9 * COPYING in the main directory of this source tree, or the
10 * OpenIB.org BSD license below:
11 *
12 *     Redistribution and use in source and binary forms, with or
13 *     without modification, are permitted provided that the following
14 *     conditions are met:
15 *
16 *      - Redistributions of source code must retain the above
17 *        copyright notice, this list of conditions and the following
18 *        disclaimer.
19 *
20 *      - Redistributions in binary form must reproduce the above
21 *        copyright notice, this list of conditions and the following
22 *        disclaimer in the documentation and/or other materials
23 *        provided with the distribution.
24 *
25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 * SOFTWARE.
33 */
34
35#include "ipoib.h"
36
37#include <linux/module.h>
38
39#include <linux/init.h>
40#include <linux/slab.h>
41#include <linux/kernel.h>
42#include <linux/vmalloc.h>
43
44#include <linux/if_arp.h>       /* For ARPHRD_xxx */
45
46#include <linux/ip.h>
47#include <linux/in.h>
48
49#include <linux/jhash.h>
50#include <net/arp.h>
51#include <net/addrconf.h>
52#include <linux/inetdevice.h>
53#include <rdma/ib_cache.h>
54#include <linux/pci.h>
55
56#define DRV_VERSION "1.0.0"
57
58const char ipoib_driver_version[] = DRV_VERSION;
59
60MODULE_AUTHOR("Roland Dreier");
61MODULE_DESCRIPTION("IP-over-InfiniBand net driver");
62MODULE_LICENSE("Dual BSD/GPL");
63MODULE_VERSION(DRV_VERSION);
64
65int ipoib_sendq_size __read_mostly = IPOIB_TX_RING_SIZE;
66int ipoib_recvq_size __read_mostly = IPOIB_RX_RING_SIZE;
67
68module_param_named(send_queue_size, ipoib_sendq_size, int, 0444);
69MODULE_PARM_DESC(send_queue_size, "Number of descriptors in send queue");
70module_param_named(recv_queue_size, ipoib_recvq_size, int, 0444);
71MODULE_PARM_DESC(recv_queue_size, "Number of descriptors in receive queue");
72
73#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
74int ipoib_debug_level;
75
76module_param_named(debug_level, ipoib_debug_level, int, 0644);
77MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0");
78#endif
79
80struct ipoib_path_iter {
81        struct net_device *dev;
82        struct ipoib_path  path;
83};
84
85static const u8 ipv4_bcast_addr[] = {
86        0x00, 0xff, 0xff, 0xff,
87        0xff, 0x12, 0x40, 0x1b, 0x00, 0x00, 0x00, 0x00,
88        0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
89};
90
91struct workqueue_struct *ipoib_workqueue;
92
93struct ib_sa_client ipoib_sa_client;
94
95static void ipoib_add_one(struct ib_device *device);
96static void ipoib_remove_one(struct ib_device *device, void *client_data);
97static void ipoib_neigh_reclaim(struct rcu_head *rp);
98static struct net_device *ipoib_get_net_dev_by_params(
99                struct ib_device *dev, u8 port, u16 pkey,
100                const union ib_gid *gid, const struct sockaddr *addr,
101                void *client_data);
102static int ipoib_set_mac(struct net_device *dev, void *addr);
103
104static struct ib_client ipoib_client = {
105        .name   = "ipoib",
106        .add    = ipoib_add_one,
107        .remove = ipoib_remove_one,
108        .get_net_dev_by_params = ipoib_get_net_dev_by_params,
109};
110
111int ipoib_open(struct net_device *dev)
112{
113        struct ipoib_dev_priv *priv = netdev_priv(dev);
114
115        ipoib_dbg(priv, "bringing up interface\n");
116
117        netif_carrier_off(dev);
118
119        set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
120
121        priv->sm_fullmember_sendonly_support = false;
122
123        if (ipoib_ib_dev_open(dev)) {
124                if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags))
125                        return 0;
126                goto err_disable;
127        }
128
129        if (ipoib_ib_dev_up(dev))
130                goto err_stop;
131
132        if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
133                struct ipoib_dev_priv *cpriv;
134
135                /* Bring up any child interfaces too */
136                down_read(&priv->vlan_rwsem);
137                list_for_each_entry(cpriv, &priv->child_intfs, list) {
138                        int flags;
139
140                        flags = cpriv->dev->flags;
141                        if (flags & IFF_UP)
142                                continue;
143
144                        dev_change_flags(cpriv->dev, flags | IFF_UP);
145                }
146                up_read(&priv->vlan_rwsem);
147        }
148
149        netif_start_queue(dev);
150
151        return 0;
152
153err_stop:
154        ipoib_ib_dev_stop(dev);
155
156err_disable:
157        clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
158
159        return -EINVAL;
160}
161
162static int ipoib_stop(struct net_device *dev)
163{
164        struct ipoib_dev_priv *priv = netdev_priv(dev);
165
166        ipoib_dbg(priv, "stopping interface\n");
167
168        clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
169
170        netif_stop_queue(dev);
171
172        ipoib_ib_dev_down(dev);
173        ipoib_ib_dev_stop(dev);
174
175        if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
176                struct ipoib_dev_priv *cpriv;
177
178                /* Bring down any child interfaces too */
179                down_read(&priv->vlan_rwsem);
180                list_for_each_entry(cpriv, &priv->child_intfs, list) {
181                        int flags;
182
183                        flags = cpriv->dev->flags;
184                        if (!(flags & IFF_UP))
185                                continue;
186
187                        dev_change_flags(cpriv->dev, flags & ~IFF_UP);
188                }
189                up_read(&priv->vlan_rwsem);
190        }
191
192        return 0;
193}
194
195static void ipoib_uninit(struct net_device *dev)
196{
197        ipoib_dev_cleanup(dev);
198}
199
200static netdev_features_t ipoib_fix_features(struct net_device *dev, netdev_features_t features)
201{
202        struct ipoib_dev_priv *priv = netdev_priv(dev);
203
204        if (test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags))
205                features &= ~(NETIF_F_IP_CSUM | NETIF_F_TSO);
206
207        return features;
208}
209
210static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
211{
212        struct ipoib_dev_priv *priv = netdev_priv(dev);
213
214        /* dev->mtu > 2K ==> connected mode */
215        if (ipoib_cm_admin_enabled(dev)) {
216                if (new_mtu > ipoib_cm_max_mtu(dev))
217                        return -EINVAL;
218
219                if (new_mtu > priv->mcast_mtu)
220                        ipoib_warn(priv, "mtu > %d will cause multicast packet drops.\n",
221                                   priv->mcast_mtu);
222
223                dev->mtu = new_mtu;
224                return 0;
225        }
226
227        if (new_mtu > IPOIB_UD_MTU(priv->max_ib_mtu))
228                return -EINVAL;
229
230        priv->admin_mtu = new_mtu;
231
232        dev->mtu = min(priv->mcast_mtu, priv->admin_mtu);
233
234        return 0;
235}
236
237/* Called with an RCU read lock taken */
238static bool ipoib_is_dev_match_addr_rcu(const struct sockaddr *addr,
239                                        struct net_device *dev)
240{
241        struct net *net = dev_net(dev);
242        struct in_device *in_dev;
243        struct sockaddr_in *addr_in = (struct sockaddr_in *)addr;
244        struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr;
245        __be32 ret_addr;
246
247        switch (addr->sa_family) {
248        case AF_INET:
249                in_dev = in_dev_get(dev);
250                if (!in_dev)
251                        return false;
252
253                ret_addr = inet_confirm_addr(net, in_dev, 0,
254                                             addr_in->sin_addr.s_addr,
255                                             RT_SCOPE_HOST);
256                in_dev_put(in_dev);
257                if (ret_addr)
258                        return true;
259
260                break;
261        case AF_INET6:
262                if (IS_ENABLED(CONFIG_IPV6) &&
263                    ipv6_chk_addr(net, &addr_in6->sin6_addr, dev, 1))
264                        return true;
265
266                break;
267        }
268        return false;
269}
270
271/**
272 * Find the master net_device on top of the given net_device.
273 * @dev: base IPoIB net_device
274 *
275 * Returns the master net_device with a reference held, or the same net_device
276 * if no master exists.
277 */
278static struct net_device *ipoib_get_master_net_dev(struct net_device *dev)
279{
280        struct net_device *master;
281
282        rcu_read_lock();
283        master = netdev_master_upper_dev_get_rcu(dev);
284        if (master)
285                dev_hold(master);
286        rcu_read_unlock();
287
288        if (master)
289                return master;
290
291        dev_hold(dev);
292        return dev;
293}
294
295/**
296 * Find a net_device matching the given address, which is an upper device of
297 * the given net_device.
298 * @addr: IP address to look for.
299 * @dev: base IPoIB net_device
300 *
301 * If found, returns the net_device with a reference held. Otherwise return
302 * NULL.
303 */
304static struct net_device *ipoib_get_net_dev_match_addr(
305                const struct sockaddr *addr, struct net_device *dev)
306{
307        struct net_device *upper,
308                          *result = NULL;
309        struct list_head *iter;
310
311        rcu_read_lock();
312        if (ipoib_is_dev_match_addr_rcu(addr, dev)) {
313                dev_hold(dev);
314                result = dev;
315                goto out;
316        }
317
318        netdev_for_each_all_upper_dev_rcu(dev, upper, iter) {
319                if (ipoib_is_dev_match_addr_rcu(addr, upper)) {
320                        dev_hold(upper);
321                        result = upper;
322                        break;
323                }
324        }
325out:
326        rcu_read_unlock();
327        return result;
328}
329
330/* returns the number of IPoIB netdevs on top a given ipoib device matching a
331 * pkey_index and address, if one exists.
332 *
333 * @found_net_dev: contains a matching net_device if the return value >= 1,
334 * with a reference held. */
335static int ipoib_match_gid_pkey_addr(struct ipoib_dev_priv *priv,
336                                     const union ib_gid *gid,
337                                     u16 pkey_index,
338                                     const struct sockaddr *addr,
339                                     int nesting,
340                                     struct net_device **found_net_dev)
341{
342        struct ipoib_dev_priv *child_priv;
343        struct net_device *net_dev = NULL;
344        int matches = 0;
345
346        if (priv->pkey_index == pkey_index &&
347            (!gid || !memcmp(gid, &priv->local_gid, sizeof(*gid)))) {
348                if (!addr) {
349                        net_dev = ipoib_get_master_net_dev(priv->dev);
350                } else {
351                        /* Verify the net_device matches the IP address, as
352                         * IPoIB child devices currently share a GID. */
353                        net_dev = ipoib_get_net_dev_match_addr(addr, priv->dev);
354                }
355                if (net_dev) {
356                        if (!*found_net_dev)
357                                *found_net_dev = net_dev;
358                        else
359                                dev_put(net_dev);
360                        ++matches;
361                }
362        }
363
364        /* Check child interfaces */
365        down_read_nested(&priv->vlan_rwsem, nesting);
366        list_for_each_entry(child_priv, &priv->child_intfs, list) {
367                matches += ipoib_match_gid_pkey_addr(child_priv, gid,
368                                                    pkey_index, addr,
369                                                    nesting + 1,
370                                                    found_net_dev);
371                if (matches > 1)
372                        break;
373        }
374        up_read(&priv->vlan_rwsem);
375
376        return matches;
377}
378
379/* Returns the number of matching net_devs found (between 0 and 2). Also
380 * return the matching net_device in the @net_dev parameter, holding a
381 * reference to the net_device, if the number of matches >= 1 */
382static int __ipoib_get_net_dev_by_params(struct list_head *dev_list, u8 port,
383                                         u16 pkey_index,
384                                         const union ib_gid *gid,
385                                         const struct sockaddr *addr,
386                                         struct net_device **net_dev)
387{
388        struct ipoib_dev_priv *priv;
389        int matches = 0;
390
391        *net_dev = NULL;
392
393        list_for_each_entry(priv, dev_list, list) {
394                if (priv->port != port)
395                        continue;
396
397                matches += ipoib_match_gid_pkey_addr(priv, gid, pkey_index,
398                                                     addr, 0, net_dev);
399                if (matches > 1)
400                        break;
401        }
402
403        return matches;
404}
405
406static struct net_device *ipoib_get_net_dev_by_params(
407                struct ib_device *dev, u8 port, u16 pkey,
408                const union ib_gid *gid, const struct sockaddr *addr,
409                void *client_data)
410{
411        struct net_device *net_dev;
412        struct list_head *dev_list = client_data;
413        u16 pkey_index;
414        int matches;
415        int ret;
416
417        if (!rdma_protocol_ib(dev, port))
418                return NULL;
419
420        ret = ib_find_cached_pkey(dev, port, pkey, &pkey_index);
421        if (ret)
422                return NULL;
423
424        if (!dev_list)
425                return NULL;
426
427        /* See if we can find a unique device matching the L2 parameters */
428        matches = __ipoib_get_net_dev_by_params(dev_list, port, pkey_index,
429                                                gid, NULL, &net_dev);
430
431        switch (matches) {
432        case 0:
433                return NULL;
434        case 1:
435                return net_dev;
436        }
437
438        dev_put(net_dev);
439
440        /* Couldn't find a unique device with L2 parameters only. Use L3
441         * address to uniquely match the net device */
442        matches = __ipoib_get_net_dev_by_params(dev_list, port, pkey_index,
443                                                gid, addr, &net_dev);
444        switch (matches) {
445        case 0:
446                return NULL;
447        default:
448                dev_warn_ratelimited(&dev->dev,
449                                     "duplicate IP address detected\n");
450                /* Fall through */
451        case 1:
452                return net_dev;
453        }
454}
455
456int ipoib_set_mode(struct net_device *dev, const char *buf)
457{
458        struct ipoib_dev_priv *priv = netdev_priv(dev);
459
460        /* flush paths if we switch modes so that connections are restarted */
461        if (IPOIB_CM_SUPPORTED(dev->dev_addr) && !strcmp(buf, "connected\n")) {
462                set_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
463                ipoib_warn(priv, "enabling connected mode "
464                           "will cause multicast packet drops\n");
465                netdev_update_features(dev);
466                dev_set_mtu(dev, ipoib_cm_max_mtu(dev));
467                rtnl_unlock();
468                priv->tx_wr.wr.send_flags &= ~IB_SEND_IP_CSUM;
469
470                ipoib_flush_paths(dev);
471                return (!rtnl_trylock()) ? -EBUSY : 0;
472        }
473
474        if (!strcmp(buf, "datagram\n")) {
475                clear_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
476                netdev_update_features(dev);
477                dev_set_mtu(dev, min(priv->mcast_mtu, dev->mtu));
478                rtnl_unlock();
479                ipoib_flush_paths(dev);
480                return (!rtnl_trylock()) ? -EBUSY : 0;
481        }
482
483        return -EINVAL;
484}
485
486struct ipoib_path *__path_find(struct net_device *dev, void *gid)
487{
488        struct ipoib_dev_priv *priv = netdev_priv(dev);
489        struct rb_node *n = priv->path_tree.rb_node;
490        struct ipoib_path *path;
491        int ret;
492
493        while (n) {
494                path = rb_entry(n, struct ipoib_path, rb_node);
495
496                ret = memcmp(gid, path->pathrec.dgid.raw,
497                             sizeof (union ib_gid));
498
499                if (ret < 0)
500                        n = n->rb_left;
501                else if (ret > 0)
502                        n = n->rb_right;
503                else
504                        return path;
505        }
506
507        return NULL;
508}
509
510static int __path_add(struct net_device *dev, struct ipoib_path *path)
511{
512        struct ipoib_dev_priv *priv = netdev_priv(dev);
513        struct rb_node **n = &priv->path_tree.rb_node;
514        struct rb_node *pn = NULL;
515        struct ipoib_path *tpath;
516        int ret;
517
518        while (*n) {
519                pn = *n;
520                tpath = rb_entry(pn, struct ipoib_path, rb_node);
521
522                ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw,
523                             sizeof (union ib_gid));
524                if (ret < 0)
525                        n = &pn->rb_left;
526                else if (ret > 0)
527                        n = &pn->rb_right;
528                else
529                        return -EEXIST;
530        }
531
532        rb_link_node(&path->rb_node, pn, n);
533        rb_insert_color(&path->rb_node, &priv->path_tree);
534
535        list_add_tail(&path->list, &priv->path_list);
536
537        return 0;
538}
539
540static void path_free(struct net_device *dev, struct ipoib_path *path)
541{
542        struct sk_buff *skb;
543
544        while ((skb = __skb_dequeue(&path->queue)))
545                dev_kfree_skb_irq(skb);
546
547        ipoib_dbg(netdev_priv(dev), "path_free\n");
548
549        /* remove all neigh connected to this path */
550        ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
551
552        if (path->ah)
553                ipoib_put_ah(path->ah);
554
555        kfree(path);
556}
557
558#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
559
560struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev)
561{
562        struct ipoib_path_iter *iter;
563
564        iter = kmalloc(sizeof *iter, GFP_KERNEL);
565        if (!iter)
566                return NULL;
567
568        iter->dev = dev;
569        memset(iter->path.pathrec.dgid.raw, 0, 16);
570
571        if (ipoib_path_iter_next(iter)) {
572                kfree(iter);
573                return NULL;
574        }
575
576        return iter;
577}
578
579int ipoib_path_iter_next(struct ipoib_path_iter *iter)
580{
581        struct ipoib_dev_priv *priv = netdev_priv(iter->dev);
582        struct rb_node *n;
583        struct ipoib_path *path;
584        int ret = 1;
585
586        spin_lock_irq(&priv->lock);
587
588        n = rb_first(&priv->path_tree);
589
590        while (n) {
591                path = rb_entry(n, struct ipoib_path, rb_node);
592
593                if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw,
594                           sizeof (union ib_gid)) < 0) {
595                        iter->path = *path;
596                        ret = 0;
597                        break;
598                }
599
600                n = rb_next(n);
601        }
602
603        spin_unlock_irq(&priv->lock);
604
605        return ret;
606}
607
608void ipoib_path_iter_read(struct ipoib_path_iter *iter,
609                          struct ipoib_path *path)
610{
611        *path = iter->path;
612}
613
614#endif /* CONFIG_INFINIBAND_IPOIB_DEBUG */
615
616void ipoib_mark_paths_invalid(struct net_device *dev)
617{
618        struct ipoib_dev_priv *priv = netdev_priv(dev);
619        struct ipoib_path *path, *tp;
620
621        spin_lock_irq(&priv->lock);
622
623        list_for_each_entry_safe(path, tp, &priv->path_list, list) {
624                ipoib_dbg(priv, "mark path LID 0x%04x GID %pI6 invalid\n",
625                        be16_to_cpu(path->pathrec.dlid),
626                        path->pathrec.dgid.raw);
627                path->valid =  0;
628        }
629
630        spin_unlock_irq(&priv->lock);
631}
632
633struct classport_info_context {
634        struct ipoib_dev_priv   *priv;
635        struct completion       done;
636        struct ib_sa_query      *sa_query;
637};
638
639static void classport_info_query_cb(int status, struct ib_class_port_info *rec,
640                                    void *context)
641{
642        struct classport_info_context *cb_ctx = context;
643        struct ipoib_dev_priv *priv;
644
645        WARN_ON(!context);
646
647        priv = cb_ctx->priv;
648
649        if (status || !rec) {
650                pr_debug("device: %s failed query classport_info status: %d\n",
651                         priv->dev->name, status);
652                /* keeps the default, will try next mcast_restart */
653                priv->sm_fullmember_sendonly_support = false;
654                goto out;
655        }
656
657        if (ib_get_cpi_capmask2(rec) &
658            IB_SA_CAP_MASK2_SENDONLY_FULL_MEM_SUPPORT) {
659                pr_debug("device: %s enabled fullmember-sendonly for sendonly MCG\n",
660                         priv->dev->name);
661                priv->sm_fullmember_sendonly_support = true;
662        } else {
663                pr_debug("device: %s disabled fullmember-sendonly for sendonly MCG\n",
664                         priv->dev->name);
665                priv->sm_fullmember_sendonly_support = false;
666        }
667
668out:
669        complete(&cb_ctx->done);
670}
671
672int ipoib_check_sm_sendonly_fullmember_support(struct ipoib_dev_priv *priv)
673{
674        struct classport_info_context *callback_context;
675        int ret;
676
677        callback_context = kmalloc(sizeof(*callback_context), GFP_KERNEL);
678        if (!callback_context)
679                return -ENOMEM;
680
681        callback_context->priv = priv;
682        init_completion(&callback_context->done);
683
684        ret = ib_sa_classport_info_rec_query(&ipoib_sa_client,
685                                             priv->ca, priv->port, 3000,
686                                             GFP_KERNEL,
687                                             classport_info_query_cb,
688                                             callback_context,
689                                             &callback_context->sa_query);
690        if (ret < 0) {
691                pr_info("%s failed to send ib_sa_classport_info query, ret: %d\n",
692                        priv->dev->name, ret);
693                kfree(callback_context);
694                return ret;
695        }
696
697        /* waiting for the callback to finish before returnning */
698        wait_for_completion(&callback_context->done);
699        kfree(callback_context);
700
701        return ret;
702}
703
704static void push_pseudo_header(struct sk_buff *skb, const char *daddr)
705{
706        struct ipoib_pseudo_header *phdr;
707
708        phdr = (struct ipoib_pseudo_header *)skb_push(skb, sizeof(*phdr));
709        memcpy(phdr->hwaddr, daddr, INFINIBAND_ALEN);
710}
711
712void ipoib_flush_paths(struct net_device *dev)
713{
714        struct ipoib_dev_priv *priv = netdev_priv(dev);
715        struct ipoib_path *path, *tp;
716        LIST_HEAD(remove_list);
717        unsigned long flags;
718
719        netif_tx_lock_bh(dev);
720        spin_lock_irqsave(&priv->lock, flags);
721
722        list_splice_init(&priv->path_list, &remove_list);
723
724        list_for_each_entry(path, &remove_list, list)
725                rb_erase(&path->rb_node, &priv->path_tree);
726
727        list_for_each_entry_safe(path, tp, &remove_list, list) {
728                if (path->query)
729                        ib_sa_cancel_query(path->query_id, path->query);
730                spin_unlock_irqrestore(&priv->lock, flags);
731                netif_tx_unlock_bh(dev);
732                wait_for_completion(&path->done);
733                path_free(dev, path);
734                netif_tx_lock_bh(dev);
735                spin_lock_irqsave(&priv->lock, flags);
736        }
737
738        spin_unlock_irqrestore(&priv->lock, flags);
739        netif_tx_unlock_bh(dev);
740}
741
742static void path_rec_completion(int status,
743                                struct ib_sa_path_rec *pathrec,
744                                void *path_ptr)
745{
746        struct ipoib_path *path = path_ptr;
747        struct net_device *dev = path->dev;
748        struct ipoib_dev_priv *priv = netdev_priv(dev);
749        struct ipoib_ah *ah = NULL;
750        struct ipoib_ah *old_ah = NULL;
751        struct ipoib_neigh *neigh, *tn;
752        struct sk_buff_head skqueue;
753        struct sk_buff *skb;
754        unsigned long flags;
755
756        if (!status)
757                ipoib_dbg(priv, "PathRec LID 0x%04x for GID %pI6\n",
758                          be16_to_cpu(pathrec->dlid), pathrec->dgid.raw);
759        else
760                ipoib_dbg(priv, "PathRec status %d for GID %pI6\n",
761                          status, path->pathrec.dgid.raw);
762
763        skb_queue_head_init(&skqueue);
764
765        if (!status) {
766                struct ib_ah_attr av;
767
768                if (!ib_init_ah_from_path(priv->ca, priv->port, pathrec, &av))
769                        ah = ipoib_create_ah(dev, priv->pd, &av);
770        }
771
772        spin_lock_irqsave(&priv->lock, flags);
773
774        if (!IS_ERR_OR_NULL(ah)) {
775                path->pathrec = *pathrec;
776
777                old_ah   = path->ah;
778                path->ah = ah;
779
780                ipoib_dbg(priv, "created address handle %p for LID 0x%04x, SL %d\n",
781                          ah, be16_to_cpu(pathrec->dlid), pathrec->sl);
782
783                while ((skb = __skb_dequeue(&path->queue)))
784                        __skb_queue_tail(&skqueue, skb);
785
786                list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
787                        if (neigh->ah) {
788                                WARN_ON(neigh->ah != old_ah);
789                                /*
790                                 * Dropping the ah reference inside
791                                 * priv->lock is safe here, because we
792                                 * will hold one more reference from
793                                 * the original value of path->ah (ie
794                                 * old_ah).
795                                 */
796                                ipoib_put_ah(neigh->ah);
797                        }
798                        kref_get(&path->ah->ref);
799                        neigh->ah = path->ah;
800
801                        if (ipoib_cm_enabled(dev, neigh->daddr)) {
802                                if (!ipoib_cm_get(neigh))
803                                        ipoib_cm_set(neigh, ipoib_cm_create_tx(dev,
804                                                                               path,
805                                                                               neigh));
806                                if (!ipoib_cm_get(neigh)) {
807                                        ipoib_neigh_free(neigh);
808                                        continue;
809                                }
810                        }
811
812                        while ((skb = __skb_dequeue(&neigh->queue)))
813                                __skb_queue_tail(&skqueue, skb);
814                }
815                path->valid = 1;
816        }
817
818        path->query = NULL;
819        complete(&path->done);
820
821        spin_unlock_irqrestore(&priv->lock, flags);
822
823        if (IS_ERR_OR_NULL(ah))
824                ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
825
826        if (old_ah)
827                ipoib_put_ah(old_ah);
828
829        while ((skb = __skb_dequeue(&skqueue))) {
830                skb->dev = dev;
831                if (dev_queue_xmit(skb))
832                        ipoib_warn(priv, "dev_queue_xmit failed "
833                                   "to requeue packet\n");
834        }
835}
836
837static struct ipoib_path *path_rec_create(struct net_device *dev, void *gid)
838{
839        struct ipoib_dev_priv *priv = netdev_priv(dev);
840        struct ipoib_path *path;
841
842        if (!priv->broadcast)
843                return NULL;
844
845        path = kzalloc(sizeof *path, GFP_ATOMIC);
846        if (!path)
847                return NULL;
848
849        path->dev = dev;
850
851        skb_queue_head_init(&path->queue);
852
853        INIT_LIST_HEAD(&path->neigh_list);
854
855        memcpy(path->pathrec.dgid.raw, gid, sizeof (union ib_gid));
856        path->pathrec.sgid          = priv->local_gid;
857        path->pathrec.pkey          = cpu_to_be16(priv->pkey);
858        path->pathrec.numb_path     = 1;
859        path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class;
860
861        return path;
862}
863
864static int path_rec_start(struct net_device *dev,
865                          struct ipoib_path *path)
866{
867        struct ipoib_dev_priv *priv = netdev_priv(dev);
868
869        ipoib_dbg(priv, "Start path record lookup for %pI6\n",
870                  path->pathrec.dgid.raw);
871
872        init_completion(&path->done);
873
874        path->query_id =
875                ib_sa_path_rec_get(&ipoib_sa_client, priv->ca, priv->port,
876                                   &path->pathrec,
877                                   IB_SA_PATH_REC_DGID          |
878                                   IB_SA_PATH_REC_SGID          |
879                                   IB_SA_PATH_REC_NUMB_PATH     |
880                                   IB_SA_PATH_REC_TRAFFIC_CLASS |
881                                   IB_SA_PATH_REC_PKEY,
882                                   1000, GFP_ATOMIC,
883                                   path_rec_completion,
884                                   path, &path->query);
885        if (path->query_id < 0) {
886                ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id);
887                path->query = NULL;
888                complete(&path->done);
889                return path->query_id;
890        }
891
892        return 0;
893}
894
895static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
896                           struct net_device *dev)
897{
898        struct ipoib_dev_priv *priv = netdev_priv(dev);
899        struct ipoib_path *path;
900        struct ipoib_neigh *neigh;
901        unsigned long flags;
902
903        spin_lock_irqsave(&priv->lock, flags);
904        neigh = ipoib_neigh_alloc(daddr, dev);
905        if (!neigh) {
906                spin_unlock_irqrestore(&priv->lock, flags);
907                ++dev->stats.tx_dropped;
908                dev_kfree_skb_any(skb);
909                return;
910        }
911
912        path = __path_find(dev, daddr + 4);
913        if (!path) {
914                path = path_rec_create(dev, daddr + 4);
915                if (!path)
916                        goto err_path;
917
918                __path_add(dev, path);
919        }
920
921        list_add_tail(&neigh->list, &path->neigh_list);
922
923        if (path->ah) {
924                kref_get(&path->ah->ref);
925                neigh->ah = path->ah;
926
927                if (ipoib_cm_enabled(dev, neigh->daddr)) {
928                        if (!ipoib_cm_get(neigh))
929                                ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh));
930                        if (!ipoib_cm_get(neigh)) {
931                                ipoib_neigh_free(neigh);
932                                goto err_drop;
933                        }
934                        if (skb_queue_len(&neigh->queue) <
935                            IPOIB_MAX_PATH_REC_QUEUE) {
936                                push_pseudo_header(skb, neigh->daddr);
937                                __skb_queue_tail(&neigh->queue, skb);
938                        } else {
939                                ipoib_warn(priv, "queue length limit %d. Packet drop.\n",
940                                           skb_queue_len(&neigh->queue));
941                                goto err_drop;
942                        }
943                } else {
944                        spin_unlock_irqrestore(&priv->lock, flags);
945                        ipoib_send(dev, skb, path->ah, IPOIB_QPN(daddr));
946                        ipoib_neigh_put(neigh);
947                        return;
948                }
949        } else {
950                neigh->ah  = NULL;
951
952                if (!path->query && path_rec_start(dev, path))
953                        goto err_path;
954                if (skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
955                        push_pseudo_header(skb, neigh->daddr);
956                        __skb_queue_tail(&neigh->queue, skb);
957                } else {
958                        goto err_drop;
959                }
960        }
961
962        spin_unlock_irqrestore(&priv->lock, flags);
963        ipoib_neigh_put(neigh);
964        return;
965
966err_path:
967        ipoib_neigh_free(neigh);
968err_drop:
969        ++dev->stats.tx_dropped;
970        dev_kfree_skb_any(skb);
971
972        spin_unlock_irqrestore(&priv->lock, flags);
973        ipoib_neigh_put(neigh);
974}
975
976static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
977                             struct ipoib_pseudo_header *phdr)
978{
979        struct ipoib_dev_priv *priv = netdev_priv(dev);
980        struct ipoib_path *path;
981        unsigned long flags;
982
983        spin_lock_irqsave(&priv->lock, flags);
984
985        path = __path_find(dev, phdr->hwaddr + 4);
986        if (!path || !path->valid) {
987                int new_path = 0;
988
989                if (!path) {
990                        path = path_rec_create(dev, phdr->hwaddr + 4);
991                        new_path = 1;
992                }
993                if (path) {
994                        if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
995                                push_pseudo_header(skb, phdr->hwaddr);
996                                __skb_queue_tail(&path->queue, skb);
997                        } else {
998                                ++dev->stats.tx_dropped;
999                                dev_kfree_skb_any(skb);
1000                        }
1001
1002                        if (!path->query && path_rec_start(dev, path)) {
1003                                spin_unlock_irqrestore(&priv->lock, flags);
1004                                if (new_path)
1005                                        path_free(dev, path);
1006                                return;
1007                        } else
1008                                __path_add(dev, path);
1009                } else {
1010                        ++dev->stats.tx_dropped;
1011                        dev_kfree_skb_any(skb);
1012                }
1013
1014                spin_unlock_irqrestore(&priv->lock, flags);
1015                return;
1016        }
1017
1018        if (path->ah) {
1019                ipoib_dbg(priv, "Send unicast ARP to %04x\n",
1020                          be16_to_cpu(path->pathrec.dlid));
1021
1022                spin_unlock_irqrestore(&priv->lock, flags);
1023                ipoib_send(dev, skb, path->ah, IPOIB_QPN(phdr->hwaddr));
1024                return;
1025        } else if ((path->query || !path_rec_start(dev, path)) &&
1026                   skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1027                push_pseudo_header(skb, phdr->hwaddr);
1028                __skb_queue_tail(&path->queue, skb);
1029        } else {
1030                ++dev->stats.tx_dropped;
1031                dev_kfree_skb_any(skb);
1032        }
1033
1034        spin_unlock_irqrestore(&priv->lock, flags);
1035}
1036
1037static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
1038{
1039        struct ipoib_dev_priv *priv = netdev_priv(dev);
1040        struct ipoib_neigh *neigh;
1041        struct ipoib_pseudo_header *phdr;
1042        struct ipoib_header *header;
1043        unsigned long flags;
1044
1045        phdr = (struct ipoib_pseudo_header *) skb->data;
1046        skb_pull(skb, sizeof(*phdr));
1047        header = (struct ipoib_header *) skb->data;
1048
1049        if (unlikely(phdr->hwaddr[4] == 0xff)) {
1050                /* multicast, arrange "if" according to probability */
1051                if ((header->proto != htons(ETH_P_IP)) &&
1052                    (header->proto != htons(ETH_P_IPV6)) &&
1053                    (header->proto != htons(ETH_P_ARP)) &&
1054                    (header->proto != htons(ETH_P_RARP)) &&
1055                    (header->proto != htons(ETH_P_TIPC))) {
1056                        /* ethertype not supported by IPoIB */
1057                        ++dev->stats.tx_dropped;
1058                        dev_kfree_skb_any(skb);
1059                        return NETDEV_TX_OK;
1060                }
1061                /* Add in the P_Key for multicast*/
1062                phdr->hwaddr[8] = (priv->pkey >> 8) & 0xff;
1063                phdr->hwaddr[9] = priv->pkey & 0xff;
1064
1065                neigh = ipoib_neigh_get(dev, phdr->hwaddr);
1066                if (likely(neigh))
1067                        goto send_using_neigh;
1068                ipoib_mcast_send(dev, phdr->hwaddr, skb);
1069                return NETDEV_TX_OK;
1070        }
1071
1072        /* unicast, arrange "switch" according to probability */
1073        switch (header->proto) {
1074        case htons(ETH_P_IP):
1075        case htons(ETH_P_IPV6):
1076        case htons(ETH_P_TIPC):
1077                neigh = ipoib_neigh_get(dev, phdr->hwaddr);
1078                if (unlikely(!neigh)) {
1079                        neigh_add_path(skb, phdr->hwaddr, dev);
1080                        return NETDEV_TX_OK;
1081                }
1082                break;
1083        case htons(ETH_P_ARP):
1084        case htons(ETH_P_RARP):
1085                /* for unicast ARP and RARP should always perform path find */
1086                unicast_arp_send(skb, dev, phdr);
1087                return NETDEV_TX_OK;
1088        default:
1089                /* ethertype not supported by IPoIB */
1090                ++dev->stats.tx_dropped;
1091                dev_kfree_skb_any(skb);
1092                return NETDEV_TX_OK;
1093        }
1094
1095send_using_neigh:
1096        /* note we now hold a ref to neigh */
1097        if (ipoib_cm_get(neigh)) {
1098                if (ipoib_cm_up(neigh)) {
1099                        ipoib_cm_send(dev, skb, ipoib_cm_get(neigh));
1100                        goto unref;
1101                }
1102        } else if (neigh->ah) {
1103                ipoib_send(dev, skb, neigh->ah, IPOIB_QPN(phdr->hwaddr));
1104                goto unref;
1105        }
1106
1107        if (skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1108                push_pseudo_header(skb, phdr->hwaddr);
1109                spin_lock_irqsave(&priv->lock, flags);
1110                __skb_queue_tail(&neigh->queue, skb);
1111                spin_unlock_irqrestore(&priv->lock, flags);
1112        } else {
1113                ++dev->stats.tx_dropped;
1114                dev_kfree_skb_any(skb);
1115        }
1116
1117unref:
1118        ipoib_neigh_put(neigh);
1119
1120        return NETDEV_TX_OK;
1121}
1122
1123static void ipoib_timeout(struct net_device *dev)
1124{
1125        struct ipoib_dev_priv *priv = netdev_priv(dev);
1126
1127        ipoib_warn(priv, "transmit timeout: latency %d msecs\n",
1128                   jiffies_to_msecs(jiffies - dev_trans_start(dev)));
1129        ipoib_warn(priv, "queue stopped %d, tx_head %u, tx_tail %u\n",
1130                   netif_queue_stopped(dev),
1131                   priv->tx_head, priv->tx_tail);
1132        /* XXX reset QP, etc. */
1133}
1134
1135static int ipoib_hard_header(struct sk_buff *skb,
1136                             struct net_device *dev,
1137                             unsigned short type,
1138                             const void *daddr, const void *saddr, unsigned len)
1139{
1140        struct ipoib_header *header;
1141
1142        header = (struct ipoib_header *) skb_push(skb, sizeof *header);
1143
1144        header->proto = htons(type);
1145        header->reserved = 0;
1146
1147        /*
1148         * we don't rely on dst_entry structure,  always stuff the
1149         * destination address into skb hard header so we can figure out where
1150         * to send the packet later.
1151         */
1152        push_pseudo_header(skb, daddr);
1153
1154        return IPOIB_HARD_LEN;
1155}
1156
1157static void ipoib_set_mcast_list(struct net_device *dev)
1158{
1159        struct ipoib_dev_priv *priv = netdev_priv(dev);
1160
1161        if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) {
1162                ipoib_dbg(priv, "IPOIB_FLAG_OPER_UP not set");
1163                return;
1164        }
1165
1166        queue_work(priv->wq, &priv->restart_task);
1167}
1168
1169static int ipoib_get_iflink(const struct net_device *dev)
1170{
1171        struct ipoib_dev_priv *priv = netdev_priv(dev);
1172
1173        /* parent interface */
1174        if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags))
1175                return dev->ifindex;
1176
1177        /* child/vlan interface */
1178        return priv->parent->ifindex;
1179}
1180
1181static u32 ipoib_addr_hash(struct ipoib_neigh_hash *htbl, u8 *daddr)
1182{
1183        /*
1184         * Use only the address parts that contributes to spreading
1185         * The subnet prefix is not used as one can not connect to
1186         * same remote port (GUID) using the same remote QPN via two
1187         * different subnets.
1188         */
1189         /* qpn octets[1:4) & port GUID octets[12:20) */
1190        u32 *d32 = (u32 *) daddr;
1191        u32 hv;
1192
1193        hv = jhash_3words(d32[3], d32[4], IPOIB_QPN_MASK & d32[0], 0);
1194        return hv & htbl->mask;
1195}
1196
1197struct ipoib_neigh *ipoib_neigh_get(struct net_device *dev, u8 *daddr)
1198{
1199        struct ipoib_dev_priv *priv = netdev_priv(dev);
1200        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1201        struct ipoib_neigh_hash *htbl;
1202        struct ipoib_neigh *neigh = NULL;
1203        u32 hash_val;
1204
1205        rcu_read_lock_bh();
1206
1207        htbl = rcu_dereference_bh(ntbl->htbl);
1208
1209        if (!htbl)
1210                goto out_unlock;
1211
1212        hash_val = ipoib_addr_hash(htbl, daddr);
1213        for (neigh = rcu_dereference_bh(htbl->buckets[hash_val]);
1214             neigh != NULL;
1215             neigh = rcu_dereference_bh(neigh->hnext)) {
1216                if (memcmp(daddr, neigh->daddr, INFINIBAND_ALEN) == 0) {
1217                        /* found, take one ref on behalf of the caller */
1218                        if (!atomic_inc_not_zero(&neigh->refcnt)) {
1219                                /* deleted */
1220                                neigh = NULL;
1221                                goto out_unlock;
1222                        }
1223
1224                        if (likely(skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE))
1225                                neigh->alive = jiffies;
1226                        goto out_unlock;
1227                }
1228        }
1229
1230out_unlock:
1231        rcu_read_unlock_bh();
1232        return neigh;
1233}
1234
1235static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
1236{
1237        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1238        struct ipoib_neigh_hash *htbl;
1239        unsigned long neigh_obsolete;
1240        unsigned long dt;
1241        unsigned long flags;
1242        int i;
1243        LIST_HEAD(remove_list);
1244
1245        if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
1246                return;
1247
1248        spin_lock_irqsave(&priv->lock, flags);
1249
1250        htbl = rcu_dereference_protected(ntbl->htbl,
1251                                         lockdep_is_held(&priv->lock));
1252
1253        if (!htbl)
1254                goto out_unlock;
1255
1256        /* neigh is obsolete if it was idle for two GC periods */
1257        dt = 2 * arp_tbl.gc_interval;
1258        neigh_obsolete = jiffies - dt;
1259        /* handle possible race condition */
1260        if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
1261                goto out_unlock;
1262
1263        for (i = 0; i < htbl->size; i++) {
1264                struct ipoib_neigh *neigh;
1265                struct ipoib_neigh __rcu **np = &htbl->buckets[i];
1266
1267                while ((neigh = rcu_dereference_protected(*np,
1268                                                          lockdep_is_held(&priv->lock))) != NULL) {
1269                        /* was the neigh idle for two GC periods */
1270                        if (time_after(neigh_obsolete, neigh->alive)) {
1271
1272                                ipoib_check_and_add_mcast_sendonly(priv, neigh->daddr + 4, &remove_list);
1273
1274                                rcu_assign_pointer(*np,
1275                                                   rcu_dereference_protected(neigh->hnext,
1276                                                                             lockdep_is_held(&priv->lock)));
1277                                /* remove from path/mc list */
1278                                list_del(&neigh->list);
1279                                call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1280                        } else {
1281                                np = &neigh->hnext;
1282                        }
1283
1284                }
1285        }
1286
1287out_unlock:
1288        spin_unlock_irqrestore(&priv->lock, flags);
1289        ipoib_mcast_remove_list(&remove_list);
1290}
1291
1292static void ipoib_reap_neigh(struct work_struct *work)
1293{
1294        struct ipoib_dev_priv *priv =
1295                container_of(work, struct ipoib_dev_priv, neigh_reap_task.work);
1296
1297        __ipoib_reap_neigh(priv);
1298
1299        if (!test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
1300                queue_delayed_work(priv->wq, &priv->neigh_reap_task,
1301                                   arp_tbl.gc_interval);
1302}
1303
1304
1305static struct ipoib_neigh *ipoib_neigh_ctor(u8 *daddr,
1306                                      struct net_device *dev)
1307{
1308        struct ipoib_neigh *neigh;
1309
1310        neigh = kzalloc(sizeof *neigh, GFP_ATOMIC);
1311        if (!neigh)
1312                return NULL;
1313
1314        neigh->dev = dev;
1315        memcpy(&neigh->daddr, daddr, sizeof(neigh->daddr));
1316        skb_queue_head_init(&neigh->queue);
1317        INIT_LIST_HEAD(&neigh->list);
1318        ipoib_cm_set(neigh, NULL);
1319        /* one ref on behalf of the caller */
1320        atomic_set(&neigh->refcnt, 1);
1321
1322        return neigh;
1323}
1324
1325struct ipoib_neigh *ipoib_neigh_alloc(u8 *daddr,
1326                                      struct net_device *dev)
1327{
1328        struct ipoib_dev_priv *priv = netdev_priv(dev);
1329        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1330        struct ipoib_neigh_hash *htbl;
1331        struct ipoib_neigh *neigh;
1332        u32 hash_val;
1333
1334        htbl = rcu_dereference_protected(ntbl->htbl,
1335                                         lockdep_is_held(&priv->lock));
1336        if (!htbl) {
1337                neigh = NULL;
1338                goto out_unlock;
1339        }
1340
1341        /* need to add a new neigh, but maybe some other thread succeeded?
1342         * recalc hash, maybe hash resize took place so we do a search
1343         */
1344        hash_val = ipoib_addr_hash(htbl, daddr);
1345        for (neigh = rcu_dereference_protected(htbl->buckets[hash_val],
1346                                               lockdep_is_held(&priv->lock));
1347             neigh != NULL;
1348             neigh = rcu_dereference_protected(neigh->hnext,
1349                                               lockdep_is_held(&priv->lock))) {
1350                if (memcmp(daddr, neigh->daddr, INFINIBAND_ALEN) == 0) {
1351                        /* found, take one ref on behalf of the caller */
1352                        if (!atomic_inc_not_zero(&neigh->refcnt)) {
1353                                /* deleted */
1354                                neigh = NULL;
1355                                break;
1356                        }
1357                        neigh->alive = jiffies;
1358                        goto out_unlock;
1359                }
1360        }
1361
1362        neigh = ipoib_neigh_ctor(daddr, dev);
1363        if (!neigh)
1364                goto out_unlock;
1365
1366        /* one ref on behalf of the hash table */
1367        atomic_inc(&neigh->refcnt);
1368        neigh->alive = jiffies;
1369        /* put in hash */
1370        rcu_assign_pointer(neigh->hnext,
1371                           rcu_dereference_protected(htbl->buckets[hash_val],
1372                                                     lockdep_is_held(&priv->lock)));
1373        rcu_assign_pointer(htbl->buckets[hash_val], neigh);
1374        atomic_inc(&ntbl->entries);
1375
1376out_unlock:
1377
1378        return neigh;
1379}
1380
1381void ipoib_neigh_dtor(struct ipoib_neigh *neigh)
1382{
1383        /* neigh reference count was dropprd to zero */
1384        struct net_device *dev = neigh->dev;
1385        struct ipoib_dev_priv *priv = netdev_priv(dev);
1386        struct sk_buff *skb;
1387        if (neigh->ah)
1388                ipoib_put_ah(neigh->ah);
1389        while ((skb = __skb_dequeue(&neigh->queue))) {
1390                ++dev->stats.tx_dropped;
1391                dev_kfree_skb_any(skb);
1392        }
1393        if (ipoib_cm_get(neigh))
1394                ipoib_cm_destroy_tx(ipoib_cm_get(neigh));
1395        ipoib_dbg(netdev_priv(dev),
1396                  "neigh free for %06x %pI6\n",
1397                  IPOIB_QPN(neigh->daddr),
1398                  neigh->daddr + 4);
1399        kfree(neigh);
1400        if (atomic_dec_and_test(&priv->ntbl.entries)) {
1401                if (test_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags))
1402                        complete(&priv->ntbl.flushed);
1403        }
1404}
1405
1406static void ipoib_neigh_reclaim(struct rcu_head *rp)
1407{
1408        /* Called as a result of removal from hash table */
1409        struct ipoib_neigh *neigh = container_of(rp, struct ipoib_neigh, rcu);
1410        /* note TX context may hold another ref */
1411        ipoib_neigh_put(neigh);
1412}
1413
1414void ipoib_neigh_free(struct ipoib_neigh *neigh)
1415{
1416        struct net_device *dev = neigh->dev;
1417        struct ipoib_dev_priv *priv = netdev_priv(dev);
1418        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1419        struct ipoib_neigh_hash *htbl;
1420        struct ipoib_neigh __rcu **np;
1421        struct ipoib_neigh *n;
1422        u32 hash_val;
1423
1424        htbl = rcu_dereference_protected(ntbl->htbl,
1425                                        lockdep_is_held(&priv->lock));
1426        if (!htbl)
1427                return;
1428
1429        hash_val = ipoib_addr_hash(htbl, neigh->daddr);
1430        np = &htbl->buckets[hash_val];
1431        for (n = rcu_dereference_protected(*np,
1432                                            lockdep_is_held(&priv->lock));
1433             n != NULL;
1434             n = rcu_dereference_protected(*np,
1435                                        lockdep_is_held(&priv->lock))) {
1436                if (n == neigh) {
1437                        /* found */
1438                        rcu_assign_pointer(*np,
1439                                           rcu_dereference_protected(neigh->hnext,
1440                                                                     lockdep_is_held(&priv->lock)));
1441                        /* remove from parent list */
1442                        list_del(&neigh->list);
1443                        call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1444                        return;
1445                } else {
1446                        np = &n->hnext;
1447                }
1448        }
1449}
1450
1451static int ipoib_neigh_hash_init(struct ipoib_dev_priv *priv)
1452{
1453        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1454        struct ipoib_neigh_hash *htbl;
1455        struct ipoib_neigh __rcu **buckets;
1456        u32 size;
1457
1458        clear_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags);
1459        ntbl->htbl = NULL;
1460        htbl = kzalloc(sizeof(*htbl), GFP_KERNEL);
1461        if (!htbl)
1462                return -ENOMEM;
1463        set_bit(IPOIB_STOP_NEIGH_GC, &priv->flags);
1464        size = roundup_pow_of_two(arp_tbl.gc_thresh3);
1465        buckets = kzalloc(size * sizeof(*buckets), GFP_KERNEL);
1466        if (!buckets) {
1467                kfree(htbl);
1468                return -ENOMEM;
1469        }
1470        htbl->size = size;
1471        htbl->mask = (size - 1);
1472        htbl->buckets = buckets;
1473        RCU_INIT_POINTER(ntbl->htbl, htbl);
1474        htbl->ntbl = ntbl;
1475        atomic_set(&ntbl->entries, 0);
1476
1477        /* start garbage collection */
1478        clear_bit(IPOIB_STOP_NEIGH_GC, &priv->flags);
1479        queue_delayed_work(priv->wq, &priv->neigh_reap_task,
1480                           arp_tbl.gc_interval);
1481
1482        return 0;
1483}
1484
1485static void neigh_hash_free_rcu(struct rcu_head *head)
1486{
1487        struct ipoib_neigh_hash *htbl = container_of(head,
1488                                                    struct ipoib_neigh_hash,
1489                                                    rcu);
1490        struct ipoib_neigh __rcu **buckets = htbl->buckets;
1491        struct ipoib_neigh_table *ntbl = htbl->ntbl;
1492
1493        kfree(buckets);
1494        kfree(htbl);
1495        complete(&ntbl->deleted);
1496}
1497
1498void ipoib_del_neighs_by_gid(struct net_device *dev, u8 *gid)
1499{
1500        struct ipoib_dev_priv *priv = netdev_priv(dev);
1501        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1502        struct ipoib_neigh_hash *htbl;
1503        unsigned long flags;
1504        int i;
1505
1506        /* remove all neigh connected to a given path or mcast */
1507        spin_lock_irqsave(&priv->lock, flags);
1508
1509        htbl = rcu_dereference_protected(ntbl->htbl,
1510                                         lockdep_is_held(&priv->lock));
1511
1512        if (!htbl)
1513                goto out_unlock;
1514
1515        for (i = 0; i < htbl->size; i++) {
1516                struct ipoib_neigh *neigh;
1517                struct ipoib_neigh __rcu **np = &htbl->buckets[i];
1518
1519                while ((neigh = rcu_dereference_protected(*np,
1520                                                          lockdep_is_held(&priv->lock))) != NULL) {
1521                        /* delete neighs belong to this parent */
1522                        if (!memcmp(gid, neigh->daddr + 4, sizeof (union ib_gid))) {
1523                                rcu_assign_pointer(*np,
1524                                                   rcu_dereference_protected(neigh->hnext,
1525                                                                             lockdep_is_held(&priv->lock)));
1526                                /* remove from parent list */
1527                                list_del(&neigh->list);
1528                                call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1529                        } else {
1530                                np = &neigh->hnext;
1531                        }
1532
1533                }
1534        }
1535out_unlock:
1536        spin_unlock_irqrestore(&priv->lock, flags);
1537}
1538
1539static void ipoib_flush_neighs(struct ipoib_dev_priv *priv)
1540{
1541        struct ipoib_neigh_table *ntbl = &priv->ntbl;
1542        struct ipoib_neigh_hash *htbl;
1543        unsigned long flags;
1544        int i, wait_flushed = 0;
1545
1546        init_completion(&priv->ntbl.flushed);
1547
1548        spin_lock_irqsave(&priv->lock, flags);
1549
1550        htbl = rcu_dereference_protected(ntbl->htbl,
1551                                        lockdep_is_held(&priv->lock));
1552        if (!htbl)
1553                goto out_unlock;
1554
1555        wait_flushed = atomic_read(&priv->ntbl.entries);
1556        if (!wait_flushed)
1557                goto free_htbl;
1558
1559        for (i = 0; i < htbl->size; i++) {
1560                struct ipoib_neigh *neigh;
1561                struct ipoib_neigh __rcu **np = &htbl->buckets[i];
1562
1563                while ((neigh = rcu_dereference_protected(*np,
1564                                       lockdep_is_held(&priv->lock))) != NULL) {
1565                        rcu_assign_pointer(*np,
1566                                           rcu_dereference_protected(neigh->hnext,
1567                                                                     lockdep_is_held(&priv->lock)));
1568                        /* remove from path/mc list */
1569                        list_del(&neigh->list);
1570                        call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1571                }
1572        }
1573
1574free_htbl:
1575        rcu_assign_pointer(ntbl->htbl, NULL);
1576        call_rcu(&htbl->rcu, neigh_hash_free_rcu);
1577
1578out_unlock:
1579        spin_unlock_irqrestore(&priv->lock, flags);
1580        if (wait_flushed)
1581                wait_for_completion(&priv->ntbl.flushed);
1582}
1583
1584static void ipoib_neigh_hash_uninit(struct net_device *dev)
1585{
1586        struct ipoib_dev_priv *priv = netdev_priv(dev);
1587        int stopped;
1588
1589        ipoib_dbg(priv, "ipoib_neigh_hash_uninit\n");
1590        init_completion(&priv->ntbl.deleted);
1591        set_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags);
1592
1593        /* Stop GC if called at init fail need to cancel work */
1594        stopped = test_and_set_bit(IPOIB_STOP_NEIGH_GC, &priv->flags);
1595        if (!stopped)
1596                cancel_delayed_work(&priv->neigh_reap_task);
1597
1598        ipoib_flush_neighs(priv);
1599
1600        wait_for_completion(&priv->ntbl.deleted);
1601}
1602
1603
1604int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
1605{
1606        struct ipoib_dev_priv *priv = netdev_priv(dev);
1607
1608        /* Allocate RX/TX "rings" to hold queued skbs */
1609        priv->rx_ring = kzalloc(ipoib_recvq_size * sizeof *priv->rx_ring,
1610                                GFP_KERNEL);
1611        if (!priv->rx_ring) {
1612                printk(KERN_WARNING "%s: failed to allocate RX ring (%d entries)\n",
1613                       ca->name, ipoib_recvq_size);
1614                goto out;
1615        }
1616
1617        priv->tx_ring = vzalloc(ipoib_sendq_size * sizeof *priv->tx_ring);
1618        if (!priv->tx_ring) {
1619                printk(KERN_WARNING "%s: failed to allocate TX ring (%d entries)\n",
1620                       ca->name, ipoib_sendq_size);
1621                goto out_rx_ring_cleanup;
1622        }
1623
1624        /* priv->tx_head, tx_tail & tx_outstanding are already 0 */
1625
1626        if (ipoib_ib_dev_init(dev, ca, port))
1627                goto out_tx_ring_cleanup;
1628
1629        /*
1630         * Must be after ipoib_ib_dev_init so we can allocate a per
1631         * device wq there and use it here
1632         */
1633        if (ipoib_neigh_hash_init(priv) < 0)
1634                goto out_dev_uninit;
1635
1636        return 0;
1637
1638out_dev_uninit:
1639        ipoib_ib_dev_cleanup(dev);
1640
1641out_tx_ring_cleanup:
1642        vfree(priv->tx_ring);
1643
1644out_rx_ring_cleanup:
1645        kfree(priv->rx_ring);
1646
1647out:
1648        return -ENOMEM;
1649}
1650
1651void ipoib_dev_cleanup(struct net_device *dev)
1652{
1653        struct ipoib_dev_priv *priv = netdev_priv(dev), *cpriv, *tcpriv;
1654        LIST_HEAD(head);
1655
1656        ASSERT_RTNL();
1657
1658        ipoib_delete_debug_files(dev);
1659
1660        /* Delete any child interfaces first */
1661        list_for_each_entry_safe(cpriv, tcpriv, &priv->child_intfs, list) {
1662                /* Stop GC on child */
1663                set_bit(IPOIB_STOP_NEIGH_GC, &cpriv->flags);
1664                cancel_delayed_work(&cpriv->neigh_reap_task);
1665                unregister_netdevice_queue(cpriv->dev, &head);
1666        }
1667        unregister_netdevice_many(&head);
1668
1669        /*
1670         * Must be before ipoib_ib_dev_cleanup or we delete an in use
1671         * work queue
1672         */
1673        ipoib_neigh_hash_uninit(dev);
1674
1675        ipoib_ib_dev_cleanup(dev);
1676
1677        kfree(priv->rx_ring);
1678        vfree(priv->tx_ring);
1679
1680        priv->rx_ring = NULL;
1681        priv->tx_ring = NULL;
1682}
1683
1684static int ipoib_set_vf_link_state(struct net_device *dev, int vf, int link_state)
1685{
1686        struct ipoib_dev_priv *priv = netdev_priv(dev);
1687
1688        return ib_set_vf_link_state(priv->ca, vf, priv->port, link_state);
1689}
1690
1691static int ipoib_get_vf_config(struct net_device *dev, int vf,
1692                               struct ifla_vf_info *ivf)
1693{
1694        struct ipoib_dev_priv *priv = netdev_priv(dev);
1695        int err;
1696
1697        err = ib_get_vf_config(priv->ca, vf, priv->port, ivf);
1698        if (err)
1699                return err;
1700
1701        ivf->vf = vf;
1702
1703        return 0;
1704}
1705
1706static int ipoib_set_vf_guid(struct net_device *dev, int vf, u64 guid, int type)
1707{
1708        struct ipoib_dev_priv *priv = netdev_priv(dev);
1709
1710        if (type != IFLA_VF_IB_NODE_GUID && type != IFLA_VF_IB_PORT_GUID)
1711                return -EINVAL;
1712
1713        return ib_set_vf_guid(priv->ca, vf, priv->port, guid, type);
1714}
1715
1716static int ipoib_get_vf_stats(struct net_device *dev, int vf,
1717                              struct ifla_vf_stats *vf_stats)
1718{
1719        struct ipoib_dev_priv *priv = netdev_priv(dev);
1720
1721        return ib_get_vf_stats(priv->ca, vf, priv->port, vf_stats);
1722}
1723
1724static const struct header_ops ipoib_header_ops = {
1725        .create = ipoib_hard_header,
1726};
1727
1728static const struct net_device_ops ipoib_netdev_ops_pf = {
1729        .ndo_uninit              = ipoib_uninit,
1730        .ndo_open                = ipoib_open,
1731        .ndo_stop                = ipoib_stop,
1732        .ndo_change_mtu          = ipoib_change_mtu,
1733        .ndo_fix_features        = ipoib_fix_features,
1734        .ndo_start_xmit          = ipoib_start_xmit,
1735        .ndo_tx_timeout          = ipoib_timeout,
1736        .ndo_set_rx_mode         = ipoib_set_mcast_list,
1737        .ndo_get_iflink          = ipoib_get_iflink,
1738        .ndo_set_vf_link_state   = ipoib_set_vf_link_state,
1739        .ndo_get_vf_config       = ipoib_get_vf_config,
1740        .ndo_get_vf_stats        = ipoib_get_vf_stats,
1741        .ndo_set_vf_guid         = ipoib_set_vf_guid,
1742        .ndo_set_mac_address     = ipoib_set_mac,
1743};
1744
1745static const struct net_device_ops ipoib_netdev_ops_vf = {
1746        .ndo_uninit              = ipoib_uninit,
1747        .ndo_open                = ipoib_open,
1748        .ndo_stop                = ipoib_stop,
1749        .ndo_change_mtu          = ipoib_change_mtu,
1750        .ndo_fix_features        = ipoib_fix_features,
1751        .ndo_start_xmit          = ipoib_start_xmit,
1752        .ndo_tx_timeout          = ipoib_timeout,
1753        .ndo_set_rx_mode         = ipoib_set_mcast_list,
1754        .ndo_get_iflink          = ipoib_get_iflink,
1755};
1756
1757void ipoib_setup(struct net_device *dev)
1758{
1759        struct ipoib_dev_priv *priv = netdev_priv(dev);
1760
1761        if (priv->hca_caps & IB_DEVICE_VIRTUAL_FUNCTION)
1762                dev->netdev_ops = &ipoib_netdev_ops_vf;
1763        else
1764                dev->netdev_ops = &ipoib_netdev_ops_pf;
1765
1766        dev->header_ops          = &ipoib_header_ops;
1767
1768        ipoib_set_ethtool_ops(dev);
1769
1770        netif_napi_add(dev, &priv->napi, ipoib_poll, NAPI_POLL_WEIGHT);
1771
1772        dev->watchdog_timeo      = HZ;
1773
1774        dev->flags              |= IFF_BROADCAST | IFF_MULTICAST;
1775
1776        dev->hard_header_len     = IPOIB_HARD_LEN;
1777        dev->addr_len            = INFINIBAND_ALEN;
1778        dev->type                = ARPHRD_INFINIBAND;
1779        dev->tx_queue_len        = ipoib_sendq_size * 2;
1780        dev->features            = (NETIF_F_VLAN_CHALLENGED     |
1781                                    NETIF_F_HIGHDMA);
1782        netif_keep_dst(dev);
1783
1784        memcpy(dev->broadcast, ipv4_bcast_addr, INFINIBAND_ALEN);
1785
1786        priv->dev = dev;
1787
1788        spin_lock_init(&priv->lock);
1789
1790        init_rwsem(&priv->vlan_rwsem);
1791
1792        INIT_LIST_HEAD(&priv->path_list);
1793        INIT_LIST_HEAD(&priv->child_intfs);
1794        INIT_LIST_HEAD(&priv->dead_ahs);
1795        INIT_LIST_HEAD(&priv->multicast_list);
1796
1797        INIT_DELAYED_WORK(&priv->mcast_task,   ipoib_mcast_join_task);
1798        INIT_WORK(&priv->carrier_on_task, ipoib_mcast_carrier_on_task);
1799        INIT_WORK(&priv->flush_light,   ipoib_ib_dev_flush_light);
1800        INIT_WORK(&priv->flush_normal,   ipoib_ib_dev_flush_normal);
1801        INIT_WORK(&priv->flush_heavy,   ipoib_ib_dev_flush_heavy);
1802        INIT_WORK(&priv->restart_task, ipoib_mcast_restart_task);
1803        INIT_DELAYED_WORK(&priv->ah_reap_task, ipoib_reap_ah);
1804        INIT_DELAYED_WORK(&priv->neigh_reap_task, ipoib_reap_neigh);
1805}
1806
1807struct ipoib_dev_priv *ipoib_intf_alloc(const char *name)
1808{
1809        struct net_device *dev;
1810
1811        dev = alloc_netdev((int)sizeof(struct ipoib_dev_priv), name,
1812                           NET_NAME_UNKNOWN, ipoib_setup);
1813        if (!dev)
1814                return NULL;
1815
1816        return netdev_priv(dev);
1817}
1818
1819static ssize_t show_pkey(struct device *dev,
1820                         struct device_attribute *attr, char *buf)
1821{
1822        struct ipoib_dev_priv *priv = netdev_priv(to_net_dev(dev));
1823
1824        return sprintf(buf, "0x%04x\n", priv->pkey);
1825}
1826static DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
1827
1828static ssize_t show_umcast(struct device *dev,
1829                           struct device_attribute *attr, char *buf)
1830{
1831        struct ipoib_dev_priv *priv = netdev_priv(to_net_dev(dev));
1832
1833        return sprintf(buf, "%d\n", test_bit(IPOIB_FLAG_UMCAST, &priv->flags));
1834}
1835
1836void ipoib_set_umcast(struct net_device *ndev, int umcast_val)
1837{
1838        struct ipoib_dev_priv *priv = netdev_priv(ndev);
1839
1840        if (umcast_val > 0) {
1841                set_bit(IPOIB_FLAG_UMCAST, &priv->flags);
1842                ipoib_warn(priv, "ignoring multicast groups joined directly "
1843                                "by userspace\n");
1844        } else
1845                clear_bit(IPOIB_FLAG_UMCAST, &priv->flags);
1846}
1847
1848static ssize_t set_umcast(struct device *dev,
1849                          struct device_attribute *attr,
1850                          const char *buf, size_t count)
1851{
1852        unsigned long umcast_val = simple_strtoul(buf, NULL, 0);
1853
1854        ipoib_set_umcast(to_net_dev(dev), umcast_val);
1855
1856        return count;
1857}
1858static DEVICE_ATTR(umcast, S_IWUSR | S_IRUGO, show_umcast, set_umcast);
1859
1860int ipoib_add_umcast_attr(struct net_device *dev)
1861{
1862        return device_create_file(&dev->dev, &dev_attr_umcast);
1863}
1864
1865static void set_base_guid(struct ipoib_dev_priv *priv, union ib_gid *gid)
1866{
1867        struct ipoib_dev_priv *child_priv;
1868        struct net_device *netdev = priv->dev;
1869
1870        netif_addr_lock_bh(netdev);
1871
1872        memcpy(&priv->local_gid.global.interface_id,
1873               &gid->global.interface_id,
1874               sizeof(gid->global.interface_id));
1875        memcpy(netdev->dev_addr + 4, &priv->local_gid, sizeof(priv->local_gid));
1876        clear_bit(IPOIB_FLAG_DEV_ADDR_SET, &priv->flags);
1877
1878        netif_addr_unlock_bh(netdev);
1879
1880        if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
1881                down_read(&priv->vlan_rwsem);
1882                list_for_each_entry(child_priv, &priv->child_intfs, list)
1883                        set_base_guid(child_priv, gid);
1884                up_read(&priv->vlan_rwsem);
1885        }
1886}
1887
1888static int ipoib_check_lladdr(struct net_device *dev,
1889                              struct sockaddr_storage *ss)
1890{
1891        union ib_gid *gid = (union ib_gid *)(ss->__data + 4);
1892        int ret = 0;
1893
1894        netif_addr_lock_bh(dev);
1895
1896        /* Make sure the QPN, reserved and subnet prefix match the current
1897         * lladdr, it also makes sure the lladdr is unicast.
1898         */
1899        if (memcmp(dev->dev_addr, ss->__data,
1900                   4 + sizeof(gid->global.subnet_prefix)) ||
1901            gid->global.interface_id == 0)
1902                ret = -EINVAL;
1903
1904        netif_addr_unlock_bh(dev);
1905
1906        return ret;
1907}
1908
1909static int ipoib_set_mac(struct net_device *dev, void *addr)
1910{
1911        struct ipoib_dev_priv *priv = netdev_priv(dev);
1912        struct sockaddr_storage *ss = addr;
1913        int ret;
1914
1915        if (!(dev->priv_flags & IFF_LIVE_ADDR_CHANGE) && netif_running(dev))
1916                return -EBUSY;
1917
1918        ret = ipoib_check_lladdr(dev, ss);
1919        if (ret)
1920                return ret;
1921
1922        set_base_guid(priv, (union ib_gid *)(ss->__data + 4));
1923
1924        queue_work(ipoib_workqueue, &priv->flush_light);
1925
1926        return 0;
1927}
1928
1929static ssize_t create_child(struct device *dev,
1930                            struct device_attribute *attr,
1931                            const char *buf, size_t count)
1932{
1933        int pkey;
1934        int ret;
1935
1936        if (sscanf(buf, "%i", &pkey) != 1)
1937                return -EINVAL;
1938
1939        if (pkey <= 0 || pkey > 0xffff || pkey == 0x8000)
1940                return -EINVAL;
1941
1942        /*
1943         * Set the full membership bit, so that we join the right
1944         * broadcast group, etc.
1945         */
1946        pkey |= 0x8000;
1947
1948        ret = ipoib_vlan_add(to_net_dev(dev), pkey);
1949
1950        return ret ? ret : count;
1951}
1952static DEVICE_ATTR(create_child, S_IWUSR, NULL, create_child);
1953
1954static ssize_t delete_child(struct device *dev,
1955                            struct device_attribute *attr,
1956                            const char *buf, size_t count)
1957{
1958        int pkey;
1959        int ret;
1960
1961        if (sscanf(buf, "%i", &pkey) != 1)
1962                return -EINVAL;
1963
1964        if (pkey < 0 || pkey > 0xffff)
1965                return -EINVAL;
1966
1967        ret = ipoib_vlan_delete(to_net_dev(dev), pkey);
1968
1969        return ret ? ret : count;
1970
1971}
1972static DEVICE_ATTR(delete_child, S_IWUSR, NULL, delete_child);
1973
1974int ipoib_add_pkey_attr(struct net_device *dev)
1975{
1976        return device_create_file(&dev->dev, &dev_attr_pkey);
1977}
1978
1979int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca)
1980{
1981        priv->hca_caps = hca->attrs.device_cap_flags;
1982
1983        if (priv->hca_caps & IB_DEVICE_UD_IP_CSUM) {
1984                priv->dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
1985
1986                if (priv->hca_caps & IB_DEVICE_UD_TSO)
1987                        priv->dev->hw_features |= NETIF_F_TSO;
1988
1989                priv->dev->features |= priv->dev->hw_features;
1990        }
1991
1992        return 0;
1993}
1994
1995static struct net_device *ipoib_add_port(const char *format,
1996                                         struct ib_device *hca, u8 port)
1997{
1998        struct ipoib_dev_priv *priv;
1999        struct ib_port_attr attr;
2000        int result = -ENOMEM;
2001
2002        priv = ipoib_intf_alloc(format);
2003        if (!priv)
2004                goto alloc_mem_failed;
2005
2006        SET_NETDEV_DEV(priv->dev, hca->dma_device);
2007        priv->dev->dev_id = port - 1;
2008
2009        result = ib_query_port(hca, port, &attr);
2010        if (!result)
2011                priv->max_ib_mtu = ib_mtu_enum_to_int(attr.max_mtu);
2012        else {
2013                printk(KERN_WARNING "%s: ib_query_port %d failed\n",
2014                       hca->name, port);
2015                goto device_init_failed;
2016        }
2017
2018        /* MTU will be reset when mcast join happens */
2019        priv->dev->mtu  = IPOIB_UD_MTU(priv->max_ib_mtu);
2020        priv->mcast_mtu  = priv->admin_mtu = priv->dev->mtu;
2021
2022        priv->dev->neigh_priv_len = sizeof(struct ipoib_neigh);
2023
2024        result = ib_query_pkey(hca, port, 0, &priv->pkey);
2025        if (result) {
2026                printk(KERN_WARNING "%s: ib_query_pkey port %d failed (ret = %d)\n",
2027                       hca->name, port, result);
2028                goto device_init_failed;
2029        }
2030
2031        result = ipoib_set_dev_features(priv, hca);
2032        if (result)
2033                goto device_init_failed;
2034
2035        /*
2036         * Set the full membership bit, so that we join the right
2037         * broadcast group, etc.
2038         */
2039        priv->pkey |= 0x8000;
2040
2041        priv->dev->broadcast[8] = priv->pkey >> 8;
2042        priv->dev->broadcast[9] = priv->pkey & 0xff;
2043
2044        result = ib_query_gid(hca, port, 0, &priv->local_gid, NULL);
2045        if (result) {
2046                printk(KERN_WARNING "%s: ib_query_gid port %d failed (ret = %d)\n",
2047                       hca->name, port, result);
2048                goto device_init_failed;
2049        } else
2050                memcpy(priv->dev->dev_addr + 4, priv->local_gid.raw, sizeof (union ib_gid));
2051        set_bit(IPOIB_FLAG_DEV_ADDR_SET, &priv->flags);
2052
2053        result = ipoib_dev_init(priv->dev, hca, port);
2054        if (result < 0) {
2055                printk(KERN_WARNING "%s: failed to initialize port %d (ret = %d)\n",
2056                       hca->name, port, result);
2057                goto device_init_failed;
2058        }
2059
2060        INIT_IB_EVENT_HANDLER(&priv->event_handler,
2061                              priv->ca, ipoib_event);
2062        result = ib_register_event_handler(&priv->event_handler);
2063        if (result < 0) {
2064                printk(KERN_WARNING "%s: ib_register_event_handler failed for "
2065                       "port %d (ret = %d)\n",
2066                       hca->name, port, result);
2067                goto event_failed;
2068        }
2069
2070        result = register_netdev(priv->dev);
2071        if (result) {
2072                printk(KERN_WARNING "%s: couldn't register ipoib port %d; error %d\n",
2073                       hca->name, port, result);
2074                goto register_failed;
2075        }
2076
2077        ipoib_create_debug_files(priv->dev);
2078
2079        if (ipoib_cm_add_mode_attr(priv->dev))
2080                goto sysfs_failed;
2081        if (ipoib_add_pkey_attr(priv->dev))
2082                goto sysfs_failed;
2083        if (ipoib_add_umcast_attr(priv->dev))
2084                goto sysfs_failed;
2085        if (device_create_file(&priv->dev->dev, &dev_attr_create_child))
2086                goto sysfs_failed;
2087        if (device_create_file(&priv->dev->dev, &dev_attr_delete_child))
2088                goto sysfs_failed;
2089
2090        return priv->dev;
2091
2092sysfs_failed:
2093        ipoib_delete_debug_files(priv->dev);
2094        unregister_netdev(priv->dev);
2095
2096register_failed:
2097        ib_unregister_event_handler(&priv->event_handler);
2098        flush_workqueue(ipoib_workqueue);
2099        /* Stop GC if started before flush */
2100        set_bit(IPOIB_STOP_NEIGH_GC, &priv->flags);
2101        cancel_delayed_work(&priv->neigh_reap_task);
2102        flush_workqueue(priv->wq);
2103
2104event_failed:
2105        ipoib_dev_cleanup(priv->dev);
2106
2107device_init_failed:
2108        free_netdev(priv->dev);
2109
2110alloc_mem_failed:
2111        return ERR_PTR(result);
2112}
2113
2114static void ipoib_add_one(struct ib_device *device)
2115{
2116        struct list_head *dev_list;
2117        struct net_device *dev;
2118        struct ipoib_dev_priv *priv;
2119        int p;
2120        int count = 0;
2121
2122        dev_list = kmalloc(sizeof *dev_list, GFP_KERNEL);
2123        if (!dev_list)
2124                return;
2125
2126        INIT_LIST_HEAD(dev_list);
2127
2128        for (p = rdma_start_port(device); p <= rdma_end_port(device); ++p) {
2129                if (!rdma_protocol_ib(device, p))
2130                        continue;
2131                dev = ipoib_add_port("ib%d", device, p);
2132                if (!IS_ERR(dev)) {
2133                        priv = netdev_priv(dev);
2134                        list_add_tail(&priv->list, dev_list);
2135                        count++;
2136                }
2137        }
2138
2139        if (!count) {
2140                kfree(dev_list);
2141                return;
2142        }
2143
2144        ib_set_client_data(device, &ipoib_client, dev_list);
2145}
2146
2147static void ipoib_remove_one(struct ib_device *device, void *client_data)
2148{
2149        struct ipoib_dev_priv *priv, *tmp;
2150        struct list_head *dev_list = client_data;
2151
2152        if (!dev_list)
2153                return;
2154
2155        list_for_each_entry_safe(priv, tmp, dev_list, list) {
2156                ib_unregister_event_handler(&priv->event_handler);
2157                flush_workqueue(ipoib_workqueue);
2158
2159                /* mark interface in the middle of destruction */
2160                set_bit(IPOIB_FLAG_GOING_DOWN, &priv->flags);
2161
2162                rtnl_lock();
2163                dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP);
2164                rtnl_unlock();
2165
2166                /* Stop GC */
2167                set_bit(IPOIB_STOP_NEIGH_GC, &priv->flags);
2168                cancel_delayed_work(&priv->neigh_reap_task);
2169                flush_workqueue(priv->wq);
2170
2171                unregister_netdev(priv->dev);
2172                free_netdev(priv->dev);
2173        }
2174
2175        kfree(dev_list);
2176}
2177
2178static int __init ipoib_init_module(void)
2179{
2180        int ret;
2181
2182        ipoib_recvq_size = roundup_pow_of_two(ipoib_recvq_size);
2183        ipoib_recvq_size = min(ipoib_recvq_size, IPOIB_MAX_QUEUE_SIZE);
2184        ipoib_recvq_size = max(ipoib_recvq_size, IPOIB_MIN_QUEUE_SIZE);
2185
2186        ipoib_sendq_size = roundup_pow_of_two(ipoib_sendq_size);
2187        ipoib_sendq_size = min(ipoib_sendq_size, IPOIB_MAX_QUEUE_SIZE);
2188        ipoib_sendq_size = max3(ipoib_sendq_size, 2 * MAX_SEND_CQE, IPOIB_MIN_QUEUE_SIZE);
2189#ifdef CONFIG_INFINIBAND_IPOIB_CM
2190        ipoib_max_conn_qp = min(ipoib_max_conn_qp, IPOIB_CM_MAX_CONN_QP);
2191#endif
2192
2193        /*
2194         * When copying small received packets, we only copy from the
2195         * linear data part of the SKB, so we rely on this condition.
2196         */
2197        BUILD_BUG_ON(IPOIB_CM_COPYBREAK > IPOIB_CM_HEAD_SIZE);
2198
2199        ret = ipoib_register_debugfs();
2200        if (ret)
2201                return ret;
2202
2203        /*
2204         * We create a global workqueue here that is used for all flush
2205         * operations.  However, if you attempt to flush a workqueue
2206         * from a task on that same workqueue, it deadlocks the system.
2207         * We want to be able to flush the tasks associated with a
2208         * specific net device, so we also create a workqueue for each
2209         * netdevice.  We queue up the tasks for that device only on
2210         * its private workqueue, and we only queue up flush events
2211         * on our global flush workqueue.  This avoids the deadlocks.
2212         */
2213        ipoib_workqueue = alloc_ordered_workqueue("ipoib_flush",
2214                                                  WQ_MEM_RECLAIM);
2215        if (!ipoib_workqueue) {
2216                ret = -ENOMEM;
2217                goto err_fs;
2218        }
2219
2220        ib_sa_register_client(&ipoib_sa_client);
2221
2222        ret = ib_register_client(&ipoib_client);
2223        if (ret)
2224                goto err_sa;
2225
2226        ret = ipoib_netlink_init();
2227        if (ret)
2228                goto err_client;
2229
2230        return 0;
2231
2232err_client:
2233        ib_unregister_client(&ipoib_client);
2234
2235err_sa:
2236        ib_sa_unregister_client(&ipoib_sa_client);
2237        destroy_workqueue(ipoib_workqueue);
2238
2239err_fs:
2240        ipoib_unregister_debugfs();
2241
2242        return ret;
2243}
2244
2245static void __exit ipoib_cleanup_module(void)
2246{
2247        ipoib_netlink_fini();
2248        ib_unregister_client(&ipoib_client);
2249        ib_sa_unregister_client(&ipoib_sa_client);
2250        ipoib_unregister_debugfs();
2251        destroy_workqueue(ipoib_workqueue);
2252}
2253
2254module_init(ipoib_init_module);
2255module_exit(ipoib_cleanup_module);
Note: See TracBrowser for help on using the repository browser.