Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH net v2 1/3] drivers: net: cpsw: fix parsing of phy-handle DT property in dual_emac config
From: Grygorii Strashko @ 2016-04-25 19:14 UTC (permalink / raw)
  To: David Rivshin (Allworx), netdev-u79uwXL29TY76Z2rM5mHXA,
	linux-omap-u79uwXL29TY76Z2rM5mHXA
  Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, David Miller, Mugunthan V N,
	Andrew Goodbody, Markus Brunner, Nicolas Chauvet
In-Reply-To: <571A210E.2020607-l0cyMroinI0@public.gmane.org>

On 04/22/2016 04:03 PM, Grygorii Strashko wrote:
> On 04/21/2016 09:19 PM, David Rivshin (Allworx) wrote:
>> From: David Rivshin <drivshin-5fOYsn7Fw8lBDgjK7y7TUQ@public.gmane.org>
>>
>> Commit 9e42f715264ff158478fa30eaed847f6e131366b ("drivers: net: cpsw: add
>> phy-handle parsing") saved the "phy-handle" phandle into a new cpsw_priv
>> field. However, phy connections are per-slave, so the phy_node field 
>> should
>> be in cpsw_slave_data rather than cpsw_priv.
>>
>> This would go unnoticed in a single emac configuration. But in dual_emac
>> mode, the last "phy-handle" property parsed for either slave would be 
>> used
>> by both of them, causing them both to refer to the same phy_device.
>>
>> Fixes: 9e42f715264f ("drivers: net: cpsw: add phy-handle parsing")
>> Signed-off-by: David Rivshin <drivshin-5fOYsn7Fw8lBDgjK7y7TUQ@public.gmane.org>
>> Tested-by: Nicolas Chauvet <kwizart-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>> ---
>> I would suggest this for -stable. It should apply cleanly as far back
>> as 4.4.
>>
>> Changes since v1 [1]:
>> - Rebased (no conflicts)
>> - Added Tested-by from Nicolas Chauvet
>>
>> [1] https://patchwork.ozlabs.org/patch/560326/
> 
> Reviewed-by: Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org>

In my opinion, it will be good to have this patch merged as part of -rc cycle, since
it will fix "NULL pointer dereference" issue with current LKML as reported by Andrew Goodbody.


> 
>>
>>   drivers/net/ethernet/ti/cpsw.c | 13 ++++++-------
>>   drivers/net/ethernet/ti/cpsw.h |  1 +
>>   2 files changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/ti/cpsw.c 
>> b/drivers/net/ethernet/ti/cpsw.c
>> index 42fdfd4..d69cb3f 100644
>> --- a/drivers/net/ethernet/ti/cpsw.c
>> +++ b/drivers/net/ethernet/ti/cpsw.c
>> @@ -363,15 +363,14 @@ static inline void slave_write(struct cpsw_slave 
>> *slave, u32 val, u32 offset)
>>       __raw_writel(val, slave->regs + offset);
>>   }
>>
>>   struct cpsw_priv {
>>       spinlock_t            lock;
>>       struct platform_device        *pdev;
>>       struct net_device        *ndev;
>> -    struct device_node        *phy_node;
>>       struct napi_struct        napi_rx;
>>       struct napi_struct        napi_tx;
>>       struct device            *dev;
>>       struct cpsw_platform_data    data;
>>       struct cpsw_ss_regs __iomem    *regs;
>>       struct cpsw_wr_regs __iomem    *wr_regs;
>>       u8 __iomem            *hw_stats;
>> @@ -1144,16 +1143,16 @@ static void cpsw_slave_open(struct cpsw_slave 
>> *slave, struct cpsw_priv *priv)
>>
>>       if (priv->data.dual_emac)
>>           cpsw_add_dual_emac_def_ale_entries(priv, slave, slave_port);
>>       else
>>           cpsw_ale_add_mcast(priv->ale, priv->ndev->broadcast,
>>                      1 << slave_port, 0, 0, ALE_MCAST_FWD_2);
>>
>> -    if (priv->phy_node)
>> -        slave->phy = of_phy_connect(priv->ndev, priv->phy_node,
>> +    if (slave->data->phy_node)
>> +        slave->phy = of_phy_connect(priv->ndev, slave->data->phy_node,
>>                    &cpsw_adjust_link, 0, slave->data->phy_if);
>>       else
>>           slave->phy = phy_connect(priv->ndev, slave->data->phy_id,
>>                    &cpsw_adjust_link, slave->data->phy_if);
>>       if (IS_ERR(slave->phy)) {
>>           dev_err(priv->dev, "phy %s not found on slave %d\n",
>>               slave->data->phy_id, slave->slave_num);
>> @@ -1936,20 +1935,19 @@ static void cpsw_slave_init(struct cpsw_slave 
>> *slave, struct cpsw_priv *priv,
>>
>>       slave->data    = data;
>>       slave->regs    = regs + slave_reg_ofs;
>>       slave->sliver    = regs + sliver_reg_ofs;
>>       slave->port_vlan = data->dual_emac_res_vlan;
>>   }
>>

[..]

-- 
regards,
-grygorii
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH net-next] macvtap: add namespace support to the sysfs device class
From: Eric W. Biederman @ 2016-04-25 19:12 UTC (permalink / raw)
  To: Marc Angel; +Cc: netdev
In-Reply-To: <1461161491-22867-1-git-send-email-marc@arista.com>

Marc Angel <marc@arista.com> writes:

> When creating macvtaps that are expected to have the same ifindex
> in different network namespaces, only the first one will succeed.
> The others will fail with a sysfs_warn_dup warning due to them trying
> to create the following sysfs link (with 'NN' the ifindex of macvtapX):
>
> /sys/class/macvtap/tapNN -> /sys/devices/virtual/net/macvtapX/tapNN
>
> This is reproducible by running the following commands:
>
> ip netns add ns1
> ip netns add ns2
> ip link add veth0 type veth peer name veth1
> ip link set veth0 netns ns1
> ip link set veth1 netns ns2
> ip netns exec ns1 ip l add link veth0 macvtap0 type macvtap
> ip netns exec ns2 ip l add link veth1 macvtap1 type macvtap
>
> The last command will fail with "RTNETLINK answers: File exists" (along
> with the kernel warning) but retrying it will work because the ifindex
> was incremented.

Yes.  That is totally broken, and you would not even care excpect that
the ifindex maintained separately per network namespace.  Useful for
migration but it totally breaks things in this case.

> The 'net' device class is isolated between network namespaces so each
> one has its own hierarchy of net devices.
> This isn't the case for the 'macvtap' device class.
> The problem occurs half-way through the netdev registration, when
> `macvtap_device_event` is called-back to create the 'tapNN' macvtap
> class device under the 'macvtapX' net class device.
>
> This patch adds namespace support the the 'macvtap' device class so
> that /sys/class/macvtap is no longer shared between net namespaces.
>
> However, doing this has the side effect of changing
> /sys/devices/virtual/net/macvtapX/tapNN  into
> /sys/devices/virtual/net/macvtapX/macvtap/tapNN

I forget the details of how this interface works, but
/sys/devices/virtual/net is definitely allows different overlapping
content per network namespace, so we should not need to add an extra
directory to make this work.

> This is due to Commit 24b1442 ("Driver-core: Always create class
> directories for classses that support namespaces.")
>
> Signed-off-by: Marc Angel <marc@arista.com>
> ---
> I'm not sure that the problems described in that commit message
> apply to macvtaps so maybe it is possible to keep the 'tapNN'
> device directly under 'macvtapX' and not disrupt userland.
>
> Should it even be possible to add a device of a class that doesn't
> support namespaces under one that does?
> This could lead to dead symlinks in the new device class directory or
> duplicate warnings because a device of the same name already exists in
> another namespace.

This definitely looks like something that bears digging into, and fixing
properly.

Eric

^ permalink raw reply

* Re: [PATCH] net: ipv6: Delete host routes on an ifdown
From: David Miller @ 2016-04-25 19:26 UTC (permalink / raw)
  To: dsa; +Cc: netdev, mmanning
In-Reply-To: <1461297372-18796-1-git-send-email-dsa@cumulusnetworks.com>

From: David Ahern <dsa@cumulusnetworks.com>
Date: Thu, 21 Apr 2016 20:56:12 -0700

> Dave: I realize this goes against your preference to keep routes cached
>       on a down but this patch really emphasizes my point of all the
>       dark corners to be handled. 

I've learned my lesson, I never should have put the original patch in
to begin with.

And you're so sloppy here, you didn't even bother adding a Fixes: tag.

The patch at the root of all of this has terrible semantics, and it's
added tons of regressions.  All of which goes against our most basic
principles.

I've been patient enough, but I've now reverting everything, sorry.

It's unfortunate if you have things which depend upon this, but too
bad.  This change has been extremely disruptive for a lot of people,
including me.

You're going to have to work really hard to ever get me to consider
applying patches which do this again.

^ permalink raw reply

* Re: [PATCH] net: ipv6: Delete host routes on an ifdown
From: David Ahern @ 2016-04-25 19:40 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, mmanning
In-Reply-To: <20160425.152611.583503438886577374.davem@davemloft.net>

On 4/25/16 1:26 PM, David Miller wrote:
> From: David Ahern <dsa@cumulusnetworks.com>
> Date: Thu, 21 Apr 2016 20:56:12 -0700
>
>> Dave: I realize this goes against your preference to keep routes cached
>>        on a down but this patch really emphasizes my point of all the
>>        dark corners to be handled.
>
> I've learned my lesson, I never should have put the original patch in
> to begin with.
>
> And you're so sloppy here, you didn't even bother adding a Fixes: tag.
>
> The patch at the root of all of this has terrible semantics, and it's
> added tons of regressions.  All of which goes against our most basic
> principles.
>
> I've been patient enough, but I've now reverting everything, sorry.
>
> It's unfortunate if you have things which depend upon this, but too
> bad.  This change has been extremely disruptive for a lot of people,
> including me.
>
> You're going to have to work really hard to ever get me to consider
> applying patches which do this again.
>

It's unfortunate you want to take that action. Last week I came across a 
prior attempt by Stephen to do this same thing -- keep IPv6 addresses. 
That prior attempt was reverted by commit 73a8bd74e261. Cumulus, 
Brocade, and others clearly want this capability.

You have made many comments about the pains due to differences between 
IPv4 and IPv6. I deal with those pains daily. It takes time to close 
those differences and unfortunately there have been and will be bumps in 
the road. If you look back at the commits on top of the original I 
responded quickly to the 1 bug report from Andrey and the rest of the 
followups have come from me (or the delta from Mike at Brocade) which 
are a result of our range of testing with this sysctl enabled.

^ permalink raw reply

* [PATCH] ipv6: Revert optional address flusing on ifdown.
From: David Miller @ 2016-04-25 19:47 UTC (permalink / raw)
  To: dsa; +Cc: netdev


This reverts the following three commits:

70af921db6f8835f4b11c65731116560adb00c14
799977d9aafbf0ca0b9c39b04cbfb16db71302c9
f1705ec197e705b79ea40fe7a2cc5acfa1d3bfac

The feature was ill conceived, has terrible semantics, and has added
nothing but regressions to the already fragile ipv6 stack.

Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional")
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 Documentation/networking/ip-sysctl.txt |   9 --
 include/linux/ipv6.h                   |   1 -
 include/uapi/linux/ipv6.h              |   1 -
 net/ipv6/addrconf.c                    | 162 +++------------------------------
 4 files changed, 12 insertions(+), 161 deletions(-)

diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index b183e2b..e0ac252 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -1568,15 +1568,6 @@ temp_prefered_lft - INTEGER
 	Preferred lifetime (in seconds) for temporary addresses.
 	Default: 86400 (1 day)
 
-keep_addr_on_down - INTEGER
-	Keep all IPv6 addresses on an interface down event. If set static
-	global addresses with no expiration time are not flushed.
-	  >0 : enabled
-	   0 : system default
-	  <0 : disabled
-
-	Default: 0 (addresses are removed)
-
 max_desync_factor - INTEGER
 	Maximum value for DESYNC_FACTOR, which is a random value
 	that ensures that clients don't synchronize with each
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 7edc14f..4b2267e 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -62,7 +62,6 @@ struct ipv6_devconf {
 		struct in6_addr secret;
 	} stable_secret;
 	__s32		use_oif_addrs_only;
-	__s32		keep_addr_on_down;
 	void		*sysctl;
 };
 
diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
index 3958760..ec117b6 100644
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
@@ -176,7 +176,6 @@ enum {
 	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
 	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
 	DEVCONF_DROP_UNSOLICITED_NA,
-	DEVCONF_KEEP_ADDR_ON_DOWN,
 	DEVCONF_MAX
 };
 
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 23cec53..d77ba39 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -216,7 +216,6 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
 	},
 	.use_oif_addrs_only	= 0,
 	.ignore_routes_with_linkdown = 0,
-	.keep_addr_on_down	= 0,
 };
 
 static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
