diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 48 | ||||
-rw-r--r-- | net/core/dev_addr_lists.c | 2 | ||||
-rw-r--r-- | net/core/pktgen.c | 2 |
3 files changed, 35 insertions, 17 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index b6d0bf875a8e..6561021d22d1 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1114,13 +1114,21 @@ EXPORT_SYMBOL(netdev_bonding_change); | |||
1114 | void dev_load(struct net *net, const char *name) | 1114 | void dev_load(struct net *net, const char *name) |
1115 | { | 1115 | { |
1116 | struct net_device *dev; | 1116 | struct net_device *dev; |
1117 | int no_module; | ||
1117 | 1118 | ||
1118 | rcu_read_lock(); | 1119 | rcu_read_lock(); |
1119 | dev = dev_get_by_name_rcu(net, name); | 1120 | dev = dev_get_by_name_rcu(net, name); |
1120 | rcu_read_unlock(); | 1121 | rcu_read_unlock(); |
1121 | 1122 | ||
1122 | if (!dev && capable(CAP_NET_ADMIN)) | 1123 | no_module = !dev; |
1123 | request_module("%s", name); | 1124 | if (no_module && capable(CAP_NET_ADMIN)) |
1125 | no_module = request_module("netdev-%s", name); | ||
1126 | if (no_module && capable(CAP_SYS_MODULE)) { | ||
1127 | if (!request_module("%s", name)) | ||
1128 | pr_err("Loading kernel module for a network device " | ||
1129 | "with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s " | ||
1130 | "instead\n", name); | ||
1131 | } | ||
1124 | } | 1132 | } |
1125 | EXPORT_SYMBOL(dev_load); | 1133 | EXPORT_SYMBOL(dev_load); |
1126 | 1134 | ||
@@ -1280,10 +1288,13 @@ static int __dev_close_many(struct list_head *head) | |||
1280 | 1288 | ||
1281 | static int __dev_close(struct net_device *dev) | 1289 | static int __dev_close(struct net_device *dev) |
1282 | { | 1290 | { |
1291 | int retval; | ||
1283 | LIST_HEAD(single); | 1292 | LIST_HEAD(single); |
1284 | 1293 | ||
1285 | list_add(&dev->unreg_list, &single); | 1294 | list_add(&dev->unreg_list, &single); |
1286 | return __dev_close_many(&single); | 1295 | retval = __dev_close_many(&single); |
1296 | list_del(&single); | ||
1297 | return retval; | ||
1287 | } | 1298 | } |
1288 | 1299 | ||
1289 | int dev_close_many(struct list_head *head) | 1300 | int dev_close_many(struct list_head *head) |
@@ -1325,7 +1336,7 @@ int dev_close(struct net_device *dev) | |||
1325 | 1336 | ||
1326 | list_add(&dev->unreg_list, &single); | 1337 | list_add(&dev->unreg_list, &single); |
1327 | dev_close_many(&single); | 1338 | dev_close_many(&single); |
1328 | 1339 | list_del(&single); | |
1329 | return 0; | 1340 | return 0; |
1330 | } | 1341 | } |
1331 | EXPORT_SYMBOL(dev_close); | 1342 | EXPORT_SYMBOL(dev_close); |
@@ -5063,6 +5074,7 @@ static void rollback_registered(struct net_device *dev) | |||
5063 | 5074 | ||
5064 | list_add(&dev->unreg_list, &single); | 5075 | list_add(&dev->unreg_list, &single); |
5065 | rollback_registered_many(&single); | 5076 | rollback_registered_many(&single); |
5077 | list_del(&single); | ||
5066 | } | 5078 | } |
5067 | 5079 | ||
5068 | unsigned long netdev_fix_features(unsigned long features, const char *name) | 5080 | unsigned long netdev_fix_features(unsigned long features, const char *name) |
@@ -5660,30 +5672,35 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, | |||
5660 | 5672 | ||
5661 | dev_net_set(dev, &init_net); | 5673 | dev_net_set(dev, &init_net); |
5662 | 5674 | ||
5675 | dev->gso_max_size = GSO_MAX_SIZE; | ||
5676 | |||
5677 | INIT_LIST_HEAD(&dev->ethtool_ntuple_list.list); | ||
5678 | dev->ethtool_ntuple_list.count = 0; | ||
5679 | INIT_LIST_HEAD(&dev->napi_list); | ||
5680 | INIT_LIST_HEAD(&dev->unreg_list); | ||
5681 | INIT_LIST_HEAD(&dev->link_watch_list); | ||
5682 | dev->priv_flags = IFF_XMIT_DST_RELEASE; | ||
5683 | setup(dev); | ||
5684 | |||
5663 | dev->num_tx_queues = txqs; | 5685 | dev->num_tx_queues = txqs; |
5664 | dev->real_num_tx_queues = txqs; | 5686 | dev->real_num_tx_queues = txqs; |
5665 | if (netif_alloc_netdev_queues(dev)) | 5687 | if (netif_alloc_netdev_queues(dev)) |
5666 | goto free_pcpu; | 5688 | goto free_all; |
5667 | 5689 | ||
5668 | #ifdef CONFIG_RPS | 5690 | #ifdef CONFIG_RPS |
5669 | dev->num_rx_queues = rxqs; | 5691 | dev->num_rx_queues = rxqs; |
5670 | dev->real_num_rx_queues = rxqs; | 5692 | dev->real_num_rx_queues = rxqs; |
5671 | if (netif_alloc_rx_queues(dev)) | 5693 | if (netif_alloc_rx_queues(dev)) |
5672 | goto free_pcpu; | 5694 | goto free_all; |
5673 | #endif | 5695 | #endif |
5674 | 5696 | ||
5675 | dev->gso_max_size = GSO_MAX_SIZE; | ||
5676 | |||
5677 | INIT_LIST_HEAD(&dev->ethtool_ntuple_list.list); | ||
5678 | dev->ethtool_ntuple_list.count = 0; | ||
5679 | INIT_LIST_HEAD(&dev->napi_list); | ||
5680 | INIT_LIST_HEAD(&dev->unreg_list); | ||
5681 | INIT_LIST_HEAD(&dev->link_watch_list); | ||
5682 | dev->priv_flags = IFF_XMIT_DST_RELEASE; | ||
5683 | setup(dev); | ||
5684 | strcpy(dev->name, name); | 5697 | strcpy(dev->name, name); |
5685 | return dev; | 5698 | return dev; |
5686 | 5699 | ||
5700 | free_all: | ||
5701 | free_netdev(dev); | ||
5702 | return NULL; | ||
5703 | |||
5687 | free_pcpu: | 5704 | free_pcpu: |
5688 | free_percpu(dev->pcpu_refcnt); | 5705 | free_percpu(dev->pcpu_refcnt); |
5689 | kfree(dev->_tx); | 5706 | kfree(dev->_tx); |
@@ -6211,6 +6228,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list) | |||
6211 | } | 6228 | } |
6212 | } | 6229 | } |
6213 | unregister_netdevice_many(&dev_kill_list); | 6230 | unregister_netdevice_many(&dev_kill_list); |
6231 | list_del(&dev_kill_list); | ||
6214 | rtnl_unlock(); | 6232 | rtnl_unlock(); |
6215 | } | 6233 | } |
6216 | 6234 | ||
diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c index 508f9c18992f..133fd22ea287 100644 --- a/net/core/dev_addr_lists.c +++ b/net/core/dev_addr_lists.c | |||
@@ -144,7 +144,7 @@ void __hw_addr_del_multiple(struct netdev_hw_addr_list *to_list, | |||
144 | 144 | ||
145 | list_for_each_entry(ha, &from_list->list, list) { | 145 | list_for_each_entry(ha, &from_list->list, list) { |
146 | type = addr_type ? addr_type : ha->type; | 146 | type = addr_type ? addr_type : ha->type; |
147 | __hw_addr_del(to_list, ha->addr, addr_len, addr_type); | 147 | __hw_addr_del(to_list, ha->addr, addr_len, type); |
148 | } | 148 | } |
149 | } | 149 | } |
150 | EXPORT_SYMBOL(__hw_addr_del_multiple); | 150 | EXPORT_SYMBOL(__hw_addr_del_multiple); |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index a9e7fc4c461f..b5bada92f637 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3321,7 +3321,7 @@ static void show_results(struct pktgen_dev *pkt_dev, int nr_frags) | |||
3321 | pkt_dev->started_at); | 3321 | pkt_dev->started_at); |
3322 | ktime_t idle = ns_to_ktime(pkt_dev->idle_acc); | 3322 | ktime_t idle = ns_to_ktime(pkt_dev->idle_acc); |
3323 | 3323 | ||
3324 | p += sprintf(p, "OK: %llu(c%llu+d%llu) nsec, %llu (%dbyte,%dfrags)\n", | 3324 | p += sprintf(p, "OK: %llu(c%llu+d%llu) usec, %llu (%dbyte,%dfrags)\n", |
3325 | (unsigned long long)ktime_to_us(elapsed), | 3325 | (unsigned long long)ktime_to_us(elapsed), |
3326 | (unsigned long long)ktime_to_us(ktime_sub(elapsed, idle)), | 3326 | (unsigned long long)ktime_to_us(ktime_sub(elapsed, idle)), |
3327 | (unsigned long long)ktime_to_us(idle), | 3327 | (unsigned long long)ktime_to_us(idle), |