lkml.org 
[lkml]   [2004]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC] Refcounting of objects part of a lockfree collection
On Fri, Jul 16, 2004 at 07:32:35AM -0700, Greg KH wrote:
>...
> > We (Dipankar and myslef) had a discussion
> > and decided:
> > 1. I will make a patch to shrink kref and feed it to Greg
> > 2. Add new set kref api for lockfree refcounting --
> > kref_lf_xxx. (kref_lf_get, kref_lf_get_rcu etc.,)
>
> kref_*_rcu() as Dipankar noted is much nicer.

Do you mean Dipankar had noted as in:

<Dipankar's earlier post>
> Would this work -
>
> kref_get - just atomic inc
> kref_put - just atomic dec
> kref_get_rcu - cmpxchg if arch has or hashed spinlock
> kref_put_rcu - dec if has cmpxchg else hashed spinlock

> If the object has lock-free look-up, it must use kref_get_rcu.
> You can use kref_get on such an object if the look-up is being
> done with lock. Is there a situation that is not covered by this ?

</>

If that is what you want, the api cannot work well.
The problem with this case is I cannot use hashed spinlock _just_ for
kref_get_rcu as Dipankar mentions above. If I do that the atomic_inc s
in kref_get will race with the 'hashed spinlock' kref_get_rcu when
both have to be used on the same refcounter. (I mentioned this in an
earlier post). So I have to take the same hashed spinlock for kref_gets as
well to maintain correctness -- obviously not a good thing for arches
with no cmpxchg which use krefs for non lock free purposes only.
Hence, the proposal now is to add kref_lf_get, kref_lf_put, kref_lf_get_rcu
to the kref api. kref_lf_xxx is to be used when the kref refcounter
is used atleast one place lock free -- that is kref_lf_get_rcu is used
at atleast once on the struct kref. Does that sound ok?

Thanks,
Kiran
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:04    [W:0.054 / U:0.096 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site