Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Mon, 25 Jun 2012 22:50:32 +0000 (15:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Jun 2012 22:50:32 +0000 (15:50 -0700)
Conflicts:
drivers/net/usb/qmi_wwan.c
net/batman-adv/translation-table.c
net/ipv6/route.c

qmi_wwan.c resolution provided by Bjørn Mork.

batman-adv conflict is dealing merely with the changes
of global function names to have a proper subsystem
prefix.

ipv6's route.c conflict is merely two side-by-side additions
of network namespace methods.

Signed-off-by: David S. Miller <davem@davemloft.net>
21 files changed:
1  2 
drivers/bluetooth/btmrvl_sdio.c
drivers/bluetooth/btusb.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
drivers/net/ethernet/emulex/benet/be_cmds.c
drivers/net/ethernet/emulex/benet/be_cmds.h
drivers/net/ethernet/emulex/benet/be_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
drivers/net/usb/qmi_wwan.c
drivers/net/usb/usbnet.c
drivers/net/wireless/airo.c
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/iwlwifi/dvm/debugfs.c
drivers/net/wireless/mwifiex/cfg80211.c
net/batman-adv/translation-table.c
net/bluetooth/l2cap_core.c
net/bluetooth/mgmt.c
net/ipv6/ip6_fib.c
net/ipv6/route.c

Simple merge
Simple merge
@@@ -9978,9 -9752,9 +9984,9 @@@ static int bnx2x_848x3_config_init(stru
        u16 cmd_args[PHY84833_CMDHDLR_MAX_ARGS];
        int rc = 0;
  
 -      msleep(1);
 +       usleep_range(1000, 2000);
  
-       if (!(CHIP_IS_E1(bp)))
+       if (!(CHIP_IS_E1x(bp)))
                port = BP_PATH(bp);
        else
                port = params->port;
@@@ -269,53 -257,14 +269,30 @@@ err
        return rv;
  }
  
- /* Gobi devices uses identical class/protocol codes for all interfaces regardless
-  * of function. Some of these are CDC ACM like and have the exact same endpoints
-  * we are looking for. This leaves two possible strategies for identifying the
-  * correct interface:
-  *   a) hardcoding interface number, or
-  *   b) use the fact that the wwan interface is the only one lacking additional
-  *      (CDC functional) descriptors
-  *
-  * Let's see if we can get away with the generic b) solution.
-  */
- static int qmi_wwan_bind_gobi(struct usbnet *dev, struct usb_interface *intf)
- {
-       int rv = -EINVAL;
-       /* ignore any interface with additional descriptors */
-       if (intf->cur_altsetting->extralen)
-               goto err;
-       rv = qmi_wwan_bind_shared(dev, intf);
- err:
-       return rv;
- }
 -static void qmi_wwan_unbind_shared(struct usbnet *dev, struct usb_interface *intf)
 +static void qmi_wwan_unbind(struct usbnet *dev, struct usb_interface *intf)
  {
 -      struct usb_driver *subdriver = (void *)dev->data[0];
 -
 -      if (subdriver && subdriver->disconnect)
 -              subdriver->disconnect(intf);
 +      struct qmi_wwan_state *info = (void *)&dev->data;
 +      struct usb_driver *driver = driver_of(intf);
 +      struct usb_interface *other;
 +
 +      if (info->subdriver && info->subdriver->disconnect)
 +              info->subdriver->disconnect(info->control);
 +
 +      /* allow user to unbind using either control or data */
 +      if (intf == info->control)
 +              other = info->data;
 +      else
 +              other = info->control;
 +
 +      /* only if not shared */
 +      if (other && intf != other) {
 +              usb_set_intfdata(other, NULL);
 +              usb_driver_release_interface(driver, other);
 +      }
  
 -      dev->data[0] = (unsigned long)NULL;
 +      info->subdriver = NULL;
 +      info->data = NULL;
 +      info->control = NULL;
  }
  
  /* suspend/resume wrappers calling both usbnet and the cdc-wdm
@@@ -375,15 -324,15 +352,15 @@@ static const struct driver_info qmi_wwa
        .manage_power   = qmi_wwan_manage_power,
  };
  
- static const struct driver_info       qmi_wwan_gobi = {
-       .description    = "Qualcomm Gobi wwan/QMI device",
+ static const struct driver_info       qmi_wwan_force_int0 = {
+       .description    = "Qualcomm WWAN/QMI device",
        .flags          = FLAG_WWAN,
-       .bind           = qmi_wwan_bind_gobi,
+       .bind           = qmi_wwan_bind_shared,
 -      .unbind         = qmi_wwan_unbind_shared,
 +      .unbind         = qmi_wwan_unbind,
        .manage_power   = qmi_wwan_manage_power,
+       .data           = BIT(0), /* interface whitelist bitmap */
  };
  
