From: Peter Hurley <peter@hurleysoftware.com>
To: Tejun Heo <tj@kernel.org>
Cc: laijs@cn.fujitsu.com, linux-kernel@vger.kernel.org,
Stefan Richter <stefanr@s5r6.in-berlin.de>,
linux1394-devel@lists.sourceforge.net,
Chris Boot <bootc@bootc.net>,
linux-scsi@vger.kernel.org, target-devel@vger.kernel.org
Subject: Re: [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK
Date: Fri, 21 Feb 2014 11:53:46 -0500 [thread overview]
Message-ID: <5307849A.9050209@hurleysoftware.com> (raw)
In-Reply-To: <20140221130614.GH6897@htj.dyndns.org>
Hi Tejun,
On 02/21/2014 08:06 AM, Tejun Heo wrote:
> Hello,
>
> On Fri, Feb 21, 2014 at 07:51:48AM -0500, Peter Hurley wrote:
>> I think the vast majority of kernel code which uses the workqueue
>> assumes there is a memory ordering guarantee.
>
> Not really. Workqueues haven't even guaranteed non-reentrancy until
> recently, forcing everybody to lock explicitly in the work function.
> I don't think there'd be many, if any, use cases which depend on
> ordering guarantee on duplicate queueing.
I added some in 3.12 :)
>> Another way to look at this problem is that process_one_work()
>> doesn't become the existing instance _until_ PENDING is cleared.
>
> Sure, having that guarantee definitely is nicer and all we need seems
> to be mb_after_unlock in the execution path. Please feel free to
> submit a patch.
Ok, I can do that. But AFAIK it'll have to be an smp_rmb(); there is
no mb__after unlock.
[ After thinking about it some, I don't think preventing speculative
writes before clearing PENDING if useful or necessary, so that's
why I'm suggesting only the rmb. ]
>>> add such guarantee, not sure how much it'd matter but it's not like
>>> it's gonna cost a lot either.
>>>
>>> This doesn't have much to do with the current series tho. In fact,
>>> PREPARE_WORK can't ever be made to give such guarantee.
>>
>> Yes, I agree that PREPARE_DELAYED_WORK was also broken usage with the
>> same problem. [And there are other bugs in that firewire device work
>> code which I'm working on.]
>>
>>> The function pointer has to fetched before clearing of PENDING.
>>
>> Why?
>>
>> As long as the load takes place within the pool->lock, I don't think
>> it matters (especially now PREPARE_WORK is removed).
>
> Hmmm... I was talking about PREPARE_WORK(). Clearing PENDING means
> that the work item is released from the worker context and may be
> freed or reused at any time (hmm... this may not be true anymore as
> non-syncing variants of cancel_work are gone), so clearing PENDING
> should be the last access to the work item and thus we can't use that
> as the barrier event for fetching its work function.
Yeah, it seems like the work item lifetime is at least guaranteed
while either PENDING is set _or_ while the pool->lock is held
after PENDING is cleared.
Regards,
Peter Hurley
next prev parent reply other threads:[~2014-02-21 16:53 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-20 20:44 [PATCHSET wq/for-3.15] workqueue: remove PREPARE_[DELAYED_]WORK() Tejun Heo
2014-02-20 20:44 ` [PATCH 1/9] wireless/rt2x00: don't use PREPARE_WORK in rt2800usb.c Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 2/9] ps3-vuart: don't use PREPARE_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-02-21 23:19 ` Geoff Levand
2014-02-21 23:19 ` Geoff Levand
2014-02-20 20:44 ` [PATCH 3/9] floppy: don't use PREPARE_[DELAYED_]WORK Tejun Heo
2014-02-21 9:37 ` Jiri Kosina
2014-02-20 20:44 ` [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-02-21 1:44 ` Peter Hurley
2014-02-21 1:59 ` Tejun Heo
2014-02-21 2:07 ` Peter Hurley
2014-02-21 2:07 ` Peter Hurley
2014-02-21 2:13 ` Tejun Heo
2014-02-21 5:13 ` Peter Hurley
2014-02-21 10:03 ` Tejun Heo
2014-02-21 12:51 ` Peter Hurley
2014-02-21 12:51 ` Peter Hurley
2014-02-21 13:06 ` Tejun Heo
2014-02-21 16:53 ` Peter Hurley [this message]
2014-02-21 16:57 ` Tejun Heo
2014-02-21 23:01 ` Peter Hurley
2014-02-21 23:18 ` Tejun Heo
2014-02-21 23:46 ` Peter Hurley
2014-02-22 14:38 ` Tejun Heo
2014-02-22 14:38 ` Tejun Heo
2014-02-22 14:48 ` Peter Hurley
2014-02-22 18:43 ` James Bottomley
2014-02-22 18:48 ` Peter Hurley
2014-02-22 18:48 ` Peter Hurley
2014-02-22 18:52 ` James Bottomley
2014-02-22 19:03 ` Peter Hurley
2014-02-22 19:03 ` Peter Hurley
2014-02-23 1:23 ` memory-barriers.txt again (was Re: [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK) Stefan Richter
2014-02-23 16:37 ` Paul E. McKenney
2014-02-23 16:37 ` Paul E. McKenney
2014-02-23 20:35 ` Peter Hurley
2014-02-23 23:50 ` Paul E. McKenney
2014-02-24 0:09 ` Peter Hurley
2014-02-24 16:26 ` Paul E. McKenney
2014-02-24 16:26 ` Paul E. McKenney
2014-02-24 0:32 ` Stefan Richter
2014-02-24 16:27 ` Paul E. McKenney
2014-02-23 20:05 ` [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK James Bottomley
2014-02-23 22:32 ` Peter Hurley
2014-02-21 20:45 ` Stefan Richter
2014-02-21 20:45 ` Stefan Richter
2014-03-05 21:34 ` Stefan Richter
2014-03-07 15:18 ` Tejun Heo
2014-03-07 15:26 ` [PATCH UPDATED " Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 5/9] usb: " Tejun Heo
2014-02-20 20:59 ` Greg Kroah-Hartman
2014-02-21 15:06 ` Alan Stern
2014-02-21 15:07 ` Tejun Heo
2014-02-22 14:59 ` [PATCH v2 " Tejun Heo
2014-02-22 15:14 ` Alan Stern
2014-02-22 15:20 ` Peter Hurley
2014-02-22 15:37 ` Tejun Heo
2014-02-22 23:03 ` Alan Stern
2014-02-23 4:29 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 6/9] nvme: don't use PREPARE_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 7/9] afs: " Tejun Heo
2014-02-20 22:00 ` David Howells
2014-02-20 22:46 ` Tejun Heo
2014-03-07 15:27 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 8/9] staging/fwserial: " Tejun Heo
2014-02-21 15:13 ` Peter Hurley
2014-02-20 20:44 ` [PATCH 9/9] workqueue: remove PREPARE_[DELAYED_]WORK() Tejun Heo
2014-03-07 15:27 ` Tejun Heo
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=5307849A.9050209@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=bootc@bootc.net \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux1394-devel@lists.sourceforge.net \
--cc=stefanr@s5r6.in-berlin.de \
--cc=target-devel@vger.kernel.org \
--cc=tj@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.