All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Yang <weiyang@linux.vnet.ibm.com>
To: Or Gerlitz <ogerlitz@mellanox.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, amirv@mellanox.com,
	weiyang@linux.vnet.ibm.com, bhelgaas@google.com,
	Jack Morgenstein <jackm@dev.mellanox.co.il>
Subject: Re: [PATCH net] net/mlx4_core: Fix Oops on reboot when SRIOV VFs are probed into the Host
Date: Mon, 2 Jun 2014 22:29:47 +0800	[thread overview]
Message-ID: <20140602142947.GB28523@richard> (raw)
In-Reply-To: <1401619783-23659-1-git-send-email-ogerlitz@mellanox.com>

On Sun, Jun 01, 2014 at 01:49:43PM +0300, Or Gerlitz wrote:
>From: Jack Morgenstein <jackm@dev.mellanox.co.il>
>
>Commit befdf89 did not take into account the case where the Host
>driver is being unloaded. In this case, pci_get_drvdata for the VF

In my mind, unloading PF's driver when there is alive VFs is not allowed.
Quoted in driver code:

	/* in SRIOV it is not allowed to unload the pf's
	 * driver while there are alive vf's */
	if (mlx4_is_master(dev) && mlx4_how_many_lives_vf(dev))
		printk(KERN_ERR "Removing PF when there are assigned VF's !!!\n");

Actually, I don't understand this restriction clearly. Maybe my understanding
of alive VF is not correct.

And in your code, unload PF's driver would call pci_disable_sriov() which will
destroy the VFs. While in your test, the VF's driver is still there?

>remove_one call may return NULL, so that dereferencing the priv
>struct results in a kernel oops.

Sorry for my poor mind, I still can't understand this situation.
Would you describe the situation more? You are unloading PF's driver in Host
at first, and then try to release the VF's driver?

>
>The fix is to also test that the dev pointer returned by
>pci_get_drvdata is non-NULL.
>
>Fixes: befdf89 ("preserve pcd_dev_data after __mlx4_remove_one()")
>Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
>Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
>---
> drivers/net/ethernet/mellanox/mlx4/main.c |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
>diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
>index c187d74..a6ae089 100644
>--- a/drivers/net/ethernet/mellanox/mlx4/main.c
>+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
>@@ -2629,7 +2629,7 @@ static void __mlx4_remove_one(struct pci_dev *pdev)
> 	int               pci_dev_data;
> 	int p;
>
>-	if (priv->removed)
>+	if (!dev || priv->removed)
> 		return;

This fix looks good to me.

As I remembered, I had this check in my first version, but I removed the check
on dev based on the suggestion from Bjorn. Since I agreed that there is no
chance for dev to be NULL. Bjorn, seems we are not correct :(

>
> 	pci_dev_data = priv->pci_dev_data;
>-- 
>1.7.1

-- 
Richard Yang
Help you, Help me

  parent reply	other threads:[~2014-06-02 14:29 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-01 10:49 [PATCH net] net/mlx4_core: Fix Oops on reboot when SRIOV VFs are probed into the Host Or Gerlitz
2014-06-01 16:41 ` Sergei Shtylyov
2014-06-01 19:59   ` Or Gerlitz
2014-06-02 14:29 ` Wei Yang [this message]
2014-06-02 16:10   ` Bjorn Helgaas
2014-06-03  0:58     ` David Miller
2014-06-03  2:00     ` Wei Yang
2014-06-03  8:15     ` Or Gerlitz
2014-06-03  8:40       ` Wei Yang
2014-06-04  9:50       ` Wei Yang
2014-06-06  2:52       ` Wei Yang
2014-06-08  9:18         ` Or Gerlitz
2014-06-08  9:16     ` Or Gerlitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140602142947.GB28523@richard \
    --to=weiyang@linux.vnet.ibm.com \
    --cc=amirv@mellanox.com \
    --cc=bhelgaas@google.com \
    --cc=davem@davemloft.net \
    --cc=jackm@dev.mellanox.co.il \
    --cc=netdev@vger.kernel.org \
    --cc=ogerlitz@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.