@@ -261,7 +260,6 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
 	},
 	.use_oif_addrs_only	= 0,
 	.ignore_routes_with_linkdown = 0,
-	.keep_addr_on_down	= 0,
 };
 
 /* Check if a valid qdisc is available */
@@ -3176,81 +3174,6 @@ static void addrconf_gre_config(struct net_device *dev)
 }
 #endif
 
-#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
-/* If the host route is cached on the addr struct make sure it is associated
- * with the proper table. e.g., enslavement can change and if so the cached
- * host route needs to move to the new table.
- */
-static void l3mdev_check_host_rt(struct inet6_dev *idev,
-				  struct inet6_ifaddr *ifp)
-{
-	if (ifp->rt) {
-		u32 tb_id = l3mdev_fib_table(idev->dev) ? : RT6_TABLE_LOCAL;
-
-		if (tb_id != ifp->rt->rt6i_table->tb6_id) {
-			ip6_del_rt(ifp->rt);
-			ifp->rt = NULL;
-		}
-	}
-}
-#else
-static void l3mdev_check_host_rt(struct inet6_dev *idev,
-				  struct inet6_ifaddr *ifp)
-{
-}
-#endif
-
-static int fixup_permanent_addr(struct inet6_dev *idev,
-				struct inet6_ifaddr *ifp)
-{
-	l3mdev_check_host_rt(idev, ifp);
-
-	if (!ifp->rt) {
-		struct rt6_info *rt;
-
-		rt = addrconf_dst_alloc(idev, &ifp->addr, false);
-		if (unlikely(IS_ERR(rt)))
-			return PTR_ERR(rt);
-
-		ifp->rt = rt;
-	}
-
-	if (!(ifp->flags & IFA_F_NOPREFIXROUTE)) {
-		addrconf_prefix_route(&ifp->addr, ifp->prefix_len,
-				      idev->dev, 0, 0);
-	}
-
-	addrconf_dad_start(ifp);
-
-	return 0;
-}
-
-static void addrconf_permanent_addr(struct net_device *dev)
-{
-	struct inet6_ifaddr *ifp, *tmp;
-	struct inet6_dev *idev;
-
-	idev = __in6_dev_get(dev);
-	if (!idev)
-		return;
-
-	write_lock_bh(&idev->lock);
-
-	list_for_each_entry_safe(ifp, tmp, &idev->addr_list, if_list) {
-		if ((ifp->flags & IFA_F_PERMANENT) &&
-		    fixup_permanent_addr(idev, ifp) < 0) {
-			write_unlock_bh(&idev->lock);
-			ipv6_del_addr(ifp);
-			write_lock_bh(&idev->lock);
-
-			net_info_ratelimited("%s: Failed to add prefix route for address %pI6c; dropping\n",
-					     idev->dev->name, &ifp->addr);
-		}
-	}
-
-	write_unlock_bh(&idev->lock);
-}
-
 static int addrconf_notify(struct notifier_block *this, unsigned long event,
 			   void *ptr)
 {
@@ -3337,9 +3260,6 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
 			run_pending = 1;
 		}
 
