All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: David Miller <davem@davemloft.net>,
	kys@microsoft.com, haiyangz@microsoft.com,
	devel@linuxdriverproject.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net] net: hyperv: initialize link status correctly
Date: Mon, 27 Jan 2014 18:37:14 +0800	[thread overview]
Message-ID: <52E636DA.4030406@redhat.com> (raw)
In-Reply-To: <1390818638.2735.136.camel@deadeye.wl.decadent.org.uk>

On 01/27/2014 06:30 PM, Ben Hutchings wrote:
> On Mon, 2014-01-27 at 18:28 +0800, Jason Wang wrote:
>> On 01/27/2014 06:22 PM, Ben Hutchings wrote:
>>> On Mon, 2014-01-27 at 17:40 +0800, Jason Wang wrote:
>>>> On 01/27/2014 04:35 PM, David Miller wrote:
>>>>> From: Jason Wang <jasowang@redhat.com>
>>>>> Date: Mon, 27 Jan 2014 15:30:54 +0800
>>>>>
>>>>>> Call netif_carrier_on() after register_device(). Otherwise it won't work since
>>>>>> the device was still in NETREG_UNINITIALIZED state.
>>>>>>
>>>>>> Fixes a68f9614614749727286f675d15f1e09d13cb54a
>>>>>> (hyperv: Fix race between probe and open calls)
>>>>>>
>>>>>> Cc: Haiyang Zhang <haiyangz@microsoft.com>
>>>>>> Cc: K. Y. Srinivasan <kys@microsoft.com>
>>>>>> Reported-by: Di Nie <dnie@redhat.com>
>>>>>> Tested-by: Di Nie <dnie@redhat.com>
>>>>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>>>> A device up can occur at the moment you call register_netdevice(),
>>>>> therefore that up call can see the carrier as down and fail or
>>>>> similar.  So you really cannot resolve the carrier to be on in this
>>>>> way.
>>>> True, we need a workqueue to synchronize them.
>>> Whatever for?  All you need to do is:
>>>
>>> 	rtnl_lock();
>>> 	register_netdevice();
>>> 	netif_carrier_on();
>>> 	rtnl_unlock();
>>>
>>> It would be nice if we could make the current code work with a change in
>>> the core, though.
>>>
>>> Ben.
>>>
>> Looks like the link status interrupt may happen during this (after
>> netvsc_device_add() was called by rndis_filter_device_add()) without any
>> synchronization. This may lead a wrong link status here.
> Now I'm confused - if there's a link status interrupt, why are you
> setting the carrier on initially?
>
> Ben.
>

I realize that setting carrier on initially was a bug after David's
comment. So I think we need a workqueue.

WARNING: multiple messages have this Message-ID (diff)
From: Jason Wang <jasowang@redhat.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: netdev@vger.kernel.org, haiyangz@microsoft.com,
	linux-kernel@vger.kernel.org, devel@linuxdriverproject.org,
	David Miller <davem@davemloft.net>
Subject: Re: [PATCH net] net: hyperv: initialize link status correctly
Date: Mon, 27 Jan 2014 18:37:14 +0800	[thread overview]
Message-ID: <52E636DA.4030406@redhat.com> (raw)
In-Reply-To: <1390818638.2735.136.camel@deadeye.wl.decadent.org.uk>

On 01/27/2014 06:30 PM, Ben Hutchings wrote:
> On Mon, 2014-01-27 at 18:28 +0800, Jason Wang wrote:
>> On 01/27/2014 06:22 PM, Ben Hutchings wrote:
>>> On Mon, 2014-01-27 at 17:40 +0800, Jason Wang wrote:
>>>> On 01/27/2014 04:35 PM, David Miller wrote:
>>>>> From: Jason Wang <jasowang@redhat.com>
>>>>> Date: Mon, 27 Jan 2014 15:30:54 +0800
>>>>>
>>>>>> Call netif_carrier_on() after register_device(). Otherwise it won't work since
>>>>>> the device was still in NETREG_UNINITIALIZED state.
>>>>>>
>>>>>> Fixes a68f9614614749727286f675d15f1e09d13cb54a
>>>>>> (hyperv: Fix race between probe and open calls)
>>>>>>
>>>>>> Cc: Haiyang Zhang <haiyangz@microsoft.com>
>>>>>> Cc: K. Y. Srinivasan <kys@microsoft.com>
>>>>>> Reported-by: Di Nie <dnie@redhat.com>
>>>>>> Tested-by: Di Nie <dnie@redhat.com>
>>>>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>>>>> A device up can occur at the moment you call register_netdevice(),
>>>>> therefore that up call can see the carrier as down and fail or
>>>>> similar.  So you really cannot resolve the carrier to be on in this
>>>>> way.
>>>> True, we need a workqueue to synchronize them.
>>> Whatever for?  All you need to do is:
>>>
>>> 	rtnl_lock();
>>> 	register_netdevice();
>>> 	netif_carrier_on();
>>> 	rtnl_unlock();
>>>
>>> It would be nice if we could make the current code work with a change in
>>> the core, though.
>>>
>>> Ben.
>>>
>> Looks like the link status interrupt may happen during this (after
>> netvsc_device_add() was called by rndis_filter_device_add()) without any
>> synchronization. This may lead a wrong link status here.
> Now I'm confused - if there's a link status interrupt, why are you
> setting the carrier on initially?
>
> Ben.
>

I realize that setting carrier on initially was a bug after David's
comment. So I think we need a workqueue.

  reply	other threads:[~2014-01-27 10:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-27  7:30 [PATCH net] net: hyperv: initialize link status correctly Jason Wang
2014-01-27  8:35 ` David Miller
2014-01-27  8:35   ` David Miller
2014-01-27  9:40   ` Jason Wang
2014-01-27  9:40     ` Jason Wang
2014-01-27 10:22     ` Ben Hutchings
2014-01-27 10:22       ` Ben Hutchings
2014-01-27 10:28       ` Jason Wang
2014-01-27 10:28         ` Jason Wang
2014-01-27 10:30         ` Ben Hutchings
2014-01-27 10:30           ` Ben Hutchings
2014-01-27 10:37           ` Jason Wang [this message]
2014-01-27 10:37             ` Jason Wang
2014-01-27 16:05 ` Haiyang Zhang

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=52E636DA.4030406@redhat.com \
    --to=jasowang@redhat.com \
    --cc=ben@decadent.org.uk \
    --cc=davem@davemloft.net \
    --cc=devel@linuxdriverproject.org \
    --cc=haiyangz@microsoft.com \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 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.