Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH net-next 1/2] net: ndisc.c: fix coding style issue
From: yuan linyu @ 2017-05-26 13:55 UTC (permalink / raw)
  To: 吉藤英明
  Cc: network dev, David S . Miller, Joe Perches, David Ahern,
	yuan linyu, YOSHIFUJI Hideaki
In-Reply-To: <CAPA1RqDqyZicNWM8arSvMfQjmy_A=LLEjtTwH8KTza4WwQ_dsg@mail.gmail.com>

On 五, 2017-05-26 at 22:45 +0900, 吉藤英明 wrote:
> Hi,
> 
> 2017-05-26 22:23 GMT+09:00 yuan linyu <cugyly@163.com>:
> > 
> > From: yuan linyu <Linyu.Yuan@alcatel-sbell.com.cn>
> > 
> > Signed-off-by: yuan linyu <Linyu.Yuan@alcatel-sbell.com.cn>
> > ---
> >  net/ipv6/ndisc.c | 109 ++++++++++++++++++++++++++++---------------------------
> >  1 file changed, 55 insertions(+), 54 deletions(-)
> Sorry, I don't think this kind of change for style is good
> bacause this makes effort of  backport more difficult.
hi, i can't understand. 
if any change of this code you decide to backport, it need effort,
not only important fix.

do I miss your point ?
> 
> --yoshfuji
> 

^ permalink raw reply

* Re: [patch net-next 01/18] bridge: Export VLAN filtering state
From: Ido Schimmel @ 2017-05-26 14:02 UTC (permalink / raw)
  To: Nikolay Aleksandrov; +Cc: Jiri Pirko, netdev, davem, mlxsw, stephen
In-Reply-To: <b2edc91e-d7cf-a667-2b00-5722ed09a2a6@cumulusnetworks.com>

Hi Nik,

On Fri, May 26, 2017 at 11:55:18AM +0300, Nikolay Aleksandrov wrote:
> On 5/26/17 9:37 AM, Jiri Pirko wrote:
> > From: Ido Schimmel <idosch@mellanox.com>
> > 
> > It's useful for drivers supporting bridge offload to be able to query
> > the bridge's VLAN filtering state.
> > 
> > Currently, upon enslavement to a bridge master, the offloading driver
> > will only learn about the bridge's VLAN filtering state after the bridge
> > device was already linked with its slave.
> > 
> > Being able to query the bridge's VLAN filtering state allows such
> > drivers to forbid enslavement in case resource couldn't be allocated for
> > a VLAN-aware bridge and also choose the correct initialization routine
> > for the enslaved port, which is dependent on the bridge type.
> > 
> > Signed-off-by: Ido Schimmel <idosch@mellanox.com>
> > Signed-off-by: Jiri Pirko <jiri@mellanox.com>
> > ---
> >   include/linux/if_bridge.h | 9 +++++++++
> >   net/bridge/br_if.c        | 2 +-
> >   net/bridge/br_mdb.c       | 4 ++--
> >   net/bridge/br_netlink.c   | 2 +-
> >   net/bridge/br_private.h   | 9 ---------
> >   net/bridge/br_vlan.c      | 8 ++++++++
> >   6 files changed, 21 insertions(+), 13 deletions(-)
> > 
> 
> I must say this bridge -> dev -> bridge looks weird from the bridge POV.
> Since exports like this seem to be increasing I think it'd be nice to
> make some API that can be queried instead of exporting symbols for each
> bridge option or attribute. In this case maybe a simpler solution would've
> been only a new exported symbol for external users.

It seemed more logical to me to export the existing function, but I can
instead leave it as-is and introduce a new symbol. I'll wait for more
comments and send a v2 if deemed necessary.

> The patch itself looks good to me.
> 
> Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Thanks for reviewing!

^ permalink raw reply

* Re: [PATCH net-next 2/2] net: ndisc.c: minor code improvement
From: Joe Perches @ 2017-05-26 14:05 UTC (permalink / raw)
  To: yuan linyu, netdev; +Cc: David S . Miller, David Ahern, yuan linyu
In-Reply-To: <1495805052-2974-1-git-send-email-cugyly@163.com>

On Fri, 2017-05-26 at 21:24 +0800, yuan linyu wrote:
> From: yuan linyu <Linyu.Yuan@alcatel-sbell.com.cn>
> 
> on x86_64, text size decrease 80 bytes

You are sending whitespace and code reduction changes.

Please send the object code size reduction changes
as a separate patch from the whitespace only changes.