-		/* restore routes for permanent addresses */
-		addrconf_permanent_addr(dev);
-
 		switch (dev->type) {
 #if IS_ENABLED(CONFIG_IPV6_SIT)
 		case ARPHRD_SIT:
@@ -3448,20 +3368,11 @@ static void addrconf_type_change(struct net_device *dev, unsigned long event)
 		ipv6_mc_unmap(idev);
 }
 
-static bool addr_is_local(const struct in6_addr *addr)
-{
-	return ipv6_addr_type(addr) &
-		(IPV6_ADDR_LINKLOCAL | IPV6_ADDR_LOOPBACK);
-}
-
 static int addrconf_ifdown(struct net_device *dev, int how)
 {
 	struct net *net = dev_net(dev);
 	struct inet6_dev *idev;
-	struct inet6_ifaddr *ifa, *tmp;
-	struct list_head del_list;
-	int _keep_addr;
-	bool keep_addr;
+	struct inet6_ifaddr *ifa;
 	int state, i;
 
 	ASSERT_RTNL();
@@ -3488,16 +3399,6 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 
 	}
 
-	/* aggregate the system setting and interface setting */
-	_keep_addr = net->ipv6.devconf_all->keep_addr_on_down;
-	if (!_keep_addr)
-		_keep_addr = idev->cnf.keep_addr_on_down;
-
-	/* combine the user config with event to determine if permanent
-	 * addresses are to be removed from address hash table
-	 */
-	keep_addr = !(how || _keep_addr <= 0);
-
 	/* Step 2: clear hash table */
 	for (i = 0; i < IN6_ADDR_HSIZE; i++) {
 		struct hlist_head *h = &inet6_addr_lst[i];
@@ -3506,16 +3407,9 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 restart:
 		hlist_for_each_entry_rcu(ifa, h, addr_lst) {
 			if (ifa->idev == idev) {
+				hlist_del_init_rcu(&ifa->addr_lst);
 				addrconf_del_dad_work(ifa);
-				/* combined flag + permanent flag decide if
-				 * address is retained on a down event
-				 */
-				if (!keep_addr ||
-				    !(ifa->flags & IFA_F_PERMANENT) ||
-				    addr_is_local(&ifa->addr)) {
-					hlist_del_init_rcu(&ifa->addr_lst);
-					goto restart;
-				}
+				goto restart;
 			}
 		}
 		spin_unlock_bh(&addrconf_hash_lock);
@@ -3549,54 +3443,31 @@ restart:
 		write_lock_bh(&idev->lock);
 	}
 
