diff mbox

i40e: limit client interface to X722 hardware

Message ID 20170404143446.16359-1-sassmann@kpanic.de
State Changes Requested
Headers show

Commit Message

Stefan Assmann April 4, 2017, 2:34 p.m. UTC
The client interface is meant for X722 iWARP support. Modprobing i40iw
on systems with X710/XL710 NICs currently may crash the system. Adding a
check which limits client interface access to the appropriate hardware.

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 drivers/net/ethernet/intel/i40e/i40e_client.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

Comments

Mitch Williams April 4, 2017, 4:33 p.m. UTC | #1
> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
> Behalf Of Stefan Assmann
> Sent: Tuesday, April 04, 2017 7:35 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; davem@davemloft.net; Kirsher, Jeffrey T
> <jeffrey.t.kirsher@intel.com>; sassmann@kpanic.de
> Subject: [PATCH] i40e: limit client interface to X722 hardware
> 
> The client interface is meant for X722 iWARP support. Modprobing i40iw
> on systems with X710/XL710 NICs currently may crash the system. Adding a
> check which limits client interface access to the appropriate hardware.
> 
> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
> ---
>  drivers/net/ethernet/intel/i40e/i40e_client.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_client.c
> b/drivers/net/ethernet/intel/i40e/i40e_client.c
> index 191028b..6f873449 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_client.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_client.c
> @@ -525,15 +525,17 @@ static void i40e_client_release(struct i40e_client
> *client)
>  static void i40e_client_prepare(struct i40e_client *client)
>  {
>  	struct i40e_device *ldev;
> -	struct i40e_pf *pf;
> 
>  	mutex_lock(&i40e_device_mutex);
>  	list_for_each_entry(ldev, &i40e_devices, list) {
> -		pf = ldev->pf;
> -		i40e_client_add_instance(pf);
> -		/* Start the client subtask */
> -		pf->flags |= I40E_FLAG_SERVICE_CLIENT_REQUESTED;
> -		i40e_service_event_schedule(pf);
> +		struct i40e_pf *pf = ldev->pf;
> +
> +		if (pf->hw.mac.type == I40E_MAC_X722) {
> +			i40e_client_add_instance(pf);
> +			/* Start the client subtask */
> +			pf->flags |= I40E_FLAG_SERVICE_CLIENT_REQUESTED;
> +			i40e_service_event_schedule(pf);
> +		}
>  	}
>  	mutex_unlock(&i40e_device_mutex);
>  }
> --
> 2.9.3

Thanks for pointing this out, Stephan. I think that's not exactly the right way to do this check. Instead, we need to look at the IWARP flag. I'll get a patch out today to take care of it.

So consider this a thankful NAK.

-Mitch
Or Gerlitz April 4, 2017, 4:56 p.m. UTC | #2
On Tue, Apr 4, 2017 at 5:34 PM, Stefan Assmann <sassmann@kpanic.de> wrote:
> The client interface is meant for X722 iWARP support. Modprobing i40iw
> on systems with X710/XL710 NICs currently may crash the system.

just curious may or crash? and why?
Stefan Assmann April 4, 2017, 7:51 p.m. UTC | #3
On 04.04.2017 18:56, Or Gerlitz wrote:
> On Tue, Apr 4, 2017 at 5:34 PM, Stefan Assmann <sassmann@kpanic.de> wrote:
>> The client interface is meant for X722 iWARP support. Modprobing i40iw
>> on systems with X710/XL710 NICs currently may crash the system.
> 
> just curious may or crash? and why?

The backtrace I got was not really conclusive. The code is not meant to
be run on that hardware so I didn't bother to dig deeper.

  Stefan
Mitch Williams April 4, 2017, 10:51 p.m. UTC | #4
> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
> Behalf Of Stefan Assmann
> Sent: Tuesday, April 04, 2017 12:52 PM
> To: Or Gerlitz <gerlitz.or@gmail.com>
> Cc: intel-wired-lan@lists.osuosl.org; Linux Netdev List
> <netdev@vger.kernel.org>; David Miller <davem@davemloft.net>; Kirsher,
> Jeffrey T <jeffrey.t.kirsher@intel.com>
> Subject: Re: [PATCH] i40e: limit client interface to X722 hardware
> 
> On 04.04.2017 18:56, Or Gerlitz wrote:
> > On Tue, Apr 4, 2017 at 5:34 PM, Stefan Assmann <sassmann@kpanic.de> wrote:
> >> The client interface is meant for X722 iWARP support. Modprobing i40iw
> >> on systems with X710/XL710 NICs currently may crash the system.
> >
> > just curious may or crash? and why?
> 
> The backtrace I got was not really conclusive. The code is not meant to
> be run on that hardware so I didn't bother to dig deeper.
> 
>   Stefan

The i40iw module can't easily determine which hardware its loaded upon. So it assumes that we (i40e, that is) have handed it a handle to valid hardware. When the interface is opened, it starts reading and writing registers that are nonexistent on X710/XL710.

-Mitch
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/i40e/i40e_client.c b/drivers/net/ethernet/intel/i40e/i40e_client.c
index 191028b..6f873449 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_client.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_client.c
@@ -525,15 +525,17 @@  static void i40e_client_release(struct i40e_client *client)
 static void i40e_client_prepare(struct i40e_client *client)
 {
 	struct i40e_device *ldev;
-	struct i40e_pf *pf;
 
 	mutex_lock(&i40e_device_mutex);
 	list_for_each_entry(ldev, &i40e_devices, list) {
-		pf = ldev->pf;
-		i40e_client_add_instance(pf);
-		/* Start the client subtask */
-		pf->flags |= I40E_FLAG_SERVICE_CLIENT_REQUESTED;
-		i40e_service_event_schedule(pf);
+		struct i40e_pf *pf = ldev->pf;
+
+		if (pf->hw.mac.type == I40E_MAC_X722) {
+			i40e_client_add_instance(pf);
+			/* Start the client subtask */
+			pf->flags |= I40E_FLAG_SERVICE_CLIENT_REQUESTED;
+			i40e_service_event_schedule(pf);
+		}
 	}
 	mutex_unlock(&i40e_device_mutex);
 }