> Signed-off-by: yuan linyu <Linyu.Yuan@alcatel-sbell.com.cn>
> ---
>  net/ipv6/ndisc.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
> index 292c827..ee9b12c 100644
> --- a/net/ipv6/ndisc.c
> +++ b/net/ipv6/ndisc.c
> @@ -147,17 +147,16 @@ void __ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data,
>  
>  	opt[0] = type;
>  	opt[1] = space >> 3;
> +	opt   += 2;
>  
> -	memset(opt + 2, 0, pad);
> +	memset(opt, 0, pad);
>  	opt   += pad;
>  	space -= pad;
>  
> -	memcpy(opt + 2, data, data_len);
> -	data_len += 2;
> +	memcpy(opt, data, data_len);
>  	opt += data_len;
>  	space -= data_len;
> -	if (space > 0)
> -		memset(opt, 0, space);
> +	memset(opt, 0, space);
>  }
>  EXPORT_SYMBOL_GPL(__ndisc_fill_addr_option);
>  
> @@ -997,6 +996,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
>  	if (neigh) {
>  		u8 old_flags = neigh->flags;
>  		struct net *net = dev_net(dev);
> +		u32 flags;
>  
>  		if (neigh->nud_state & NUD_FAILED)
>  			goto out;
> @@ -1013,13 +1013,14 @@ static void ndisc_recv_na(struct sk_buff *skb)
>  			goto out;
>  		}
>  
> +		flags = NEIGH_UPDATE_F_WEAK_OVERRIDE | NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
> +		if (msg->icmph.icmp6_override)
> +			flags |= NEIGH_UPDATE_F_OVERRIDE;
> +		if (msg->icmph.icmp6_router)
> +			flags |= NEIGH_UPDATE_F_ISROUTER;
>  		ndisc_update(dev, neigh, lladdr,
>  			     msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE,
> -			     NEIGH_UPDATE_F_WEAK_OVERRIDE|
> -			     (msg->icmph.icmp6_override ? NEIGH_UPDATE_F_OVERRIDE : 0)|
> -			     NEIGH_UPDATE_F_OVERRIDE_ISROUTER|
> -			     (msg->icmph.icmp6_router ? NEIGH_UPDATE_F_ISROUTER : 0),
> -			     NDISC_NEIGHBOUR_ADVERTISEMENT, &ndopts);
> +			     flags, NDISC_NEIGHBOUR_ADVERTISEMENT, &ndopts);
>  
>  		if ((old_flags & ~neigh->flags) & NTF_ROUTER) {
>  			/*
> @@ -1217,12 +1218,11 @@ static void ndisc_router_discovery(struct sk_buff *skb)
>  	 * received RA message (RFC 2462) -- yoshfuji
>  	 */
>  	old_if_flags = in6_dev->if_flags;
> -	in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED |
> -				IF_RA_OTHERCONF)) |
> -				(ra_msg->icmph.icmp6_addrconf_managed ?
> -					IF_RA_MANAGED : 0) |
> -				(ra_msg->icmph.icmp6_addrconf_other ?
> -					IF_RA_OTHERCONF : 0);
> +	in6_dev->if_flags &= ~(IF_RA_MANAGED | IF_RA_OTHERCONF);
> +	if (ra_msg->icmph.icmp6_addrconf_managed)
> +		in6_dev->if_flags |= IF_RA_MANAGED;
> +	if (ra_msg->icmph.icmp6_addrconf_other)
> +		in6_dev->if_flags |= IF_RA_OTHERCONF;
>  
>  	if (old_if_flags != in6_dev->if_flags)
>  		send_ifinfo_notify = true;

^ permalink raw reply

* Re: [PATCH net-next 3/4] tls: kernel TLS support
From: Eric Dumazet @ 2017-05-26 14:16 UTC (permalink / raw)
  To: Dave Watson
  Cc: Ilya Lesokhin, Aviad Yehezkel, Boris Pismenny, Liran Liss,
	Matan Barak, David Miller, netdev, Tom Herbert, herbert,
	linux-crypto, Hannes Frederic Sowa, Alexei Starovoitov, nmav,
	fridolin.pokorny
In-Reply-To: <20170524162708.GA24215@davejwatson-mba.local>

On Wed, 2017-05-24 at 09:27 -0700, Dave Watson wrote:
> Software implementation of transport layer security, implemented using ULP
> infrastructure.  tcp proto_ops are replaced with tls equivalents of sendmsg and
> sendpage.

...