-	/* re-combine the user config with event to determine if permanent
-	 * addresses are to be removed from the interface list
-	 */
-	keep_addr = (!how && _keep_addr > 0);
-
-	INIT_LIST_HEAD(&del_list);
-	list_for_each_entry_safe(ifa, tmp, &idev->addr_list, if_list) {
+	while (!list_empty(&idev->addr_list)) {
+		ifa = list_first_entry(&idev->addr_list,
+				       struct inet6_ifaddr, if_list);
 		addrconf_del_dad_work(ifa);
 
-		write_unlock_bh(&idev->lock);
-		spin_lock_bh(&ifa->lock);
-
-		if (keep_addr && (ifa->flags & IFA_F_PERMANENT) &&
-		    !addr_is_local(&ifa->addr)) {
-			/* set state to skip the notifier below */
-			state = INET6_IFADDR_STATE_DEAD;
-			ifa->state = 0;
-			if (!(ifa->flags & IFA_F_NODAD))
-				ifa->flags |= IFA_F_TENTATIVE;
-		} else {
-			state = ifa->state;
-			ifa->state = INET6_IFADDR_STATE_DEAD;
+		list_del(&ifa->if_list);
 
-			list_del(&ifa->if_list);
-			list_add(&ifa->if_list, &del_list);
-		}
+		write_unlock_bh(&idev->lock);
 
+		spin_lock_bh(&ifa->lock);
+		state = ifa->state;
+		ifa->state = INET6_IFADDR_STATE_DEAD;
 		spin_unlock_bh(&ifa->lock);
 
 		if (state != INET6_IFADDR_STATE_DEAD) {
 			__ipv6_ifa_notify(RTM_DELADDR, ifa);
 			inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
 		}
+		in6_ifa_put(ifa);
 
 		write_lock_bh(&idev->lock);
 	}
 
 	write_unlock_bh(&idev->lock);
 
-	/* now clean up addresses to be removed */
-	while (!list_empty(&del_list)) {
-		ifa = list_first_entry(&del_list,
-				       struct inet6_ifaddr, if_list);
-		list_del(&ifa->if_list);
-
-		in6_ifa_put(ifa);
-	}
-
 	/* Step 5: Discard anycast and multicast list */
 	if (how) {
 		ipv6_ac_destroy_dev(idev);
@@ -4861,7 +4732,6 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
 	array[DEVCONF_USE_OIF_ADDRS_ONLY] = cnf->use_oif_addrs_only;
 	array[DEVCONF_DROP_UNICAST_IN_L2_MULTICAST] = cnf->drop_unicast_in_l2_multicast;
 	array[DEVCONF_DROP_UNSOLICITED_NA] = cnf->drop_unsolicited_na;
-	array[DEVCONF_KEEP_ADDR_ON_DOWN] = cnf->keep_addr_on_down;
 }
 
 static inline size_t inet6_ifla6_size(void)
@@ -5950,14 +5820,6 @@ static struct addrconf_sysctl_table
 			.proc_handler	= proc_dointvec,
 		},
 		{
-			.procname       = "keep_addr_on_down",
-			.data           = &ipv6_devconf.keep_addr_on_down,
-			.maxlen         = sizeof(int),
-			.mode           = 0644,
-			.proc_handler   = proc_dointvec,
-
-		},
-		{
 			/* sentinel */
 		}
 	},
