Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: igmp: Avoid zero delay when receiving odd mixture of IGMP queries netdev: make net_device_ops const bcm63xx: make ethtool_ops const usbnet: make ethtool_ops const net: Fix build with INET disabled. net: introduce netif_addr_lock_nested() and call if when appropriate net: correct lock name in dev_[uc/mc]_sync documentations. net: sk_update_clone is only used in net/core/sock.c 8139cp: fix missing napi_gro_flush. pktgen: set correct max and min in pktgen_setup_inject() smsc911x: Unconditionally include linux/smscphy.h in smsc911x.h asix: fix infinite loop in rx_fixup() net: Default UDP and UNIX diag to 'n'. r6040: fix typo in use of MCR0 register bits net: fix sock_clone reference mismatch with tcp memcontrol
This commit is contained in:
commit
38e5781bbf
|
@ -1469,7 +1469,7 @@ static int bcm_enet_set_pauseparam(struct net_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct ethtool_ops bcm_enet_ethtool_ops = {
|
||||
static const struct ethtool_ops bcm_enet_ethtool_ops = {
|
||||
.get_strings = bcm_enet_get_strings,
|
||||
.get_sset_count = bcm_enet_get_sset_count,
|
||||
.get_ethtool_stats = bcm_enet_get_ethtool_stats,
|
||||
|
|
|
@ -3080,7 +3080,7 @@ fw_exit:
|
|||
return status;
|
||||
}
|
||||
|
||||
static struct net_device_ops be_netdev_ops = {
|
||||
static const struct net_device_ops be_netdev_ops = {
|
||||
.ndo_open = be_open,
|
||||
.ndo_stop = be_close,
|
||||
.ndo_start_xmit = be_xmit,
|
||||
|
|
|
@ -1160,7 +1160,7 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
|
|||
lp->dev = dev;
|
||||
|
||||
/* Init RDC private data */
|
||||
lp->mcr0 = MCR0_XMTEN | MCR0;
|
||||
lp->mcr0 = MCR0_XMTEN | MCR0_RCVEN;
|
||||
|
||||
/* The RDC-specific entries in the device structure. */
|
||||
dev->netdev_ops = &r6040_netdev_ops;
|
||||
|
|
|
@ -563,6 +563,7 @@ rx_next:
|
|||
if (cpr16(IntrStatus) & cp_rx_intr_mask)
|
||||
goto rx_status_loop;
|
||||
|
||||
napi_gro_flush(napi);
|
||||
spin_lock_irqsave(&cp->lock, flags);
|
||||
__napi_complete(napi);
|
||||
cpw16_f(IntrMask, cp_intr_mask);
|
||||
|
|
|
@ -401,8 +401,6 @@
|
|||
#include <asm/smsc911x.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMSC_PHY
|
||||
#include <linux/smscphy.h>
|
||||
#endif
|
||||
|
||||
#endif /* __SMSC911X_H__ */
|
||||
|
|
|
@ -2260,8 +2260,7 @@ static int tile_net_get_mac(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static struct net_device_ops tile_net_ops = {
|
||||
static const struct net_device_ops tile_net_ops = {
|
||||
.ndo_open = tile_net_open,
|
||||
.ndo_stop = tile_net_stop,
|
||||
.ndo_start_xmit = tile_net_tx,
|
||||
|
|
|
@ -376,7 +376,7 @@ static int asix_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
|||
|
||||
skb_pull(skb, (size + 1) & 0xfffe);
|
||||
|
||||
if (skb->len == 0)
|
||||
if (skb->len < sizeof(header))
|
||||
break;
|
||||
|
||||
head = (u8 *) skb->data;
|
||||
|
@ -1152,7 +1152,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct ethtool_ops ax88178_ethtool_ops = {
|
||||
static const struct ethtool_ops ax88178_ethtool_ops = {
|
||||
.get_drvinfo = asix_get_drvinfo,
|
||||
.get_link = asix_get_link,
|
||||
.get_msglevel = usbnet_get_msglevel,
|
||||
|
|
|
@ -138,7 +138,7 @@ struct cdc_ncm_ctx {
|
|||
static void cdc_ncm_tx_timeout(unsigned long arg);
|
||||
static const struct driver_info cdc_ncm_info;
|
||||
static struct usb_driver cdc_ncm_driver;
|
||||
static struct ethtool_ops cdc_ncm_ethtool_ops;
|
||||
static const struct ethtool_ops cdc_ncm_ethtool_ops;
|
||||
|
||||
static const struct usb_device_id cdc_devs[] = {
|
||||
{ USB_INTERFACE_INFO(USB_CLASS_COMM,
|
||||
|
@ -1220,7 +1220,7 @@ static struct usb_driver cdc_ncm_driver = {
|
|||
.supports_autosuspend = 1,
|
||||
};
|
||||
|
||||
static struct ethtool_ops cdc_ncm_ethtool_ops = {
|
||||
static const struct ethtool_ops cdc_ncm_ethtool_ops = {
|
||||
.get_drvinfo = cdc_ncm_get_drvinfo,
|
||||
.get_link = usbnet_get_link,
|
||||
.get_msglevel = usbnet_get_msglevel,
|
||||
|
|
|
@ -420,7 +420,7 @@ static u32 ipheth_ethtool_op_get_link(struct net_device *net)
|
|||
return netif_carrier_ok(dev->net);
|
||||
}
|
||||
|
||||
static struct ethtool_ops ops = {
|
||||
static const struct ethtool_ops ops = {
|
||||
.get_link = ipheth_ethtool_op_get_link
|
||||
};
|
||||
|
||||
|
|
|
@ -618,7 +618,7 @@ static u32 sierra_net_get_link(struct net_device *net)
|
|||
return sierra_net_get_private(dev)->link_up && netif_running(net);
|
||||
}
|
||||
|
||||
static struct ethtool_ops sierra_net_ethtool_ops = {
|
||||
static const struct ethtool_ops sierra_net_ethtool_ops = {
|
||||
.get_drvinfo = sierra_net_get_drvinfo,
|
||||
.get_link = sierra_net_get_link,
|
||||
.get_msglevel = usbnet_get_msglevel,
|
||||
|
|
|
@ -390,7 +390,6 @@ enum {
|
|||
OVER_LIMIT,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_INET
|
||||
struct sock;
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM
|
||||
void sock_update_memcg(struct sock *sk);
|
||||
|
@ -403,6 +402,5 @@ static inline void sock_release_memcg(struct sock *sk)
|
|||
{
|
||||
}
|
||||
#endif /* CONFIG_CGROUP_MEM_RES_CTLR_KMEM */
|
||||
#endif /* CONFIG_INET */
|
||||
#endif /* _LINUX_MEMCONTROL_H */
|
||||
|
||||
|
|
|
@ -2450,6 +2450,11 @@ static inline void netif_addr_lock(struct net_device *dev)
|
|||
spin_lock(&dev->addr_list_lock);
|
||||
}
|
||||
|
||||
static inline void netif_addr_lock_nested(struct net_device *dev)
|
||||
{
|
||||
spin_lock_nested(&dev->addr_list_lock, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
|
||||
static inline void netif_addr_lock_bh(struct net_device *dev)
|
||||
{
|
||||
spin_lock_bh(&dev->addr_list_lock);
|
||||
|
|
|
@ -381,16 +381,25 @@ static void mem_cgroup_put(struct mem_cgroup *memcg);
|
|||
static bool mem_cgroup_is_root(struct mem_cgroup *memcg);
|
||||
void sock_update_memcg(struct sock *sk)
|
||||
{
|
||||
/* A socket spends its whole life in the same cgroup */
|
||||
if (sk->sk_cgrp) {
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
if (static_branch(&memcg_socket_limit_enabled)) {
|
||||
struct mem_cgroup *memcg;
|
||||
|
||||
BUG_ON(!sk->sk_prot->proto_cgroup);
|
||||
|
||||
/* Socket cloning can throw us here with sk_cgrp already
|
||||
* filled. It won't however, necessarily happen from
|
||||
* process context. So the test for root memcg given
|
||||
* the current task's memcg won't help us in this case.
|
||||
*
|
||||
* Respecting the original socket's memcg is a better
|
||||
* decision in this case.
|
||||
*/
|
||||
if (sk->sk_cgrp) {
|
||||
BUG_ON(mem_cgroup_is_root(sk->sk_cgrp->memcg));
|
||||
mem_cgroup_get(sk->sk_cgrp->memcg);
|
||||
return;
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
memcg = mem_cgroup_from_task(current);
|
||||
if (!mem_cgroup_is_root(memcg)) {
|
||||
|
|
|
@ -427,7 +427,7 @@ EXPORT_SYMBOL(dev_uc_del);
|
|||
*
|
||||
* Add newly added addresses to the destination device and release
|
||||
* addresses that have no users left. The source device must be
|
||||
* locked by netif_tx_lock_bh.
|
||||
* locked by netif_addr_lock_bh.
|
||||
*
|
||||
* This function is intended to be called from the dev->set_rx_mode
|
||||
* function of layered software devices.
|
||||
|
@ -439,11 +439,11 @@ int dev_uc_sync(struct net_device *to, struct net_device *from)
|
|||
if (to->addr_len != from->addr_len)
|
||||
return -EINVAL;
|
||||
|
||||
netif_addr_lock_bh(to);
|
||||
netif_addr_lock_nested(to);
|
||||
err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
|
||||
if (!err)
|
||||
__dev_set_rx_mode(to);
|
||||
netif_addr_unlock_bh(to);
|
||||
netif_addr_unlock(to);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_uc_sync);
|
||||
|
@ -463,7 +463,7 @@ void dev_uc_unsync(struct net_device *to, struct net_device *from)
|
|||
return;
|
||||
|
||||
netif_addr_lock_bh(from);
|
||||
netif_addr_lock(to);
|
||||
netif_addr_lock_nested(to);
|
||||
__hw_addr_unsync(&to->uc, &from->uc, to->addr_len);
|
||||
__dev_set_rx_mode(to);
|
||||
netif_addr_unlock(to);
|
||||
|
@ -590,7 +590,7 @@ EXPORT_SYMBOL(dev_mc_del_global);
|
|||
*
|
||||
* Add newly added addresses to the destination device and release
|
||||
* addresses that have no users left. The source device must be
|
||||
* locked by netif_tx_lock_bh.
|
||||
* locked by netif_addr_lock_bh.
|
||||
*
|
||||
* This function is intended to be called from the ndo_set_rx_mode
|
||||
* function of layered software devices.
|
||||
|
@ -602,11 +602,11 @@ int dev_mc_sync(struct net_device *to, struct net_device *from)
|
|||
if (to->addr_len != from->addr_len)
|
||||
return -EINVAL;
|
||||
|
||||
netif_addr_lock_bh(to);
|
||||
netif_addr_lock_nested(to);
|
||||
err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
|
||||
if (!err)
|
||||
__dev_set_rx_mode(to);
|
||||
netif_addr_unlock_bh(to);
|
||||
netif_addr_unlock(to);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_mc_sync);
|
||||
|
@ -626,7 +626,7 @@ void dev_mc_unsync(struct net_device *to, struct net_device *from)
|
|||
return;
|
||||
|
||||
netif_addr_lock_bh(from);
|
||||
netif_addr_lock(to);
|
||||
netif_addr_lock_nested(to);
|
||||
__hw_addr_unsync(&to->mc, &from->mc, to->addr_len);
|
||||
__dev_set_rx_mode(to);
|
||||
netif_addr_unlock(to);
|
||||
|
|
|
@ -2024,13 +2024,13 @@ static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
|
|||
pr_warning("WARNING: Requested queue_map_min (zero-based) (%d) exceeds valid range [0 - %d] for (%d) queues on %s, resetting\n",
|
||||
pkt_dev->queue_map_min, (ntxq ?: 1) - 1, ntxq,
|
||||
pkt_dev->odevname);
|
||||
pkt_dev->queue_map_min = ntxq - 1;
|
||||
pkt_dev->queue_map_min = (ntxq ?: 1) - 1;
|
||||
}
|
||||
if (pkt_dev->queue_map_max >= ntxq) {
|
||||
pr_warning("WARNING: Requested queue_map_max (zero-based) (%d) exceeds valid range [0 - %d] for (%d) queues on %s, resetting\n",
|
||||
pkt_dev->queue_map_max, (ntxq ?: 1) - 1, ntxq,
|
||||
pkt_dev->odevname);
|
||||
pkt_dev->queue_map_max = ntxq - 1;
|
||||
pkt_dev->queue_map_max = (ntxq ?: 1) - 1;
|
||||
}
|
||||
|
||||
/* Default to the interface's mac if not explicitly set. */
|
||||
|
|
|
@ -112,6 +112,7 @@
|
|||
#include <linux/highmem.h>
|
||||
#include <linux/user_namespace.h>
|
||||
#include <linux/jump_label.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/system.h>
|
||||
|
@ -1272,6 +1273,12 @@ void sk_release_kernel(struct sock *sk)
|
|||
}
|
||||
EXPORT_SYMBOL(sk_release_kernel);
|
||||
|
||||
static void sk_update_clone(const struct sock *sk, struct sock *newsk)
|
||||
{
|
||||
if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
|
||||
sock_update_memcg(newsk);
|
||||
}
|
||||
|
||||
/**
|
||||
* sk_clone_lock - clone a socket, and lock its clone
|
||||
* @sk: the socket to clone
|
||||
|
@ -1362,6 +1369,8 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
|
|||
sk_set_socket(newsk, NULL);
|
||||
newsk->sk_wq = NULL;
|
||||
|
||||
sk_update_clone(sk, newsk);
|
||||
|
||||
if (newsk->sk_prot->sockets_allocated)
|
||||
sk_sockets_allocated_inc(newsk);
|
||||
|
||||
|
|
|
@ -408,8 +408,12 @@ config INET_TCP_DIAG
|
|||
def_tristate INET_DIAG
|
||||
|
||||
config INET_UDP_DIAG
|
||||
tristate "UDP: socket monitoring interface"
|
||||
depends on INET_DIAG
|
||||
def_tristate INET_DIAG && IPV6
|
||||
default n
|
||||
---help---
|
||||
Support for UDP socket monitoring interface used by the ss tool.
|
||||
If unsure, say Y.
|
||||
|
||||
menuconfig TCP_CONG_ADVANCED
|
||||
bool "TCP: advanced congestion control"
|
||||
|
|
|
@ -880,6 +880,8 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
|||
* to be intended in a v3 query.
|
||||
*/
|
||||
max_delay = IGMPV3_MRC(ih3->code)*(HZ/IGMP_TIMER_SCALE);
|
||||
if (!max_delay)
|
||||
max_delay = 1; /* can't mod w/ 0 */
|
||||
} else { /* v3 */
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query)))
|
||||
return;
|
||||
|
|
|
@ -22,7 +22,7 @@ config UNIX
|
|||
config UNIX_DIAG
|
||||
tristate "UNIX: socket monitoring interface"
|
||||
depends on UNIX
|
||||
default UNIX
|
||||
default n
|
||||
---help---
|
||||
Support for UNIX socket monitoring interface used by the ss tool.
|
||||
If unsure, say Y.
|
||||
|
|
Loading…
Reference in New Issue