- /* ZTE suck at making USB descriptors */
  static const struct driver_info       qmi_wwan_force_int1 = {
        .description    = "Qualcomm WWAN/QMI device",
        .flags          = FLAG_WWAN,
        .data           = BIT(1), /* interface whitelist bitmap */
  };
  
 -      .unbind         = qmi_wwan_unbind_shared,
+ static const struct driver_info       qmi_wwan_force_int3 = {
+       .description    = "Qualcomm WWAN/QMI device",
+       .flags          = FLAG_WWAN,
+       .bind           = qmi_wwan_bind_shared,
++      .unbind         = qmi_wwan_unbind,
+       .manage_power   = qmi_wwan_manage_power,
+       .data           = BIT(3), /* interface whitelist bitmap */
+ };
  static const struct driver_info       qmi_wwan_force_int4 = {
        .description    = "Qualcomm WWAN/QMI device",
        .flags          = FLAG_WWAN,
  static const struct driver_info       qmi_wwan_sierra = {
        .description    = "Sierra Wireless wwan/QMI device",
        .flags          = FLAG_WWAN,
-       .bind           = qmi_wwan_bind_gobi,
+       .bind           = qmi_wwan_bind_shared,
 -      .unbind         = qmi_wwan_unbind_shared,
 +      .unbind         = qmi_wwan_unbind,
        .manage_power   = qmi_wwan_manage_power,
        .data           = BIT(8) | BIT(19), /* interface whitelist bitmap */
  };
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -139,8 -141,7 +139,7 @@@ static void tt_orig_list_entry_free_rcu
        struct tt_orig_list_entry *orig_entry;
  
        orig_entry = container_of(rcu, struct tt_orig_list_entry, rcu);
-       atomic_dec(&orig_entry->orig_node->tt_size);
 -      orig_node_free_ref(orig_entry->orig_node);
 +      batadv_orig_node_free_ref(orig_entry->orig_node);
        kfree(orig_entry);
  }
  
Simple merge
Simple merge
Simple merge
@@@ -2929,31 -3007,11 +2938,36 @@@ static struct pernet_operations ip6_rou
        .exit = ip6_route_net_exit,
  };
  
 +static int __net_init ipv6_inetpeer_init(struct net *net)
 +{
 +      struct inet_peer_base *bp = kmalloc(sizeof(*bp), GFP_KERNEL);
 +
 +      if (!bp)
 +              return -ENOMEM;
 +      inet_peer_base_init(bp);
 +      net->ipv6.peers = bp;
 +      return 0;
 +}
 +
 +static void __net_exit ipv6_inetpeer_exit(struct net *net)
 +{
 +      struct inet_peer_base *bp = net->ipv6.peers;
 +
 +      net->ipv6.peers = NULL;
 +      inetpeer_invalidate_tree(bp);
 +      kfree(bp);
 +}
 +
 +static struct pernet_operations ipv6_inetpeer_ops = {
 +      .init   =       ipv6_inetpeer_init,
 +      .exit   =       ipv6_inetpeer_exit,
 +};
 +
+ static struct pernet_operations ip6_route_net_late_ops = {
+       .init = ip6_route_net_init_late,
+       .exit = ip6_route_net_exit_late,
+ };
  static struct notifier_block ip6_route_dev_notifier = {
        .notifier_call = ip6_route_dev_notify,
        .priority = 0,