-- 
2.4.1

^ permalink raw reply related

* Re: [PATCH 1/5] phylib: don't return NULL from get_phy_device()
From: Florian Fainelli @ 2016-04-25 19:45 UTC (permalink / raw)
  To: Sergei Shtylyov, netdev; +Cc: arnd
In-Reply-To: <16806435.OmqP10ba8M@wasted.cogentembedded.com>

On 24/04/16 10:25, Sergei Shtylyov wrote:
> Arnd Bergmann asked that get_phy_device() returns either NULL or the error
> value,  not both on error.  Do as he said, return ERR_PTR(-ENODEV) instead
> of NULL when the PHY ID registers read as  all ones.
> 
> Suggested-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply

* Re: [PATCH 2/5] xgene: get_phy_device() doesn't return NULL anymore
From: Florian Fainelli @ 2016-04-25 19:46 UTC (permalink / raw)
  To: Sergei Shtylyov, isubramanian, kchudgar; +Cc: netdev, arnd
In-Reply-To: <73083313.ix2iJdrut5@wasted.cogentembedded.com>

On 24/04/16 10:27, Sergei Shtylyov wrote:
> Now that get_phy_device() no longer returns NULL on error, we don't need
> to check for it...
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply

* Re: [PATCH 3/5] fixed_phy: get_phy_device() doesn't return NULL anymore
From: Florian Fainelli @ 2016-04-25 19:46 UTC (permalink / raw)
  To: Sergei Shtylyov, netdev; +Cc: arnd
In-Reply-To: <7242612.WszImdz4eS@wasted.cogentembedded.com>

