Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-27 Thread Jarek Poplawski
On Fri, Apr 27, 2007 at 11:52:47AM +0400, Oleg Nesterov wrote: > On 04/27, Jarek Poplawski wrote: ... > > > Sorry, can't understand. done == 0 means that the queueing in progress, > > > this work should be placed on cwq->worklist very soon, most probably > > > right after we drop cwq->lock. > > >

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-27 Thread Oleg Nesterov
On 04/27, Jarek Poplawski wrote: > > On Thu, Apr 26, 2007 at 08:34:06PM +0400, Oleg Nesterov wrote: > > > > > > > else if (test_and_set_bit(WORK_STRUCT_PENDING, > > > > work_data_bits(work))) > > > > done = del_timer(>timer) > > > > >

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-27 Thread Oleg Nesterov
On 04/27, Jarek Poplawski wrote: On Thu, Apr 26, 2007 at 08:34:06PM +0400, Oleg Nesterov wrote: else if (test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) done = del_timer(dwork-timer) [...snip...]

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-27 Thread Jarek Poplawski
On Fri, Apr 27, 2007 at 11:52:47AM +0400, Oleg Nesterov wrote: On 04/27, Jarek Poplawski wrote: ... Sorry, can't understand. done == 0 means that the queueing in progress, this work should be placed on cwq-worklist very soon, most probably right after we drop cwq-lock. I think,

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Thu, Apr 26, 2007 at 08:44:36PM +0400, Oleg Nesterov wrote: > On 04/26, Jarek Poplawski wrote: > > > > On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: > > ... > > > > > > + spin_lock_irq(>lock); > > > > > > + /* CPU_DEAD in progress may change cwq */ > > > > >

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Thu, Apr 26, 2007 at 08:34:06PM +0400, Oleg Nesterov wrote: > On 04/26, Jarek Poplawski wrote: > > > > > void cancel_rearming_delayed_work(struct delayed_work *dwork) > > > { > > > struct work_struct *work = >work; > > > struct cpu_workqueue_struct *cwq =

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Oleg Nesterov
On 04/26, Jarek Poplawski wrote: > > On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: > ... > > > > > + spin_lock_irq(>lock); > > > > > + /* CPU_DEAD in progress may change cwq */ > > > > > + if (likely(cwq == get_wq_data(work))) { > > > > > +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Oleg Nesterov
On 04/26, Jarek Poplawski wrote: > > > void cancel_rearming_delayed_work(struct delayed_work *dwork) > > { > > struct work_struct *work = >work; > > struct cpu_workqueue_struct *cwq = get_wq_data(work); > > int done; > > I don't understand, why you

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: > On 04/25, Jarek Poplawski wrote: ... > > > > + spin_lock_irq(>lock); > > > > + /* CPU_DEAD in progress may change cwq */ > > > > + if (likely(cwq == get_wq_data(work))) { > > > > +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 06:47:59PM +0400, Oleg Nesterov wrote: > On 04/25, Oleg Nesterov wrote: > > > > On 04/25, Jarek Poplawski wrote: > > > > > > Probably this is also possible without timer i.e. > > > with queue_work. > > > > Yes, thanks. While adding cpu-hotplug check I

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 06:47:59PM +0400, Oleg Nesterov wrote: On 04/25, Oleg Nesterov wrote: On 04/25, Jarek Poplawski wrote: Probably this is also possible without timer i.e. with queue_work. Yes, thanks. While adding cpu-hotplug check I forgot to add

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: On 04/25, Jarek Poplawski wrote: ... + spin_lock_irq(cwq-lock); + /* CPU_DEAD in progress may change cwq */ + if (likely(cwq == get_wq_data(work))) { +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Oleg Nesterov
On 04/26, Jarek Poplawski wrote: void cancel_rearming_delayed_work(struct delayed_work *dwork) { struct work_struct *work = dwork-work; struct cpu_workqueue_struct *cwq = get_wq_data(work); int done; I don't understand, why you think cwq

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Oleg Nesterov
On 04/26, Jarek Poplawski wrote: On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: ... + spin_lock_irq(cwq-lock); + /* CPU_DEAD in progress may change cwq */ + if (likely(cwq == get_wq_data(work))) { +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Thu, Apr 26, 2007 at 08:34:06PM +0400, Oleg Nesterov wrote: On 04/26, Jarek Poplawski wrote: void cancel_rearming_delayed_work(struct delayed_work *dwork) { struct work_struct *work = dwork-work; struct cpu_workqueue_struct *cwq = get_wq_data(work);

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-26 Thread Jarek Poplawski
On Thu, Apr 26, 2007 at 08:44:36PM +0400, Oleg Nesterov wrote: On 04/26, Jarek Poplawski wrote: On Wed, Apr 25, 2007 at 04:47:14PM +0400, Oleg Nesterov wrote: ... + spin_lock_irq(cwq-lock); + /* CPU_DEAD in progress may change cwq */ + if

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Oleg Nesterov
On 04/25, Oleg Nesterov wrote: > > On 04/25, Jarek Poplawski wrote: > > > > Probably this is also possible without timer i.e. > > with queue_work. > > Yes, thanks. While adding cpu-hotplug check I forgot to add ->current_work > check, which is needed to actually implement this

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Oleg Nesterov
On 04/25, Jarek Poplawski wrote: > > On Wed, Apr 25, 2007 at 02:20:38PM +0200, Jarek Poplawski wrote: > > 2 cents more... > ... > > On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: > > > + do { > > > + retry = 1; > > Of course this'll be shorter: > > retry =

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 02:20:38PM +0200, Jarek Poplawski wrote: > 2 cents more... ... > On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: > > + do { > > + retry = 1; Of course this'll be shorter: retry = 0; > > + spin_lock_irq(>lock); > > +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
2 cents more... On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: ... > --- OLD/kernel/workqueue.c~1_CRDW 2007-04-13 17:43:23.0 +0400 > +++ OLD/kernel/workqueue.c2007-04-24 22:41:15.0 +0400 > @@ -242,11 +242,11 @@ static void run_workqueue(struct cpu_wor ... >

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: > On 04/24, Jarek Poplawski wrote: > > > > This looks fine. Of course, it requires to remove some debugging > > currently done with _PENDING flag > > For example? Sorry!!! I don't know where I've seen those flags - maybe it's

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: On 04/24, Jarek Poplawski wrote: This looks fine. Of course, it requires to remove some debugging currently done with _PENDING flag For example? Sorry!!! I don't know where I've seen those flags - maybe it's something with

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
2 cents more... On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: ... --- OLD/kernel/workqueue.c~1_CRDW 2007-04-13 17:43:23.0 +0400 +++ OLD/kernel/workqueue.c2007-04-24 22:41:15.0 +0400 @@ -242,11 +242,11 @@ static void run_workqueue(struct cpu_wor ...

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Jarek Poplawski
On Wed, Apr 25, 2007 at 02:20:38PM +0200, Jarek Poplawski wrote: 2 cents more... ... On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: + do { + retry = 1; Of course this'll be shorter: retry = 0; + spin_lock_irq(cwq-lock); +

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Oleg Nesterov
On 04/25, Jarek Poplawski wrote: On Wed, Apr 25, 2007 at 02:20:38PM +0200, Jarek Poplawski wrote: 2 cents more... ... On Tue, Apr 24, 2007 at 10:55:37PM +0400, Oleg Nesterov wrote: + do { + retry = 1; Of course this'll be shorter: retry = 0; No, this

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-25 Thread Oleg Nesterov
On 04/25, Oleg Nesterov wrote: On 04/25, Jarek Poplawski wrote: Probably this is also possible without timer i.e. with queue_work. Yes, thanks. While adding cpu-hotplug check I forgot to add -current_work check, which is needed to actually implement this

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-24 Thread Oleg Nesterov
On 04/24, Jarek Poplawski wrote: > > This looks fine. Of course, it requires to remove some debugging > currently done with _PENDING flag For example? >and it's hard to estimate this > all before you do more, but it should be more foreseeable than > current

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-24 Thread Jarek Poplawski
On Mon, Apr 23, 2007 at 08:33:12PM +0400, Oleg Nesterov wrote: > On 04/23, Jarek Poplawski wrote: > > > > On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: > > > > > > First, this flag should be cleared after return from > > > cancel_rearming_delayed_work(). > > > > I think this

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-24 Thread Jarek Poplawski
On Mon, Apr 23, 2007 at 08:33:12PM +0400, Oleg Nesterov wrote: On 04/23, Jarek Poplawski wrote: On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: First, this flag should be cleared after return from cancel_rearming_delayed_work(). I think this flag, if at all,

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-24 Thread Oleg Nesterov
On 04/24, Jarek Poplawski wrote: This looks fine. Of course, it requires to remove some debugging currently done with _PENDING flag For example? and it's hard to estimate this all before you do more, but it should be more foreseeable than current way. But

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-23 Thread Oleg Nesterov
On 04/23, Jarek Poplawski wrote: > > On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: > > > > First, this flag should be cleared after return from > > cancel_rearming_delayed_work(). > > I think this flag, if at all, probably should be cleared only > consciously by the owner of a

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-23 Thread Jarek Poplawski
On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: > On 04/20, Jarek Poplawski wrote: > > > > On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: > > ... > > > Yes. It would be better to use cancel_work_sync() instead of > > > flush_workqueue() > > > to make this less

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-23 Thread Jarek Poplawski
On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: On 04/20, Jarek Poplawski wrote: On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: ... Yes. It would be better to use cancel_work_sync() instead of flush_workqueue() to make this less possible (because

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-23 Thread Oleg Nesterov
On 04/23, Jarek Poplawski wrote: On Fri, Apr 20, 2007 at 09:08:36PM +0400, Oleg Nesterov wrote: First, this flag should be cleared after return from cancel_rearming_delayed_work(). I think this flag, if at all, probably should be cleared only consciously by the owner of a work, maybe

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-20 Thread Oleg Nesterov
On 04/20, Jarek Poplawski wrote: > > On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: > ... > > Yes. It would be better to use cancel_work_sync() instead of > > flush_workqueue() > > to make this less possible (because cancel_work_sync() doesn't need to wait > > for > > the whole

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-20 Thread Jarek Poplawski
On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: > On 04/19, Andrew Morton wrote: > > > > Begin forwarded message: > > > > Date: Thu, 19 Apr 2007 08:54:04 +0200 > > From: Jarek Poplawski <[EMAIL PROTECTED]> > > To: linux-kernel@vger.kernel.org > > Cc: Ingo Molnar <[EMAIL

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-20 Thread Jarek Poplawski
On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: On 04/19, Andrew Morton wrote: Begin forwarded message: Date: Thu, 19 Apr 2007 08:54:04 +0200 From: Jarek Poplawski [EMAIL PROTECTED] To: linux-kernel@vger.kernel.org Cc: Ingo Molnar [EMAIL PROTECTED] Subject: [PATCH

Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work

2007-04-20 Thread Oleg Nesterov
On 04/20, Jarek Poplawski wrote: On Thu, Apr 19, 2007 at 02:21:22PM +0400, Oleg Nesterov wrote: ... Yes. It would be better to use cancel_work_sync() instead of flush_workqueue() to make this less possible (because cancel_work_sync() doesn't need to wait for the whole -worklist),