> +
> +int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
> +{
	...
> +
> +	lock_sock(sk);
> +
> +	/* Only one writer at a time is allowed */
> +	if (sk->sk_write_pending)
> +		return -EBUSY;

Ouch...

^ permalink raw reply

* Re: [PATCH v3 1/2] net: phy: Add Cortina CS4340 driver (fwd)
From: Julia Lawall @ 2017-05-26 14:31 UTC (permalink / raw)
  To: Bogdan Purcareata
  Cc: andrew-g2DYL2Zd6BY, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w,
	netdev-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, kbuild-all-JC7UmRfGjtg

The u32 values on lines 73 and 79 will not be less than 0.

julia

---------- Forwarded message ----------
Date: Fri, 26 May 2017 19:31:28 +0800
From: kbuild test robot <fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: kbuild-JC7UmRfGjtg@public.gmane.org
Cc: Julia Lawall <julia.lawall-L2FTfq7BK8M@public.gmane.org>
Subject: Re: [PATCH v3 1/2] net: phy: Add Cortina CS4340 driver

CC: kbuild-all-JC7UmRfGjtg@public.gmane.org
In-Reply-To: <1495785519-1468-2-git-send-email-bogdan.purcareata-3arQi8VN3Tc@public.gmane.org>
TO: Bogdan Purcareata <bogdan.purcareata-3arQi8VN3Tc@public.gmane.org>
CC: andrew-g2DYL2Zd6BY@public.gmane.org, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
CC:

Hi Bogdan,

[auto build test WARNING on net-next/master]
[also build test WARNING on v4.12-rc2 next-20170526]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Bogdan-Purcareata/net-phy-Add-Cortina-CS4340-driver/20170526-170949
:::::: branch date: 2 hours ago
:::::: commit date: 2 hours ago

>> drivers/net/phy/cortina.c:73:5-11: WARNING: Unsigned expression compared with zero: id_lsb < 0
>> drivers/net/phy/cortina.c:79:5-11: WARNING: Unsigned expression compared with zero: id_msb < 0

git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 84281ef4be227acc6a2f638da7a6842f7f55348d
vim +73 drivers/net/phy/cortina.c

84281ef4 Bogdan Purcareata 2017-05-26  67  static int cortina_probe(struct phy_device *phydev)
84281ef4 Bogdan Purcareata 2017-05-26  68  {
84281ef4 Bogdan Purcareata 2017-05-26  69  	u32 phy_id = 0, id_lsb, id_msb;
84281ef4 Bogdan Purcareata 2017-05-26  70
84281ef4 Bogdan Purcareata 2017-05-26  71  	/* Read device id from phy registers. */
84281ef4 Bogdan Purcareata 2017-05-26  72  	id_lsb = cortina_read_reg(phydev, VILLA_GLOBAL_CHIP_ID_LSB);
84281ef4 Bogdan Purcareata 2017-05-26 @73  	if (id_lsb < 0)
84281ef4 Bogdan Purcareata 2017-05-26  74  		return -ENXIO;
84281ef4 Bogdan Purcareata 2017-05-26  75
84281ef4 Bogdan Purcareata 2017-05-26  76  	phy_id = id_lsb << 16;
84281ef4 Bogdan Purcareata 2017-05-26  77
84281ef4 Bogdan Purcareata 2017-05-26  78  	id_msb = cortina_read_reg(phydev, VILLA_GLOBAL_CHIP_ID_MSB);
84281ef4 Bogdan Purcareata 2017-05-26 @79  	if (id_msb < 0)
84281ef4 Bogdan Purcareata 2017-05-26  80  		return -ENXIO;
84281ef4 Bogdan Purcareata 2017-05-26  81
84281ef4 Bogdan Purcareata 2017-05-26  82  	phy_id |= id_msb;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
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 v3 1/2] net: phy: Add Cortina CS4340 driver (fwd)
From: Bogdan Purcareata @ 2017-05-26 14:35 UTC (permalink / raw)
  To: Julia Lawall
  Cc: andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	kbuild-all@01.org
In-Reply-To: <alpine.DEB.2.20.1705261631020.2950@hadrien>

> -----Original Message-----
> From: Julia Lawall [mailto:julia.lawall@lip6.fr]
> Sent: Friday, May 26, 2017 5:32 PM
> To: Bogdan Purcareata <bogdan.purcareata@nxp.com>
> Cc: andrew@lunn.ch; f.fainelli@gmail.com; netdev@vger.kernel.org;
> devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; kbuild-all@01.org
> Subject: Re: [PATCH v3 1/2] net: phy: Add Cortina CS4340 driver (fwd)
> 
> The u32 values on lines 73 and 79 will not be less than 0.

Will change to int for proper error checking.

Thanks!
Bogdan P.

^ permalink raw reply

* [PATCH v3] hdlcdrv: Fix divide by zero in hdlcdrv_ioctl
From: Firo Yang @ 2017-05-26 14:37 UTC (permalink / raw)
  To: davem, alan
  Cc: t.sailer, wharms, andreyknvl, linux-hams, gregkh, netdev, thomas,
	javier, dhowells, geliangtang, linux-kernel, Firo Yang
In-Reply-To: <CAAeHK+ya2sAtLmJ0VyP6e=13OXUw98dp1WdRFU=o5+xGFGPtbQ@mail.gmail.com>

syszkaller fuzzer triggered a divide by zero, when set calibration
through ioctl().

To fix it, test 'bitrate' if it is negative or 0, just return -EINVAL.

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Firo Yang <firogm@gmail.com>
---
v2->v3:
	Just fix divide error and remove netif_running() test.
	Refine the testing code as David Miller suggested.

v1->v2:
        Change Reported-by to Andrey Konovalov.
        Send it to original report thread.

v0->v1:
        Reviewed by walter harms <wharms@bfs.de>.
        Return ENODEV instead of EPERM if !netif_running(dev)
        Check if s->par.bitrate > 0.
 drivers/net/hamradio/hdlcdrv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
index 8c3633c..97e3bc6 100644
--- a/drivers/net/hamradio/hdlcdrv.c
+++ b/drivers/net/hamradio/hdlcdrv.c
@@ -576,6 +576,8 @@ static int hdlcdrv_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 	case HDLCDRVCTL_CALIBRATE:
 		if(!capable(CAP_SYS_RAWIO))
 			return -EPERM;
+		if (s->par.bitrate <= 0)
+			return -EINVAL;
 		if (bi.data.calibrate > INT_MAX / s->par.bitrate)
 			return -EINVAL;
 		s->hdlctx.calibrate = bi.data.calibrate * s->par.bitrate / 16;
-- 
2.9.4

^ permalink raw reply related

* [PATCH net-next 00/11] ibmvnic: Driver updates
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen

This set of patches implements several updates to the ibmvnic driver
to fix issues that have been found in testing. Most of the updates
invovle updating queue handling during driver close and reset
operations.

-Nathan
---

John Allen (4):
      ibmvnic: Track state of adapter napis
      ibmvnic: Handle failover after failed init crq
      ibmvnic: Send gratuitous arp on reset
      ibmvnic: Non-fatal error handling

Nathan Fontenot (4):
      ibmvnic: Check adapter state during ibmvnic_poll
      ibmvnic: Reset the CRQ queue during driver reset
      ibmvnic: Reset tx/rx pools on driver reset
      ibmvnic: Reset sub-crqs during driver reset

Thomas Falcon (3):
      ibmvnic: Fix cleanup of SKB's on driver close
      ibmvnic: Halt TX and report carrier off on H_CLOSED return code
      ibmvnic: Deactivate RX pool buffer replenishment on H_CLOSED


 drivers/net/ethernet/ibm/ibmvnic.c |  259 ++++++++++++++++++++++++++++++------
 drivers/net/ethernet/ibm/ibmvnic.h |    2 
 2 files changed, 220 insertions(+), 41 deletions(-)

^ permalink raw reply

* [PATCH net-next 01/11] ibmvnic: Track state of adapter napis
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: John Allen <jallen@linux.vnet.ibm.com>

Track the state of ibmvnic napis. The driver can get into states where it
can be reset when napis are already disabled and attempting to disable them
again will cause the driver to hang.

Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   37 +++++++++++++++++++++++++++---------
 drivers/net/ethernet/ibm/ibmvnic.h |    1 +
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 27f7933..4997de4 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -518,6 +518,32 @@ static void release_error_buffers(struct ibmvnic_adapter *adapter)
 	spin_unlock_irqrestore(&adapter->error_list_lock, flags);
 }
 
