public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: cn_queue.c
Date: Fri, 01 Apr 2005 14:36:31 +0400	[thread overview]
Message-ID: <1112351791.9334.208.camel@uganda> (raw)
In-Reply-To: <20050401015027.047783eb.akpm@osdl.org>

[-- Attachment #1: Type: text/plain, Size: 1848 bytes --]

On Fri, 2005-04-01 at 01:50 -0800, Andrew Morton wrote:
> Evgeniy Polyakov <johnpol@2ka.mipt.ru> wrote:
> >
> > cn_queue_free_dev() will wait until dev->refcnt hits zero 
> >  before freeing any resources,
> >  but it can happen only after cn_queue_del_callback() does 
> >  it's work on given callback device [actually when all callbacks 
> >  are removed].
> >  When new callback is added into device, it's refcnt is incremented
> >  [before adition btw, if addition fails in the middle, reference is
> >  decremented], when callbak is removed, device's reference counter
> >  is decremented aromically after all work is finished.
> 
> hm.
> 
> How come cn_queue_del_callback() uses all those barriers if no other CPU
> can grab new references against cbq->cb->refcnt?

The work may be already assigned to that callback device, 
new work cant, barriers are there to ensure that
reference counters are updated in proper places, but not 
before.
It would be a bug to update dev->refcnt before assigned work is finished
and callback removed.

> cn_queue_free_callback() forgot to do flush_workqueue(), so
> cn_queue_wrapper() can still be running while cn_queue_free_callback()
> frees up the cn_callback_entry, I think.

cn_queue_wrapper() atomically increments cbq->cb->refcnt if runs, so it
will
be caught in 
while (atomic_read(&cbq->cb->refcnt)) 
  msleep(1000);
in cn_queue_free_callback().
If it does not run, then all will be ok.

Btw, it looks like comments for del_timer_sync() and cancel_delayed_work
()
are controversial - del_timer_sync() says that pending timer
can not run on different CPU after returning, 
but cancel_delayed_work() says, that work to be cancelled still 
can run after returning.

-- 
        Evgeniy Polyakov

Crash is better than data corruption -- Arthur Grabowski

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2005-04-01 10:30 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-01  1:32 cn_queue.c Andrew Morton
2005-04-01  7:40 ` cn_queue.c Evgeniy Polyakov
2005-04-01  7:57   ` cn_queue.c Andrew Morton
2005-04-01  8:40     ` cn_queue.c Evgeniy Polyakov
2005-04-01  8:48       ` cn_queue.c Andrew Morton
2005-04-01  9:34         ` cn_queue.c Evgeniy Polyakov
2005-04-01  9:50           ` cn_queue.c Andrew Morton
2005-04-01 10:36             ` Evgeniy Polyakov [this message]
2005-04-01 10:43               ` cn_queue.c Andrew Morton
2005-04-01 11:12                 ` cn_queue.c Evgeniy Polyakov
2005-04-01 11:15                   ` cn_queue.c Evgeniy Polyakov

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=1112351791.9334.208.camel@uganda \
    --to=johnpol@2ka.mipt.ru \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@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