From: Jarod Wilson <jarod@redhat.com>
To: Edward Cree <ecree@solarflare.com>
Cc: linux-kernel@vger.kernel.org,
Solarflare linux maintainers <linux-net-drivers@solarflare.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH] ethernet/sfc: mark state UNINIT after unregister
Date: Mon, 15 Jun 2015 12:58:39 -0400 [thread overview]
Message-ID: <557F043F.5020908@redhat.com> (raw)
In-Reply-To: <557ED7DE.7080407@solarflare.com>
On 6/15/2015 9:49 AM, Edward Cree wrote:
> On 12/06/15 19:51, Jarod Wilson wrote:
>> Without this change, modprobe -r sfc hits the BUG_ON() in
>> efx_pci_remove_main(). Best as I can tell, this was just an oversight,
>> efx->state gets set to STATE_UNINIT in the error path of
>> efx_register_netdev() just after unregister_netdevice(), and the same
>> should happen in efx_unregister_netdev() after its unregister_netdevice()
>> call. Now I can load and unload no problem.
>>
>> CC: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
>> CC: netdev@vger.kernel.org
>> Signed-off-by: Jarod Wilson <jarod@redhat.com>
>> ---
>> drivers/net/ethernet/sfc/efx.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
>> index 0c42ed9..f3eaade 100644
>> --- a/drivers/net/ethernet/sfc/efx.c
>> +++ b/drivers/net/ethernet/sfc/efx.c
>> @@ -2448,6 +2448,7 @@ static void efx_unregister_netdev(struct efx_nic *efx)
>> #endif
>> device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_type);
>> unregister_netdev(efx->net_dev);
>> + efx->state = STATE_UNINIT;
>> }
>> }
>>
> This isn't quite the right place, efx->state changes are supposed to be serialised by the RTNL lock.
> Our out-of-tree driver has this in efx_pci_remove, just after the efx_disable_interrupts(efx) call and before rtnl_unlock() (see patch below). I'd suggest that's the change we should make, but I haven't tested it yet.
>
> For reference, the "oversight" was in my e7fef9b45ae188066bb6eb3dde8310d33c2f7d5e "sfc: add sysfs entry to control MCDI tracing" which accidentally took our out-of-tree version of efx_unregister_netdev(). Before that the code was as in Jarod's patch.
Ah, I did notice the rtnl_lock calls before some other occasions where
state was set, but was thinking the lock might not be necessary if we're
that far along the teardown path with the netdev already unregistered.
You know the code far better than I do though, and your version works
just fine here too.
Feel free to add this (along with your signed-off-by, of course):
Reviewed-by: Jarod Wilson <jarod@redhat.com>
--
Jarod Wilson
jarod@redhat.com
prev parent reply other threads:[~2015-06-15 16:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-12 18:51 [PATCH] ethernet/sfc: mark state UNINIT after unregister Jarod Wilson
2015-06-15 13:49 ` Edward Cree
2015-06-15 16:58 ` Jarod Wilson [this message]
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=557F043F.5020908@redhat.com \
--to=jarod@redhat.com \
--cc=ecree@solarflare.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-net-drivers@solarflare.com \
--cc=netdev@vger.kernel.org \
/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).