+static void ibmvnic_napi_enable(struct ibmvnic_adapter *adapter)
+{
+	int i;
+
+	if (adapter->napi_enabled)
+		return;
+
+	for (i = 0; i < adapter->req_rx_queues; i++)
+		napi_enable(&adapter->napi[i]);
+
+	adapter->napi_enabled = true;
+}
+
+static void ibmvnic_napi_disable(struct ibmvnic_adapter *adapter)
+{
+	int i;
+
+	if (!adapter->napi_enabled)
+		return;
+
+	for (i = 0; i < adapter->req_rx_queues; i++)
+		napi_disable(&adapter->napi[i]);
+
+	adapter->napi_enabled = false;
+}
+
 static int ibmvnic_login(struct net_device *netdev)
 {
 	struct ibmvnic_adapter *adapter = netdev_priv(netdev);
@@ -674,9 +700,7 @@ static int __ibmvnic_open(struct net_device *netdev)
 
 	adapter->state = VNIC_OPENING;
 	replenish_pools(adapter);
-
-	for (i = 0; i < adapter->req_rx_queues; i++)
-		napi_enable(&adapter->napi[i]);
+	ibmvnic_napi_enable(adapter);
 
 	/* We're ready to receive frames, enable the sub-crq interrupts and
 	 * set the logical link state to up
@@ -779,12 +803,7 @@ static int __ibmvnic_close(struct net_device *netdev)
 
 	adapter->state = VNIC_CLOSING;
 	netif_tx_stop_all_queues(netdev);
-
-	if (adapter->napi) {
-		for (i = 0; i < adapter->req_rx_queues; i++)
-			napi_disable(&adapter->napi[i]);
-	}
-
+	ibmvnic_napi_disable(adapter);
 	clean_tx_pools(adapter);
 
 	if (adapter->tx_scrq) {
diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
index 4702b48..4816e04 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.h
+++ b/drivers/net/ethernet/ibm/ibmvnic.h
@@ -1031,4 +1031,5 @@ struct ibmvnic_adapter {
 	struct list_head rwi_list;
 	struct work_struct ibmvnic_reset;
 	bool resetting;
+	bool napi_enabled;
 };

^ permalink raw reply related

* [PATCH net-next 02/11] ibmvnic: Handle failover after failed init crq
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: John Allen <jallen@linux.vnet.ibm.com>

Handle case where phyp sends a failover after failing to send the
init crq.

Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   11 ++++++++++-
 drivers/net/ethernet/ibm/ibmvnic.h |    2 +-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 4997de4..1f7cf6f 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -3167,6 +3167,8 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
 		switch (gen_crq->cmd) {
 		case IBMVNIC_CRQ_INIT:
 			dev_info(dev, "Partner initialized\n");
+			adapter->from_passive_init = true;
+			complete(&adapter->init_done);
 			break;
 		case IBMVNIC_CRQ_INIT_COMPLETE:
 			dev_info(dev, "Partner initialization complete\n");
@@ -3481,11 +3483,18 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
 		return rc;
 	}
 
+	adapter->from_passive_init = false;
+
 	init_completion(&adapter->init_done);
 	ibmvnic_send_crq_init(adapter);
 	if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
 		dev_err(dev, "Initialization sequence timed out\n");
-		release_crq_queue(adapter);
+		return -1;
+	}
+
+	if (adapter->from_passive_init) {
+		adapter->state = VNIC_OPEN;
+		adapter->from_passive_init = false;
 		return -1;
 	}
 
diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
index 4816e04..fa6ac4e 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.h
+++ b/drivers/net/ethernet/ibm/ibmvnic.h
@@ -1031,5 +1031,5 @@ struct ibmvnic_adapter {
 	struct list_head rwi_list;
 	struct work_struct ibmvnic_reset;
 	bool resetting;
-	bool napi_enabled;
+	bool napi_enabled, from_passive_init;
 };

^ permalink raw reply related

* [PATCH net-next 03/11] ibmvnic: Send gratuitous arp on reset
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: John Allen <jallen@linux.vnet.ibm.com>

Send gratuitous arp after any reset.

Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 1f7cf6f..465a8fa 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1273,6 +1273,7 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 	for (i = 0; i < adapter->req_rx_queues; i++)
 		napi_schedule(&adapter->napi[i]);
 
+	netdev_notify_peers(netdev);
 	return 0;
 }
 

^ permalink raw reply related

* [PATCH net-next 04/11] ibmvnic: Fix cleanup of SKB's on driver close
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

A race condition occurs when closing the driver. Free'ing of skb's
can race between the close routine and ibmvnic_tx_interrupt. To fix
this we move the claenup of tx pools during close to after the
sub-CRQ interrupts are disabled.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 465a8fa..0f705e6 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -804,7 +804,6 @@ static int __ibmvnic_close(struct net_device *netdev)
 	adapter->state = VNIC_CLOSING;
 	netif_tx_stop_all_queues(netdev);
 	ibmvnic_napi_disable(adapter);
-	clean_tx_pools(adapter);
 
 	if (adapter->tx_scrq) {
 		for (i = 0; i < adapter->req_tx_queues; i++)
@@ -833,6 +832,7 @@ static int __ibmvnic_close(struct net_device *netdev)
 		}
 	}
 
+	clean_tx_pools(adapter);
 	adapter->state = VNIC_CLOSED;
 	return rc;
 }

^ permalink raw reply related

* [PATCH net-next 05/11] ibmvnic: Non-fatal error handling
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: John Allen <jallen@linux.vnet.ibm.com>

Handle non-fatal error conditions. The process to do this when
resetting the driver is to just do __ibmvnic_close followed by
__ibmvnic_open.

Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   56 ++++++++++++++++++++----------------
 drivers/net/ethernet/ibm/ibmvnic.h |    1 +
 2 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 0f705e6..def867a 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1225,37 +1225,41 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 	if (rc)
 		return rc;
 
-	/* remove the closed state so when we call open it appears
-	 * we are coming from the probed state.
-	 */
-	adapter->state = VNIC_PROBED;
+	if (adapter->reset_reason != VNIC_RESET_NON_FATAL) {
+		/* remove the closed state so when we call open it appears
+		 * we are coming from the probed state.
+		 */
+		adapter->state = VNIC_PROBED;
 
-	release_resources(adapter);
-	release_sub_crqs(adapter);
-	release_crq_queue(adapter);
+		release_resources(adapter);
+		release_sub_crqs(adapter);
+		release_crq_queue(adapter);
 
-	rc = ibmvnic_init(adapter);
-	if (rc)
-		return 0;
+		rc = ibmvnic_init(adapter);
+		if (rc)
+			return 0;
 
-	/* If the adapter was in PROBE state prior to the reset, exit here. */
-	if (reset_state == VNIC_PROBED)
-		return 0;
+		/* If the adapter was in PROBE state prior to the reset,
+		 * exit here.
+		 */
+		if (reset_state == VNIC_PROBED)
+			return 0;
 
-	rc = ibmvnic_login(netdev);
-	if (rc) {
-		adapter->state = VNIC_PROBED;
-		return 0;
-	}
+		rc = ibmvnic_login(netdev);
+		if (rc) {
+			adapter->state = VNIC_PROBED;
+			return 0;
+		}
 
-	rtnl_lock();
-	rc = init_resources(adapter);
-	rtnl_unlock();
-	if (rc)
-		return rc;
+		rtnl_lock();
+		rc = init_resources(adapter);
+		rtnl_unlock();
+		if (rc)
+			return rc;
 
-	if (reset_state == VNIC_CLOSED)
-		return 0;
+		if (reset_state == VNIC_CLOSED)
+			return 0;
+	}
 
 	rc = __ibmvnic_open(netdev);
 	if (rc) {
@@ -2763,6 +2767,8 @@ static void handle_error_indication(union ibmvnic_crq *crq,
 
 	if (crq->error_indication.flags & IBMVNIC_FATAL_ERROR)
 		ibmvnic_reset(adapter, VNIC_RESET_FATAL);
+	else
+		ibmvnic_reset(adapter, VNIC_RESET_NON_FATAL);
 }
 
 static void handle_change_mac_rsp(union ibmvnic_crq *crq,
diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
index fa6ac4e..7e2300e 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.h
+++ b/drivers/net/ethernet/ibm/ibmvnic.h
@@ -925,6 +925,7 @@ enum vnic_state {VNIC_PROBING = 1,
 enum ibmvnic_reset_reason {VNIC_RESET_FAILOVER = 1,
 			   VNIC_RESET_MOBILITY,
 			   VNIC_RESET_FATAL,
+			   VNIC_RESET_NON_FATAL,
 			   VNIC_RESET_TIMEOUT};
 
 struct ibmvnic_rwi {

^ permalink raw reply related

* [PATCH net-next 06/11] ibmvnic: Halt TX and report carrier off on H_CLOSED return code
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

This patch disables transmissions and reports carrier off if xmit
function returns that the hardware TX queue is closed. The driver can
then await a signal from firmware to determine the correct reset method.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index def867a..1c3f1ed 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1111,8 +1111,14 @@ static int ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
 		dev_kfree_skb_any(skb);
 		tx_buff->skb = NULL;
 
-		if (lpar_rc == H_CLOSED)
-			netif_stop_subqueue(netdev, queue_num);
+		if (lpar_rc == H_CLOSED) {
+			/* Disable TX and report carrier off if queue is closed.
+			 * Firmware guarantees that a signal will be sent to the
+			 * driver, triggering a reset or some other action.
+			 */
+			netif_tx_stop_all_queues(netdev);
+			netif_carrier_off(netdev);
+		}
 
 		tx_send_failed++;
 		tx_dropped++;

^ permalink raw reply related

* [PATCH net-next 07/11] ibmvnic: Deactivate RX pool buffer replenishment on H_CLOSED
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

If H_CLOSED is returned, halt RX buffer replenishment activity
until firmware sends a notification that the driver can reset.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 1c3f1ed..47421e4 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -200,6 +200,15 @@ static void free_long_term_buff(struct ibmvnic_adapter *adapter,
 	dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
 }
 
+static void deactivate_rx_pools(struct ibmvnic_adapter *adapter)
+{
+	int i;
+
+	for (i = 0; i < be32_to_cpu(adapter->login_rsp_buf->num_rxadd_subcrqs);
+	     i++)
+		adapter->rx_pool[i].active = 0;
+}
+
 static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
 			      struct ibmvnic_rx_pool *pool)
 {
@@ -217,6 +226,9 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
 	int index;
 	int i;
 
+	if (!pool->active)
+		return;
+
 	handle_array = (u64 *)((u8 *)(adapter->login_rsp_buf) +
 				      be32_to_cpu(adapter->login_rsp_buf->
 				      off_rxadd_subcrqs));
@@ -287,6 +299,15 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
 	dev_kfree_skb_any(skb);
 	adapter->replenish_add_buff_failure++;
 	atomic_add(buffers_added, &pool->available);
+
+	if (lpar_rc == H_CLOSED) {
+		/* Disable buffer pool replenishment and report carrier off if
+		 * queue is closed. Firmware guarantees that a signal will
+		 * be sent to the driver, triggering a reset.
+		 */
+		deactivate_rx_pools(adapter);
+		netif_carrier_off(adapter->netdev);
+	}
 }
 
 static void replenish_pools(struct ibmvnic_adapter *adapter)

^ permalink raw reply related

* [PATCH net-next 08/11] ibmvnic: Check adapter state during ibmvnic_poll
From: Nathan Fontenot @ 2017-05-26 14:30 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

We do not want to process any receive frames if the ibmvnic_poll
routine is invoked while a reset is in process. Also, before
replenishing the rx pools in the ibmvnic_poll, we want to
make sure the adapter is not in the process of closing.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 47421e4..760352f 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1435,6 +1435,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget)
 	struct ibmvnic_adapter *adapter = netdev_priv(netdev);
 	int scrq_num = (int)(napi - adapter->napi);
 	int frames_processed = 0;
+
+	if (adapter->resetting)
+		return 0;
+
 restart_poll:
 	while (frames_processed < budget) {
 		struct sk_buff *skb;
@@ -1493,7 +1497,9 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget)
 		netdev->stats.rx_bytes += length;
 		frames_processed++;
 	}
-	replenish_rx_pool(adapter, &adapter->rx_pool[scrq_num]);
+
+	if (adapter->state != VNIC_CLOSING)
+		replenish_rx_pool(adapter, &adapter->rx_pool[scrq_num]);
 
 	if (frames_processed < budget) {
 		enable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]);

^ permalink raw reply related

* [PATCH net-next 09/11] ibmvnic: Reset the CRQ queue during driver reset
From: Nathan Fontenot @ 2017-05-26 14:31 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

When a driver reset operation occurs there is not a need to release
the CRQ resources and re-allocate them. Instead a reset of the CRQ
will suffice.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 760352f..b9b0c69 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1260,7 +1260,6 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 
 		release_resources(adapter);
 		release_sub_crqs(adapter);
-		release_crq_queue(adapter);
 
 		rc = ibmvnic_init(adapter);
 		if (rc)
@@ -3517,7 +3516,14 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
 	unsigned long timeout = msecs_to_jiffies(30000);
 	int rc;
 
-	rc = init_crq_queue(adapter);
+	if (adapter->resetting) {
+		rc = ibmvnic_reset_crq(adapter);
+		if (!rc)
+			rc = vio_enable_interrupts(adapter->vdev);
+	} else {
+		rc = init_crq_queue(adapter);
+	}
+
 	if (rc) {
 		dev_err(dev, "Couldn't initialize crq. rc=%d\n", rc);
 		return rc;

^ permalink raw reply related

* [PATCH net-next 10/11] ibmvnic: Reset tx/rx pools on driver reset
From: Nathan Fontenot @ 2017-05-26 14:31 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

When resetting the ibmvnic driver there is not a need to release
and re-allocate the resources for the tx and rx pools. These
resources can just be reset to avoid the re-allocations.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   71 ++++++++++++++++++++++++++++++++++--
 1 file changed, 67 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index b9b0c69..5661a04 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -163,6 +163,16 @@ static long h_reg_sub_crq(unsigned long unit_address, unsigned long token,
 	return rc;
 }
 
+static void reset_long_term_buff(struct ibmvnic_adapter *adapter,
+				 struct ibmvnic_long_term_buff *ltb)
+{
+	memset(ltb->buff, 0, ltb->size);
+
+	init_completion(&adapter->fw_done);
+	send_request_map(adapter, ltb->addr, ltb->size, ltb->map_id);
+	wait_for_completion(&adapter->fw_done);
+}
+
 static int alloc_long_term_buff(struct ibmvnic_adapter *adapter,
 				struct ibmvnic_long_term_buff *ltb, int size)
 {
@@ -352,6 +362,32 @@ static int init_stats_token(struct ibmvnic_adapter *adapter)
 	return 0;
 }
 
+static int reset_rx_pools(struct ibmvnic_adapter *adapter)
+{
+	struct ibmvnic_rx_pool *rx_pool;
+	int rx_scrqs;
+	int i, j;
+
+	rx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_rxadd_subcrqs);
+	for (i = 0; i < rx_scrqs; i++) {
+		rx_pool = &adapter->rx_pool[i];
+
+		reset_long_term_buff(adapter, &rx_pool->long_term_buff);
+
+		for (j = 0; j < rx_pool->size; j++)
+			rx_pool->free_map[j] = j;
+
+		memset(rx_pool->rx_buff, 0,
+		       rx_pool->size * sizeof(struct ibmvnic_rx_buff));
+
+		atomic_set(&rx_pool->available, 0);
+		rx_pool->next_alloc = 0;
+		rx_pool->next_free = 0;
+	}
+
+	return 0;
+}
+
 static void release_rx_pools(struct ibmvnic_adapter *adapter)
 {
 	struct ibmvnic_rx_pool *rx_pool;
@@ -453,6 +489,32 @@ static int init_rx_pools(struct net_device *netdev)
 	return 0;
 }
 
+static int reset_tx_pools(struct ibmvnic_adapter *adapter)
+{
+	struct ibmvnic_tx_pool *tx_pool;
+	int tx_scrqs;
+	int i, j;
+
+	tx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_txsubm_subcrqs);
+	for (i = 0; i < tx_scrqs; i++) {
+		tx_pool = &adapter->tx_pool[i];
+
+		reset_long_term_buff(adapter, &tx_pool->long_term_buff);
+
+		memset(tx_pool->tx_buff, 0,
+		       adapter->req_tx_entries_per_subcrq *
+		       sizeof(struct ibmvnic_tx_buff));
+
+		for (j = 0; j < adapter->req_tx_entries_per_subcrq; j++)
+			tx_pool->free_map[j] = j;
+
+		tx_pool->consumer_index = 0;
+		tx_pool->producer_index = 0;
+	}
+
+	return 0;
+}
+
 static void release_tx_pools(struct ibmvnic_adapter *adapter)
 {
 	struct ibmvnic_tx_pool *tx_pool;
@@ -1258,7 +1320,6 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 		 */
 		adapter->state = VNIC_PROBED;
 
-		release_resources(adapter);
 		release_sub_crqs(adapter);
 
 		rc = ibmvnic_init(adapter);
@@ -1277,9 +1338,11 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 			return 0;
 		}
 
