From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Christoph Lameter <cl@linux.com>
Cc: Tejun Heo <tj@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>,
Pekka Enberg <penberg@cs.helsinki.fi>,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [cpuops cmpxchg double V2 1/4] Generic support for this_cpu_cmpxchg_double
Date: Fri, 21 Jan 2011 13:37:52 -0500 [thread overview]
Message-ID: <20110121183752.GA12998@Krystal> (raw)
In-Reply-To: <alpine.DEB.2.00.1101211158090.15692@router.home>
* Christoph Lameter (cl@linux.com) wrote:
> On Fri, 21 Jan 2011, Mathieu Desnoyers wrote:
>
> > > > With:
> > > > struct cmpxchg_double *pcp
> > >
> > > That does not conform to the parameter conventions in other this_cpu_ops.
> > > The first parameter is a variable because the notion of a pointer is
> > > problematic given that percpu operations use a segment prefix to relocate
> > > pointers.
> >
> > So the first argument could be along the lines of:
> >
> > struct cmpxchg_double pcp
> >
> > then.
>
> Ok then you would pass a struct by value? Or use a non-scalar as a
> variable passed to a this_cpu_op? So far per cpu scalars have been the
> only variables allowed to be specified in this_cpu operations.
What I have in mind is that the struct passed would be non-scalar for this
specific operation. I'm not sure about the distinction between "pass a struct by
value" and "use a non-scalar as a variable passed to a this_cpu_op" -- I feel
I'm missing an important detail in what you say, because I see these as being
the same thing.
>
> > > > struct cmpxchg_double casdbl;
> > > > struct {
> > > > void *ptr;
> > > > unsigned long cpuid_tid;
> > > > } t;
> > > > }
> > >
> > > There is no need for aliases with the existing implementation.
> > >
> > > How will the macro check the parameters now?
> >
> > Well, my last proposal to check __alignof__ within a __builtin_choose_expr
> > check wouldn't need this union actually, which would be much better I think.
>
> The existing implementation has a check for alignment. That is not the
> problem.
It's a dynamic check right ? (based on VM_BUG_ON() if I remember well) It adds
code and runtime conditions, which would go away if we let the alignment check
be done at compile-time.
> The typechecking would need to be addressed. I.e. if I pass a
> pointer for old and an ulong for the new value then I'd like to see the
> compiler complain. Or if the first parameter is a long but the type of the
> first word is a pointer etc etc.
Hrm. Then the only solution I see would be to require that the structure
used as percpu_dd parameter have fixed field names (yeah, that's a bit odd, but
could not come up with a more elegant solution at the moment):
struct mycustomdoublestruct {
sometype word1;
someothertype word2;
}
So we can access percpu_dd.word1 and percpu_dd.word2 within
this_cpu_cmpxchg_double for the type checking.
Mathieu
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2011-01-21 18:37 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-06 20:45 [cpuops cmpxchg double V2 0/4] this_cpu_cmpxchg_double support Christoph Lameter
2011-01-06 20:45 ` [cpuops cmpxchg double V2 1/4] Generic support for this_cpu_cmpxchg_double Christoph Lameter
2011-01-06 21:08 ` Mathieu Desnoyers
2011-01-06 21:43 ` Christoph Lameter
2011-01-06 22:05 ` H. Peter Anvin
2011-01-07 15:15 ` Christoph Lameter
2011-01-07 18:04 ` Mathieu Desnoyers
2011-01-07 18:41 ` Christoph Lameter
2011-01-08 17:24 ` Tejun Heo
2011-01-09 8:33 ` Pekka Enberg
2011-01-21 7:31 ` Pekka Enberg
2011-01-21 9:26 ` Tejun Heo
2011-01-21 15:31 ` H. Peter Anvin
2011-01-21 15:48 ` Tejun Heo
2011-01-21 16:30 ` H. Peter Anvin
2011-01-21 16:34 ` Tejun Heo
2011-01-21 16:54 ` Mathieu Desnoyers
2011-01-21 17:07 ` Christoph Lameter
2011-01-21 17:50 ` Mathieu Desnoyers
2011-01-21 18:06 ` Christoph Lameter
2011-01-21 18:37 ` Mathieu Desnoyers [this message]
2011-01-21 17:08 ` Tejun Heo
2011-01-21 17:13 ` H. Peter Anvin
2011-01-21 17:19 ` Tejun Heo
2011-01-24 6:01 ` H. Peter Anvin
2011-02-25 13:09 ` Pekka Enberg
2011-02-25 13:19 ` Tejun Heo
2011-02-25 16:26 ` Christoph Lameter
2011-02-25 16:37 ` Tejun Heo
2011-02-25 16:43 ` Christoph Lameter
2011-02-25 16:38 ` Eric Dumazet
2011-02-25 16:45 ` Christoph Lameter
2011-01-21 17:24 ` Christoph Lameter
2011-01-21 17:42 ` Mathieu Desnoyers
2011-01-21 17:50 ` Christoph Lameter
2011-01-21 18:10 ` Mathieu Desnoyers
2011-01-21 18:42 ` Christoph Lameter
2011-01-21 18:31 ` H. Peter Anvin
2011-01-21 18:46 ` Christoph Lameter
2011-01-21 19:32 ` Mathieu Desnoyers
2011-01-23 18:00 ` H. Peter Anvin
2011-01-06 20:45 ` [cpuops cmpxchg double V2 2/4] x86: this_cpu_cmpxchg_double() support Christoph Lameter
2011-01-06 20:45 ` [cpuops cmpxchg double V2 3/4] slub: Get rid of slab_free_hook_irq() Christoph Lameter
2011-01-06 20:45 ` [cpuops cmpxchg double V2 4/4] Lockless (and preemptless) fastpaths for slub Christoph Lameter
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=20110121183752.GA12998@Krystal \
--to=mathieu.desnoyers@efficios.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=eric.dumazet@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=penberg@cs.helsinki.fi \
--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.