On 24/04/16 10:29, Sergei Shtylyov wrote:
> Now that get_phy_device() no longer returns NULL on error, we don't need
> to check for it...
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply

* Re: [PATCH 4/5] mdio_bus: get_phy_device() doesn't return NULL anymore
From: Florian Fainelli @ 2016-04-25 19:46 UTC (permalink / raw)
  To: Sergei Shtylyov, netdev; +Cc: arnd
In-Reply-To: <2703899.TobPpSfS5b@wasted.cogentembedded.com>

On 24/04/16 10:30, Sergei Shtylyov wrote:
> Now that get_phy_device() no longer returns NULL on error, we don't need
> to check for it...
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply

* Re: [PATCH 5/5] of_mdio: get_phy_device() doesn't return NULL anymore
From: Florian Fainelli @ 2016-04-25 19:47 UTC (permalink / raw)
  To: Sergei Shtylyov, netdev; +Cc: arnd
In-Reply-To: <2718908.IUaySUkXrd@wasted.cogentembedded.com>

On 24/04/16 10:31, Sergei Shtylyov wrote:
> Now that get_phy_device() no longer returns NULL on error, we don't need
> to check for it...
> 
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply

* Re: [PATCH net-next] tcp: SYN packets are now simply consumed
From: David Miller @ 2016-04-25 19:50 UTC (permalink / raw)
  To: eric.dumazet; +Cc: netdev
In-Reply-To: <1461301981.7627.24.camel@edumazet-glaptop3.roam.corp.google.com>

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Thu, 21 Apr 2016 22:13:01 -0700

> From: Eric Dumazet <edumazet@google.com>
> 
> We now have proper per-listener but also per network namespace counters
> for SYN packets that might be dropped.
> 
> We replace the kfree_skb() by consume_skb() to be drop monitor [1]
> friendly, and remove an obsolete comment.
> FastOpen SYN packets can carry payload in them just fine.
> 
> [1] perf record -a -g -e skb:kfree_skb sleep 1; perf report
> 
> Signed-off-by: Eric Dumazet <edumazet@google.com>

Applied.

^ permalink raw reply

* Re: [PATCH net-next] net: better drop monitoring in ip{6}_recv_error()
From: David Miller @ 2016-04-25 19:50 UTC (permalink / raw)
  To: eric.dumazet; +Cc: netdev
In-Reply-To: <1461302852.7627.29.camel@edumazet-glaptop3.roam.corp.google.com>

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Thu, 21 Apr 2016 22:27:32 -0700

> From: Eric Dumazet <edumazet@google.com>
> 
> We should call consume_skb(skb) when skb is properly consumed,
> or kfree_skb(skb) when skb must be dropped in error case.
> 
> Signed-off-by: Eric Dumazet <edumazet@google.com>

Applied.

^ permalink raw reply

* Re: [PATCH net-next v2 0/4] qed*: driver updates
From: David Miller @ 2016-04-25 19:59 UTC (permalink / raw)
  To: Yuval.Mintz; +Cc: netdev
In-Reply-To: <1461303664-15961-1-git-send-email-Yuval.Mintz@qlogic.com>

From: Yuval Mintz <Yuval.Mintz@qlogic.com>
Date: Fri, 22 Apr 2016 08:41:00 +0300

> This patch series contains some ethtool-related enhancements.

Series applied.

^ permalink raw reply

* Re: [PATCH net-next] route: move lwtunnel state to a single place
From: David Miller @ 2016-04-25 20:20 UTC (permalink / raw)
  To: jbenc; +Cc: netdev, lrichard
In-Reply-To: <c59d9a13e4171a887d6dd2acdce216c51a006993.1461321556.git.jbenc@redhat.com>

From: Jiri Benc <jbenc@redhat.com>
Date: Fri, 22 Apr 2016 12:40:02 +0200

> Commit 751a587ac9f9 ("route: fix breakage after moving lwtunnel state")
> moved lwtstate to the end of dst_entry for 32bit archs. This makes it share
> the cacheline with __refcnt which had an unkown effect on performance. For
> this reason, the pointer was kept in place for 64bit archs.
> 
> However, later performance measurements showed this is of no concern. It
> turns out that every performance sensitive path that accesses lwtstate
> accesses also struct rtable or struct rt6_info which share the same cache
> line.
> 
> Thus, to get rid of a few #ifdefs, move the field to the end of the struct
> also for 64bit.
> 
> Signed-off-by: Jiri Benc <jbenc@redhat.com>

Fair enough, applied, thanks Jiri.

^ permalink raw reply

* Re: [PATCH] cxgbi: fix uninitialized flowi6
From: David Miller @ 2016-04-25 20:21 UTC (permalink / raw)
  To: jbenc; +Cc: linux-scsi, netdev, jejb, martin.petersen, anish