-		rtnl_lock();
-		rc = init_resources(adapter);
-		rtnl_unlock();
+		rc = reset_tx_pools(adapter);
+		if (rc)
+			return rc;
+
+		rc = reset_rx_pools(adapter);
 		if (rc)
 			return rc;
 

^ permalink raw reply related

* [PATCH net-next 11/11] ibmvnic: Reset sub-crqs during driver reset
From: Nathan Fontenot @ 2017-05-26 14:31 UTC (permalink / raw)
  To: netdev, tlfalcon, jallen
In-Reply-To: <20170526142523.63648.62938.stgit@ltcalpine2-lp14.aus.stglabs.ibm.com>

When the ibmvnic driver is resetting, we can just reset the sub crqs
instead of releasing all of their resources and re-allocting them.

Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c |   46 ++++++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 5661a04..8dcf580 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1320,8 +1320,6 @@ static int do_reset(struct ibmvnic_adapter *adapter,
 		 */
 		adapter->state = VNIC_PROBED;
 
-		release_sub_crqs(adapter);
-
 		rc = ibmvnic_init(adapter);
 		if (rc)
 			return 0;
@@ -1728,6 +1726,45 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
 
 /* Routines for managing CRQs/sCRQs  */
 
+static int reset_one_sub_crq_queue(struct ibmvnic_adapter *adapter,
+				   struct ibmvnic_sub_crq_queue *scrq)
+{
+	int rc;
+
+	if (scrq->irq) {
+		free_irq(scrq->irq, scrq);
+		irq_dispose_mapping(scrq->irq);
+		scrq->irq = 0;
+	}
+
+	memset(scrq->msgs, 0, 2 * PAGE_SIZE);
+	scrq->cur = 0;
+
+	rc = h_reg_sub_crq(adapter->vdev->unit_address, scrq->msg_token,
+			   4 * PAGE_SIZE, &scrq->crq_num, &scrq->hw_irq);
+	return rc;
+}
+
+static int reset_sub_crq_queues(struct ibmvnic_adapter *adapter)
+{
+	int i, rc;
+
+	for (i = 0; i < adapter->req_tx_queues; i++) {
+		rc = reset_one_sub_crq_queue(adapter, adapter->tx_scrq[i]);
+		if (rc)
+			return rc;
+	}
+
+	for (i = 0; i < adapter->req_rx_queues; i++) {
+		rc = reset_one_sub_crq_queue(adapter, adapter->rx_scrq[i]);
+		if (rc)
+			return rc;
+	}
+
+	rc = init_sub_crq_irqs(adapter);
+	return rc;
+}
+
 static void release_sub_crq_queue(struct ibmvnic_adapter *adapter,
 				  struct ibmvnic_sub_crq_queue *scrq)
 {
@@ -3607,7 +3644,10 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
 		return -1;
 	}
 
-	rc = init_sub_crqs(adapter);
+	if (adapter->resetting)
+		rc = reset_sub_crq_queues(adapter);
+	else
+		rc = init_sub_crqs(adapter);
 	if (rc) {
 		dev_err(dev, "Initialization of sub crqs failed\n");
 		release_crq_queue(adapter);

^ permalink raw reply related

* Re: please revert. Was: [for-next 4/6] net/mlx5: FPGA, Add basic support for Innova
From: David Miller @ 2017-05-26 14:51 UTC (permalink / raw)
  To: alexei.starovoitov-Re5JQEeQqe8AvxtiuMwx3w
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20170526044057.qpk3stulth5tfxcx@ast-mbp>

From: Alexei Starovoitov <alexei.starovoitov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date: Thu, 25 May 2017 21:40:59 -0700

> On Fri, May 26, 2017 at 12:13:27AM -0400, David Miller wrote:
>> From: Alexei Starovoitov <alexei.starovoitov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>> Date: Thu, 25 May 2017 20:58:32 -0700
>> 
>> > Dave, please revert this Innova fpga stuff.
>> > I think you pushed it by accident, since it was mixed with
>> > other valid changes.
>> > The discussion didn't conclude.
>> > Myself and Jes are clearly against such changes.
>> > It definitely needs more discussion and wider consensus.
>> 
>> Why don't you finish your discussion, then I can revert or leave it in
>> there?
> 
> Not really. What you're saying is 'shut up. mellanox can do
> whatever they like as long as it's hidden behind pcie id'.

No, what I'm saying is, discuss things.

And if in the end you agree with Mellanox, we don't have flapping of
the change in and out of the tree over and over.

My understanding is that this FPGA offloads processing the data
stream, which in a way is not much different than JIT'ing eBPF
onto Netronome cpus. :-)

Maybe the programming interface is different, maybe all the algorithms
are implemented in discrete ASICs, but effect is quite similar.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" 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] net_sched: only create filter chains for new filters/actions
From: David Miller @ 2017-05-26 14:54 UTC (permalink / raw)
  To: jiri; +Cc: xiyou.wangcong, netdev, jhs, jiri
In-Reply-To: <20170526055352.GA1898@nanopsycho>

From: Jiri Pirko <jiri@resnulli.us>
Date: Fri, 26 May 2017 07:53:52 +0200

> Thu, May 25, 2017 at 06:14:56PM CEST, davem@davemloft.net wrote:
>>From: Cong Wang <xiyou.wangcong@gmail.com>
>>Date: Tue, 23 May 2017 09:42:37 -0700
>>
>>> tcf_chain_get() always creates a new filter chain if not found
>>> in existing ones. This is totally unnecessary when we get or
>>> delete filters, new chain should be only created for new filters
>>> (or new actions).
>>> 
>>> Fixes: 5bc1701881e3 ("net: sched: introduce multichain support for filters")
>>> Cc: Jamal Hadi Salim <jhs@mojatatu.com>
>>> Cc: Jiri Pirko <jiri@mellanox.com>
>>> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
>>
>>Indeed, get and delete requests should not create new objects, ever.
>>
>>I have pretty much no idea why Jiri is making such a big fuss about
>>this change, to be quite honest. :-)
> 
> Because it makes already hard to read code even worse, for *no* benefit.
> That's why.

