From: Greg KH <gregkh@suse.de>
To: Haiyang Zhang <haiyangz@microsoft.com>
Cc: "'linux-kernel@vger.kernel.org'" <linux-kernel@vger.kernel.org>,
"'devel@driverdev.osuosl.org'" <devel@driverdev.osuosl.org>,
"'virtualization@lists.osdl.org'" <virtualization@lists.osdl.org>,
Hank Janssen <hjanssen@microsoft.com>
Subject: Re: [PATCH 1/2] staging: hv: Fix race condition in hv_utils module initialization.
Date: Wed, 19 May 2010 15:21:05 -0700 [thread overview]
Message-ID: <20100519222104.GA19365@suse.de> (raw)
In-Reply-To: <1FB5E1D5CA062146B38059374562DF7266B8951F@TK5EX14MBXC128.redmond.corp.microsoft.com>
On Wed, May 19, 2010 at 10:12:51PM +0000, Haiyang Zhang wrote:
> > > Actually, we already assign a default callback function,
> > chn_cb_negotiate(),
> > > when the channels are opened in vmbus module. It's a real function
> > and can
> > > handle common negotiation messages.
> >
> > Then why don't you use it here?
>
> When vmbus is loaded and channel is offered from HyperV host, the default
> callback function, chn_cb_negotiate(), is assigned to the function ptr, and
> used to do basic responses of negotiation messages.
Great, so that works.
> After hv_utils modules is loaded the callback function ptr is overridden by
> a specialized function in hv_utils module, and handles each feature (shutdown,
> timesync, etc.) differently.
That's the problem. Provide a "correct" interface to properly change
the callback function. Just setting function pointers in a random
manner is ripe for all sorts of bad problems, don't you agree? Heck, I
don't see any locking happening here which could cause messages to be
handled when things are only half-way set up. Also, what's to say your
function pointer write is atomic in the first place :)
In short, use proper locking for something like this.
> > I still think there's a real problem somewhere else in the architecture
> > if such a sleep is necessary...
> >
> > Is the issue that the modprobe of the hv_vmbus can return before the
> > bus
> > is really all set up and ready to go? If so, just fix that, then you
> > will not need any "sleep" calls anywhere, right?
>
> After vmbus is loaded, the channel offering will come from the host, then
> it initializes the channel. The channel offering can happen a little later
> after vmbus_init() is done and modprobe returns. So I think we should let
> vmbus_init function wait(sleep) until all channel offerings are received before
> returning. This will ensure all channels are ready before modprobe returns.
That sounds like a good idea.
thanks,
greg k-h
next prev parent reply other threads:[~2010-05-19 22:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-19 15:54 [PATCH 1/2] staging: hv: Fix race condition in hv_utils module initialization Haiyang Zhang
2010-05-19 16:10 ` Greg KH
2010-05-19 20:30 ` Haiyang Zhang
2010-05-19 20:39 ` Greg KH
2010-05-19 22:12 ` Haiyang Zhang
2010-05-19 22:21 ` Greg KH [this message]
-- strict thread matches above, loose matches on Subject: below --
2010-05-19 15:54 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=20100519222104.GA19365@suse.de \
--to=gregkh@suse.de \
--cc=devel@driverdev.osuosl.org \
--cc=haiyangz@microsoft.com \
--cc=hjanssen@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=virtualization@lists.osdl.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.