aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2014-03-27 18:36:38 -0400
committerDavid S. Miller <davem@davemloft.net>2014-03-29 17:58:37 -0400
commita8779ec1c5e60548b7b661a8d74a8cecf7775690 (patch)
tree26c3e8d991b42c16f48c99e4f9fd117233ae8b21 /drivers/net
parent3f705f73a0ab345321ef6e5a293c04bf7e9df818 (diff)
netpoll: Remove gfp parameter from __netpoll_setup
The gfp parameter was added in: commit 47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af Author: Amerigo Wang <amwang@redhat.com> Date: Fri Aug 10 01:24:37 2012 +0000 netpoll: use GFP_ATOMIC in slave_enable_netpoll() and __netpoll_setup() slave_enable_netpoll() and __netpoll_setup() may be called with read_lock() held, so should use GFP_ATOMIC to allocate memory. Eric suggested to pass gfp flags to __netpoll_setup(). Cc: Eric Dumazet <eric.dumazet@gmail.com> Cc: "David S. Miller" <davem@davemloft.net> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Cong Wang <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net> The reason for the gfp parameter was removed in: commit c4cdef9b7183159c23c7302aaf270d64c549f557 Author: dingtianhong <dingtianhong@huawei.com> Date: Tue Jul 23 15:25:27 2013 +0800 bonding: don't call slave_xxx_netpoll under spinlocks The slave_xxx_netpoll will call synchronize_rcu_bh(), so the function may schedule and sleep, it should't be called under spinlocks. bond_netpoll_setup() and bond_netpoll_cleanup() are always protected by rtnl lock, it is no need to take the read lock, as the slave list couldn't be changed outside rtnl lock. Signed-off-by: Ding Tianhong <dingtianhong@huawei.com> Cc: Jay Vosburgh <fubar@us.ibm.com> Cc: Andy Gospodarek <andy@greyhouse.net> Signed-off-by: David S. Miller <davem@davemloft.net> Nothing else that calls __netpoll_setup or ndo_netpoll_setup requires a gfp paramter, so remove the gfp parameter from both of these functions making the code clearer. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/bonding/bond_main.c6
-rw-r--r--drivers/net/team/team.c16
2 files changed, 10 insertions, 12 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 5be34b72a048..95a6ca7d9e51 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -922,12 +922,12 @@ static inline int slave_enable_netpoll(struct slave *slave)
922 struct netpoll *np; 922 struct netpoll *np;
923 int err = 0; 923 int err = 0;
924 924
925 np = kzalloc(sizeof(*np), GFP_ATOMIC); 925 np = kzalloc(sizeof(*np), GFP_KERNEL);
926 err = -ENOMEM; 926 err = -ENOMEM;
927 if (!np) 927 if (!np)
928 goto out; 928 goto out;
929 929
930 err = __netpoll_setup(np, slave->dev, GFP_ATOMIC); 930 err = __netpoll_setup(np, slave->dev);
931 if (err) { 931 if (err) {
932 kfree(np); 932 kfree(np);
933 goto out; 933 goto out;
@@ -962,7 +962,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev)
962 slave_disable_netpoll(slave); 962 slave_disable_netpoll(slave);
963} 963}
964 964
965static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, gfp_t gfp) 965static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni)
966{ 966{
967 struct bonding *bond = netdev_priv(dev); 967 struct bonding *bond = netdev_priv(dev);
968 struct list_head *iter; 968 struct list_head *iter;
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 2b1a1d61072c..33008c1d1d67 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1031,8 +1031,7 @@ static void team_port_leave(struct team *team, struct team_port *port)
1031} 1031}
1032 1032
1033#ifdef CONFIG_NET_POLL_CONTROLLER 1033#ifdef CONFIG_NET_POLL_CONTROLLER
1034static int team_port_enable_netpoll(struct team *team, struct team_port *port, 1034static int team_port_enable_netpoll(struct team *team, struct team_port *port)
1035 gfp_t gfp)
1036{ 1035{
1037 struct netpoll *np; 1036 struct netpoll *np;
1038 int err; 1037 int err;
@@ -1040,11 +1039,11 @@ static int team_port_enable_netpoll(struct team *team, struct team_port *port,
1040 if (!team->dev->npinfo) 1039 if (!team->dev->npinfo)
1041 return 0; 1040 return 0;
1042 1041
1043 np = kzalloc(sizeof(*np), gfp); 1042 np = kzalloc(sizeof(*np), GFP_KERNEL);
1044 if (!np) 1043 if (!np)
1045 return -ENOMEM; 1044 return -ENOMEM;
1046 1045
1047 err = __netpoll_setup(np, port->dev, gfp); 1046 err = __netpoll_setup(np, port->dev);
1048 if (err) { 1047 if (err) {
1049 kfree(np); 1048 kfree(np);
1050 return err; 1049 return err;
@@ -1067,8 +1066,7 @@ static void team_port_disable_netpoll(struct team_port *port)
1067 kfree(np); 1066 kfree(np);
1068} 1067}
1069#else 1068#else
1070static int team_port_enable_netpoll(struct team *team, struct team_port *port, 1069static int team_port_enable_netpoll(struct team *team, struct team_port *port)
1071 gfp_t gfp)
1072{ 1070{
1073 return 0; 1071 return 0;
1074} 1072}
@@ -1156,7 +1154,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
1156 goto err_vids_add; 1154 goto err_vids_add;
1157 } 1155 }
1158 1156
1159 err = team_port_enable_netpoll(team, port, GFP_KERNEL); 1157 err = team_port_enable_netpoll(team, port);
1160 if (err) { 1158 if (err) {
1161 netdev_err(dev, "Failed to enable netpoll on device %s\n", 1159 netdev_err(dev, "Failed to enable netpoll on device %s\n",
1162 portname); 1160 portname);
@@ -1850,7 +1848,7 @@ static void team_netpoll_cleanup(struct net_device *dev)
1850} 1848}
1851 1849
1852static int team_netpoll_setup(struct net_device *dev, 1850static int team_netpoll_setup(struct net_device *dev,
1853 struct netpoll_info *npifo, gfp_t gfp) 1851 struct netpoll_info *npifo)
1854{ 1852{
1855 struct team *team = netdev_priv(dev); 1853 struct team *team = netdev_priv(dev);
1856 struct team_port *port; 1854 struct team_port *port;
@@ -1858,7 +1856,7 @@ static int team_netpoll_setup(struct net_device *dev,
1858 1856
1859 mutex_lock(&team->lock); 1857 mutex_lock(&team->lock);
1860 list_for_each_entry(port, &team->port_list, list) { 1858 list_for_each_entry(port, &team->port_list, list) {
1861 err = team_port_enable_netpoll(team, port, gfp); 1859 err = team_port_enable_netpoll(team, port);
1862 if (err) { 1860 if (err) {
1863 __team_netpoll_cleanup(team); 1861 __team_netpoll_cleanup(team);
1864 break; 1862 break;