Jiri, if you say the same thing 100 times, it doesn't help anyone
understand your arguments any better.

Creating new objects when a GET or a DEL is requested is flat out
wrong.

And Cong is fixing that.

And I also didn't find the boolean logic hard to understand at all.

It is in fact a very common pattern to pass a "create" boolean into
lookup functions, to tell them whether to create a new object on
lookup failure or not.  And then also to control that boolean via
what kind of netlink request we are processing.

So you tell me what's so bad about his change given the above?

Give me details and real facts, like I just did, rather than vague
statements about "benefit" and "hard to read".

Thank you.

^ permalink raw reply

* Re: [PATCH v2 net-next 1/3] perf, bpf: Add BPF support to all perf_event types
From: David Miller @ 2017-05-26 14:55 UTC (permalink / raw)
  To: ast; +Cc: peterz, bgregg, daniel, qinteng, netdev, linux-kernel
In-Reply-To: <20170526055549.557818-2-ast@fb.com>

From: Alexei Starovoitov <ast@fb.com>
Date: Thu, 25 May 2017 22:55:47 -0700

> +	if (event->attach_state & PERF_ATTACH_TASK)
> +		goto err_out;

The attach_state member only exists when PERF_EVENTS is enabled.

^ permalink raw reply

* Re: [RFC] skbuff: introduce skb_put_zero()
From: David Miller @ 2017-05-26 14:58 UTC (permalink / raw)
  To: johannes-cdvu00un1VgdHxzADdlk8Q
  Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
	netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1495781929.2572.0.camel-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>