In-Reply-To: <89cb4d2647db3bc922c7067d421e983a271483ca.1461322282.git.jbenc@redhat.com>

From: Jiri Benc <jbenc@redhat.com>
Date: Fri, 22 Apr 2016 13:09:13 +0200

> ip6_route_output looks into different fields in the passed flowi6 structure,
> yet cxgbi passes garbage in nearly all those fields. Zero the structure out
> first.
> 
> Fixes: fc8d0590d9142 ("libcxgbi: Add ipv6 api to driver")
> Signed-off-by: Jiri Benc <jbenc@redhat.com>

Applied.

^ permalink raw reply

* Re: [PATCH net-next] macsec: Convert to using IFF_NO_QUEUE
From: David Miller @ 2016-04-25 20:22 UTC (permalink / raw)
  To: phil; +Cc: netdev, sd
In-Reply-To: <1461326562-6595-1-git-send-email-phil@nwl.cc>

From: Phil Sutter <phil@nwl.cc>
Date: Fri, 22 Apr 2016 14:02:42 +0200

> Signed-off-by: Phil Sutter <phil@nwl.cc>

Applied.

^ permalink raw reply

* Re: [PATCH] net: ipv6: Delete host routes on an ifdown
From: David Miller @ 2016-04-25 20:42 UTC (permalink / raw)
  To: dsa; +Cc: netdev, mmanning
In-Reply-To: <571E72AA.4030100@cumulusnetworks.com>

From: David Ahern <dsa@cumulusnetworks.com>
Date: Mon, 25 Apr 2016 13:40:26 -0600

> It's unfortunate you want to take that action. Last week I came across
> a prior attempt by Stephen to do this same thing -- keep IPv6
> addresses. That prior attempt was reverted by commit
> 73a8bd74e261. Cumulus, Brocade, and others clearly want this
> capability.

But nobody has implemented it correctly, it doesn't matter who wants
the feature.  That's why it keeps getting reverted.

Also, this testing you are talking about should have happened long
before you submitted that first patch that introduced all of these
regressions.  My observations tell me that the bulk of the testing
happened afterwards and that's why all the regressions are popping up
now.

^ permalink raw reply

* Re: [PATCH 0/2] codel: make it reuseable beyond qdiscs
From: David Miller @ 2016-04-25 20:45 UTC (permalink / raw)
  To: michal.kazior; +Cc: netdev, johannes
In-Reply-To: <1461327359-21646-1-git-send-email-michal.kazior@tieto.com>

From: Michal Kazior <michal.kazior@tieto.com>
Date: Fri, 22 Apr 2016 14:15:57 +0200

> There's an ongoing effort in fixing wireless
> bufferbloat. As part of that fq_codel is being
> ported into mac80211. To prevent code duplication
> codel.h needs to be slightly modified before it
> can be used in mac80211 (or other drivers FWIW).
> 
> For more background please see:
> 
>   https://www.spinics.net/lists/linux-wireless/msg149976.html

Series applied, but I reserve the right the revert this if the
indirect functions calling this introduces causes performance
regressions.

Thanks.

^ permalink raw reply

* Re: [PATCH] fq: add fair queuing framework
From: David Miller @ 2016-04-25 20:46 UTC (permalink / raw)
  To: michal.kazior; +Cc: netdev, johannes
In-Reply-To: <1461327613-22902-1-git-send-email-michal.kazior@tieto.com>

From: Michal Kazior <michal.kazior@tieto.com>
Date: Fri, 22 Apr 2016 14:20:13 +0200

> This works on the same implementation principle as
> codel*.h, i.e. there's a generic header with
> structures and macros and a implementation header
> carrying function definitions to include in given,
> e.g. driver or module.
> 
> The fairness logic comes from
> net/sched/sch_fq_codel.c but is generalized so it
> is more flexible and easier to re-use.
> 
> Signed-off-by: Michal Kazior <michal.kazior@tieto.com>

Applied, but same caveats as for codel.

^ permalink raw reply

* Re: [RFC PATCH net] ipv6/ila: fix nlsize calculation for lwtunnel
From: David Miller @ 2016-04-25 20:47 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: netdev, tom
In-Reply-To: <1461340682-31568-1-git-send-email-nicolas.dichtel@6wind.com>

From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date: Fri, 22 Apr 2016 17:58:02 +0200

> The handler 'ila_fill_encap_info' adds one attribute: ILA_ATTR_LOCATOR.
> 
> Fixes: 65d7ab8de582 ("net: Identifier Locator Addressing module")
> CC: Tom Herbert <tom@herbertland.com>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> ---
> 
> Tom, when I read the comment, I feel I'm misssing something, but what?

Tom please take a look at this, thanks.

^ permalink raw reply

