aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-07-26 21:09:01 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-26 21:09:01 -0400
commit1e30c1b3866968ff584ae3cd3909ef93957bb215 (patch)
tree0ee70a264f7bed4047f68ed3aeb68d6c4cf4e136 /drivers/s390
parenta1857ebe752d77d96c89d964500a9528df6d320e (diff)
parentc7109986db3c945f50ceed884a30e0fd8af3b89b (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking updates and fixes from David Miller: 1) Reinstate the no-ref optimization for input route lookups in ipv4 to fix some routing cache removal perf regressions. 2) Make TCP socket pre-demux work on ipv6 side too, from Eric Dumazet. 3) Get RX hash value from correct place in be2net driver, from Sarveshwar Bandi. 4) Validation of FIB cached routes missing critical check, from Eric Dumazet. 5) EEH support in mlx4 driver, from Kleber Sacilotto de Souza. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (23 commits) ipv6: Early TCP socket demux ipv4: Fix input route performance regression. pch_gbe: vlan skb len fix pch_gbe: add extra clean tx pch_gbe: fix transmit watchdog timeout ixgbe: fix panic while dumping packets on Tx hang with IOMMU be2net: Fix to parse RSS hash from Receive completions correctly. net/mlx4_en: Limit the RFS filter IDs to be < RPS_NO_FILTER hyperv: Add error handling to rndis_filter_device_add() hyperv: Add a check for ring_size value ipv4: rt_cache_valid must check expired routes net/pch_gpe: Cannot disable ethernet autonegation qeth: repair crash in qeth_l3_vlan_rx_kill_vid() netiucv: cleanup attribute usage net: wiznet add missing HAS_IOMEM dependency be2net: Missing byteswap in be_get_fw_log_level causes oops on PowerPC mlx4: Add support for EEH error recovery cdc-ncm: tag Ericsson WWAN devices (eg F5521gw) with FLAG_WWAN wanmain: comparing array with NULL caif: fix NULL pointer check ...
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/net/netiucv.c34
-rw-r--r--drivers/s390/net/qeth_l3_main.c4
2 files changed, 10 insertions, 28 deletions
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index 8160591913f9..4ffa66c87ea5 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -1854,26 +1854,11 @@ static struct attribute_group netiucv_stat_attr_group = {
1854 .attrs = netiucv_stat_attrs, 1854 .attrs = netiucv_stat_attrs,
1855}; 1855};
1856 1856
1857static int netiucv_add_files(struct device *dev) 1857static const struct attribute_group *netiucv_attr_groups[] = {
1858{ 1858 &netiucv_stat_attr_group,
1859 int ret; 1859 &netiucv_attr_group,
1860 1860 NULL,
1861 IUCV_DBF_TEXT(trace, 3, __func__); 1861};
1862 ret = sysfs_create_group(&dev->kobj, &netiucv_attr_group);
1863 if (ret)
1864 return ret;
1865 ret = sysfs_create_group(&dev->kobj, &netiucv_stat_attr_group);
1866 if (ret)
1867 sysfs_remove_group(&dev->kobj, &netiucv_attr_group);
1868 return ret;
1869}
1870
1871static void netiucv_remove_files(struct device *dev)
1872{
1873 IUCV_DBF_TEXT(trace, 3, __func__);
1874 sysfs_remove_group(&dev->kobj, &netiucv_stat_attr_group);
1875 sysfs_remove_group(&dev->kobj, &netiucv_attr_group);
1876}
1877 1862
1878static int netiucv_register_device(struct net_device *ndev) 1863static int netiucv_register_device(struct net_device *ndev)
1879{ 1864{
@@ -1887,6 +1872,7 @@ static int netiucv_register_device(struct net_device *ndev)
1887 dev_set_name(dev, "net%s", ndev->name); 1872 dev_set_name(dev, "net%s", ndev->name);
1888 dev->bus = &iucv_bus; 1873 dev->bus = &iucv_bus;
1889 dev->parent = iucv_root; 1874 dev->parent = iucv_root;
1875 dev->groups = netiucv_attr_groups;
1890 /* 1876 /*
1891 * The release function could be called after the 1877 * The release function could be called after the
1892 * module has been unloaded. It's _only_ task is to 1878 * module has been unloaded. It's _only_ task is to
@@ -1904,22 +1890,14 @@ static int netiucv_register_device(struct net_device *ndev)
1904 put_device(dev); 1890 put_device(dev);
1905 return ret; 1891 return ret;
1906 } 1892 }
1907 ret = netiucv_add_files(dev);
1908 if (ret)
1909 goto out_unreg;
1910 priv->dev = dev; 1893 priv->dev = dev;
1911 dev_set_drvdata(dev, priv); 1894 dev_set_drvdata(dev, priv);
1912 return 0; 1895 return 0;
1913
1914out_unreg:
1915 device_unregister(dev);
1916 return ret;
1917} 1896}
1918 1897
1919static void netiucv_unregister_device(struct device *dev) 1898static void netiucv_unregister_device(struct device *dev)
1920{ 1899{
1921 IUCV_DBF_TEXT(trace, 3, __func__); 1900 IUCV_DBF_TEXT(trace, 3, __func__);
1922 netiucv_remove_files(dev);
1923 device_unregister(dev); 1901 device_unregister(dev);
1924} 1902}
1925 1903
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 0cf706699a04..c5f03fa70fba 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -1758,6 +1758,8 @@ static void qeth_l3_free_vlan_addresses4(struct qeth_card *card,
1758 QETH_CARD_TEXT(card, 4, "frvaddr4"); 1758 QETH_CARD_TEXT(card, 4, "frvaddr4");
1759 1759
1760 netdev = __vlan_find_dev_deep(card->dev, vid); 1760 netdev = __vlan_find_dev_deep(card->dev, vid);
1761 if (!netdev)
1762 return;
1761 in_dev = in_dev_get(netdev); 1763 in_dev = in_dev_get(netdev);
1762 if (!in_dev) 1764 if (!in_dev)
1763 return; 1765 return;
@@ -1786,6 +1788,8 @@ static void qeth_l3_free_vlan_addresses6(struct qeth_card *card,
1786 QETH_CARD_TEXT(card, 4, "frvaddr6"); 1788 QETH_CARD_TEXT(card, 4, "frvaddr6");
1787 1789
1788 netdev = __vlan_find_dev_deep(card->dev, vid); 1790 netdev = __vlan_find_dev_deep(card->dev, vid);
1791 if (!netdev)
1792 return;
1789 in6_dev = in6_dev_get(netdev); 1793 in6_dev = in6_dev_get(netdev);
1790 if (!in6_dev) 1794 if (!in6_dev)
1791 return; 1795 return;