From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
Date: Fri, 26 May 2017 08:58:49 +0200

> On Thu, 2017-05-25 at 13:01 -0400, David Miller wrote:
>> From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
>> Date: Wed, 24 May 2017 09:07:47 +0200
>> 
>> > From: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>> > 
>> > This pattern was introduced a number of times in mac80211 just now,
>> > and since it's present in a number of other places it makes sense
>> > to add a little helper for it.
>> > 
>> > The transformations of all code were done with the following
>> spatch:
> [...]
>> > NB: the patch won't apply to net-next because a few of the mac80211
>> >     users don't exist there yet
>> 
>> Acked-by: David S. Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
>> 
>> No objections, feel free to push this in via your mac80211 tree.
> 
> Do you think I should include the conversions in other drivers, or
> would you prefer to get those as a separate patch later?

Probably better to keep that as a separate patch.

^ permalink raw reply

* Re: [patch net-next] net/sched: let chain_get to figure out the return value
From: David Miller @ 2017-05-26 14:59 UTC (permalink / raw)
  To: jiri; +Cc: netdev, jhs, xiyou.wangcong, mlxsw
In-Reply-To: <20170526072129.11075-1-jiri@resnulli.us>

From: Jiri Pirko <jiri@resnulli.us>
Date: Fri, 26 May 2017 09:21:29 +0200

> From: Jiri Pirko <jiri@mellanox.com>
> 
> Alhough I believe that this create/nocreate dance is completelly
> pointless, at least make it a bit nicer and easier to read.
> Push the decision on what error value is returned to chain_get function
> and use ERR macros.
> 
> Signed-off-by: Jiri Pirko <jiri@mellanox.com>

No, this is quite worse.

You're leaving pointer error values in structures.  That's extremely
error prone.

And as stated in the other thread, I don't think Cong's logic is strange
or hard to understand at all.

^ permalink raw reply

* Re: [PATCH net-next v2 0/6] nfp: devlink port implementation
From: David Miller @ 2017-05-26 15:00 UTC (permalink / raw)
  To: jakub.kicinski; +Cc: netdev, jiri, oss-drivers
In-Reply-To: <20170526080336.32689-1-jakub.kicinski@netronome.com>

From: Jakub Kicinski <jakub.kicinski@netronome.com>
Date: Fri, 26 May 2017 01:03:30 -0700

> This series adds basic devlink support.  The operations we can perform
> are port show and port split/unsplit.
> 
> v2:
> Register devlink first, and then register all the ports.  Port {,un}split
> searches the port list, which is protected by a mutex.  If port split
> is requested before ports are registered we will simply not find the port
> and return -EINVAL.

Great, I'll give Jiri a chance to review this.

^ 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