netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wei Yang <weiyang@linux.vnet.ibm.com>
To: Or Gerlitz <or.gerlitz@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	David Miller <davem@davemloft.net>,
	Wei Yang <weiyang@linux.vnet.ibm.com>,
	netdev <netdev@vger.kernel.org>, Amir Vadai <amirv@mellanox.com>,
	Jack Morgenstein <jackm@dev.mellanox.co.il>,
	Tal Alon <talal@mellanox.com>,
	Yevgeny Petrilin <yevgenyp@mellanox.com>
Subject: Re: [PATCH net] net/mlx4_core: Fix Oops on reboot when SRIOV VFs are probed into the Host
Date: Fri, 6 Jun 2014 10:52:00 +0800	[thread overview]
Message-ID: <20140606025200.GA6981@richard> (raw)
In-Reply-To: <CAJZOPZK94-hZfBtpjFMEd5m1STRxbs-wTYsKB5SoC=zES5XfPg@mail.gmail.com>

On Tue, Jun 03, 2014 at 11:15:43AM +0300, Or Gerlitz wrote:
>On Mon, Jun 2, 2014 at 7:10 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
>> Writing a driver is not an empirical process of trying things to see
>> what works.  You need to actively design a consistent structure so you
>> know why and when things are safe.  I object to gratuitous "dev ==
>> NULL" checks because often they are just a way of patching up a driver
>> design that isn't well thought-out.
>
>Bjorn, 1st and most -- Agreed.
>
>Next, to be precise, the use case of rebooting the host while the
>driver was loaded in SRIOV mode and NO VFs probed to VMs worked before
>commit befdf89 and is now broken.
>
>Reading further your response, I understand that the code was probably
>using a sort of hackish branching to make that to happen, and you
>suggest we re-write that section properly so it can serve well when
>(hopefully soon) implemenet
>sriov_configure and possibly also suspend/resume, point taken.
>
>Dave, as for this patch, again, the regression of inability to reboot
>the host node
>while the driver is loaded exists in the latest upstream code as of
>befdf89 / 3.15-rc1
>
>Now, taking into account that 3.15 is after rc8 and the IL devel team
>has a holiday this week, I don't see us coming in time with a more
>deeper fix for 3.15, so maybe you can eventaully go and merge this one
>liner for 3.15?
>
>Or.
>

Hi, Or,

After understanding the root cause of this error, I come up with another kind
of fix to this case. Verification has been done on my machine, it looks good
to me. If your team could verify this, it would be better :-)

Hope you like it, and any problem please let me know :-)

>From 3dec04518a3a373c2d2cf2c4088fd5bbf36b4b7b Mon Sep 17 00:00:00 2001
From: Wei Yang <weiyang@linux.vnet.ibm.com>
Date: Fri, 6 Jun 2014 10:16:45 +0800
Subject: [PATCH] net/mlx4_core: keep only one driver entry release mlx4_priv

After commit befdf89(net/mlx4_core: Preserve pci_dev_data after
__mlx4_remove_one()), there would be two driver entry which will try to
release mlx4_priv, .shutdown and .remove. This will leads to a concequence that
the mlx4_prive will be released twice in some case and trigger an oops "Oops:
Kernel access of bad area".

One case for this error is doing reboot or kexec when VFs are enabled. During
reboot or kexec, .shutdown will be called. When VFs are shutdown at first and
then PF, PF will trigger VFs' .remove since VFs still have driver attached.

This patch resolve this case by keeping only one driver entry to release the
mlx4_priv.

Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
CC: Or Gerlitz <ogerlitz@mellanox.com>
CC: Jack Morgenstein <jackm@dev.mellanox.co.il>
CC: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/net/ethernet/mellanox/mlx4/main.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 7cf9dad..70a1356 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -2799,7 +2799,7 @@ static struct pci_driver mlx4_driver = {
 	.name		= DRV_NAME,
 	.id_table	= mlx4_pci_table,
 	.probe		= mlx4_init_one,
-	.shutdown	= mlx4_remove_one,
+	.shutdown	= __mlx4_remove_one,
 	.remove		= mlx4_remove_one,
 	.err_handler    = &mlx4_err_handler,
 };
-- 
1.7.9.5


-- 
Richard Yang
Help you, Help me

  parent reply	other threads:[~2014-06-06  2:52 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
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 [this message]
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=20140606025200.GA6981@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=or.gerlitz@gmail.com \
    --cc=talal@mellanox.com \
    --cc=yevgenyp@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).