* Re: [PATCH] devlink: export header
From: David Miller @ 2016-04-25 20:49 UTC (permalink / raw)
  To: stephen; +Cc: jiri, netdev
In-Reply-To: <20160422095517.545fe658@xeon-e3>

From: Stephen Hemminger <stephen@networkplumber.org>
Date: Fri, 22 Apr 2016 09:55:17 -0700

> Export devlink.h when doing make headers install.
> I am going to investigate just doing all headers in the directory,
> but lets add missing piece for now.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>

This is already exported in the 'net' tree.

^ permalink raw reply

* Re: [PATCH net-next] tc_act: export all user headers
From: David Miller @ 2016-04-25 20:49 UTC (permalink / raw)
  To: stephen; +Cc: hadi, netdev
In-Reply-To: <20160422100638.4f4280bf@xeon-e3>

From: Stephen Hemminger <stephen@networkplumber.org>
Date: Fri, 22 Apr 2016 10:06:38 -0700

> The file tc_ife.h was missing from the export list.
> Rather than continue to cherry-pick, just export all headers in the directory.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>

Applied.

^ permalink raw reply

* [PATCH net-next 1/2] tcp: remove an unnecessary check in tcp_tx_timestamp
From: Soheil Hassas Yeganeh @ 2016-04-25 20:51 UTC (permalink / raw)
  To: davem, netdev
  Cc: kafai, willemb, edumazet, ycheng, ncardwell,
	Soheil Hassas Yeganeh

From: Soheil Hassas Yeganeh <soheil@google.com>

tcp_tx_timestamp() receives tsflags as a parameter. tsflags
is initialized to sk->sk_tsflags and is overridden by control
messages. As a result the "sk->sk_tsflags || tsflags" is the
same expression as "tsflags"

Remove the redundant check for sk->sk_tsflags in tcp_tx_timestamp.

Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
---
 net/ipv4/tcp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 4d73858..3c542dc 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -430,7 +430,7 @@ EXPORT_SYMBOL(tcp_init_sock);
 
 static void tcp_tx_timestamp(struct sock *sk, u16 tsflags, struct sk_buff *skb)
 {
-	if (sk->sk_tsflags || tsflags) {
+	if (tsflags) {
 		struct skb_shared_info *shinfo = skb_shinfo(skb);
 		struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);
 
-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply related

* [PATCH net-next 2/2] tcp: remove a redundant check for SKBTX_ACK_TSTAMP
From: Soheil Hassas Yeganeh @ 2016-04-25 20:51 UTC (permalink / raw)
  To: davem, netdev
  Cc: kafai, willemb, edumazet, ycheng, ncardwell,
	Soheil Hassas Yeganeh
In-Reply-To: <1461617473-11349-1-git-send-email-soheil.kdev@gmail.com>

From: Soheil Hassas Yeganeh <soheil@google.com>

txstamp_ack in tcp_skb_cb is set iff the SKBTX_ACK_TSTAMP
flag is set for an skb. Thus, it is not required to check
shinfo->tx_flags if the txstamp_ack bit is checked.

Remove the check on shinfo->tx_flags & SKBTX_ACK_TSTAMP, since
it has already been checked using the txstamp_ack bit.

Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
---
 net/ipv4/tcp_input.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 967520d..2f3fd92 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3087,8 +3087,7 @@ static void tcp_ack_tstamp(struct sock *sk, struct sk_buff *skb,
 		return;
 
 	shinfo = skb_shinfo(skb);
-	if ((shinfo->tx_flags & SKBTX_ACK_TSTAMP) &&
-	    !before(shinfo->tskey, prior_snd_una) &&
+	if (!before(shinfo->tskey, prior_snd_una) &&
 	    before(shinfo->tskey, tcp_sk(sk)->snd_una))
 		__skb_tstamp_tx(skb, NULL, sk, SCM_TSTAMP_ACK);
 }
-- 
2.8.0.rc3.226.g39d4020

^ permalink raw reply related

* Re: [PATCH net-next] tc_act: export all user headers
From: David Miller @ 2016-04-25 20:52 UTC (permalink / raw)
  To: stephen; +Cc: hadi, netdev
In-Reply-To: <20160425.164939.2072274531689250224.davem@davemloft.net>

From: David Miller <davem@davemloft.net>
Date: Mon, 25 Apr 2016 16:49:39 -0400 (EDT)

> From: Stephen Hemminger <stephen@networkplumber.org>
> Date: Fri, 22 Apr 2016 10:06:38 -0700
> 
>> The file tc_ife.h was missing from the export list.
>> Rather than continue to cherry-pick, just export all headers in the directory.
>> 
>> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> 
> Applied.

Please compile test, pretty please??!?!?

./usr/include/linux/tc_act/*.h: No such file or directory

It looks like you can't expect shell expansions like that to work in
Kbuild files.

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox