From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [patch 1/8] Immediate Values - Global Modules List and Module Mutex
Date: Thu, 13 Sep 2007 17:21:07 -0400 [thread overview]
Message-ID: <20070913212107.GA15826@Krystal> (raw)
In-Reply-To: <1189662432.32322.1.camel@localhost.localdomain>
* Rusty Russell (rusty@rustcorp.com.au) wrote:
> On Tue, 2007-09-11 at 10:27 -0400, Mathieu Desnoyers wrote:
> > * Rusty Russell (rusty@rustcorp.com.au) wrote:
> > > On Mon, 2007-09-10 at 20:45 -0400, Mathieu Desnoyers wrote:
> > > > Code patching of _live_ SMP code is allowed. This is why I went through
> > > > all this trouble on i386.
> > >
> > > Oh, I was pretty sure it wasn't. OK.
> > >
> > > So now why three versions of immediate_set()? And why are you using my
> > > lock for exclusion? Against what?
> > >
> >
> > If we need to patch code at boot time, when interrupts are still
> > disabled (it happens when we parse the kernel arguments for instance),
> > we cannot afford to use IPIs to call sync_core() on each cpu, using
> > breakpoints/notifier chains could be tricky (because we are very early
> > at boot and alternatives or paravirt may not have been applied yet).
>
> Hi Mathieu,
>
> Sure, but why is that the caller's problem? immediate_set() isn't
> fastpath, so why not make it do an "if (early_boot)" internally?
>
I see two reasons:
1 - early_boot, or anything that looks like this, does not exist
currently (and the following reason might show why).
2 - If we use this, we cannot declare the early code with __init, so it
will have to stay there forever insteaf of being removable once boot is
over.
Therefore, I think it's better to stick to an immediate_set_early
version.
> > _immediate_set() has been introduced because of the way immediate values
> > are used by markers: the linux kernel markers already hold the module
> > mutex when they need to update the immediate values. Taking the mutex
> > twice makes no sence, so _immediate_set() is used when the caller
> > already holds the module mutex.
>
> > Why not just have one immediate_set() which iterates through and fixes
> > > up all the references?
> >
> > (reasons explained above)
> >
> > > It can use an internal lock if you want to avoid
> > > concurrent immediate_set() calls.
> > >
> >
> > An internal lock won't protect against modules load/unload race. We have
> > to iterate on the module list.
>
> Sure, but it seems like that's fairly easy to do within module.c:
>
> /* This updates all the immediates even though only one might have
> * changed. But it's so rare it's not worth optimizing. */
> void module_update_immediates(void)
> {
> mutex_lock(&module_mutex);
> list_for_each_entry(mod, &modules, list)
> update_immediates(mod->immediate, mod->num_immediate);
> mutex_unlock(&module_mutex);
> }
>
> Then during module load you do:
>
> update_immediates(mod->immediate, mod->num_immediate);
>
> Your immediate_update() just becomes:
>
> update_immediates(__start___immediate,
> __stop___immediate - __start___immediate);
> module_update_immediates();
>
> update_immediates() can grab the immediate_mutex if you want.
>
Yup, excellent idea. I just changed the linux kernel markers too.
> > > Why is it easier to patch the sites now than later? Currently it's just
> > > churn. You could go back and find them when this mythical patch gets
> > > merged into this mythical future gcc version. It could well need a
> > > completely different macro style, like "cond_imm(var, code)".
> >
> > Maybe you're right. My though was that if we have a way to express a
> > strictly boolean if() statement that can later be optimized further by
> > gcc using a jump rather than a conditionnal branch and currently emulate
> > it by using a load immediate/test/branch, we might want to do so right
> > now so we don't have to do a second code transition from
> > if (immediate_read(&var)) to immediate_if (&var) later. But you might be
> > right in that the form could potentially change anyway when the
> > implementation would come, although I don't see how.
>
> I was thinking that we might find useful specific cases before we get
> GCC support, which archs can override with tricky asm if they wish.
>
The first useful case is the Linux Kernel Markers, which really needs a
completely boolean if: active or inactive. That would be a good test
case to get gcc support.
Mathieu
> Cheers,
> Rusty.
>
>
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2007-09-13 21:21 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-06 20:02 [patch 0/8] Immediate Values for 2.6.23-rc4-mm1 Mathieu Desnoyers
2007-09-06 20:02 ` [patch 1/8] Immediate Values - Global Modules List and Module Mutex Mathieu Desnoyers
2007-09-08 7:28 ` Alexey Dobriyan
2007-09-10 23:53 ` Rusty Russell
2007-09-11 0:45 ` Mathieu Desnoyers
2007-09-11 5:18 ` Rusty Russell
2007-09-11 14:27 ` Mathieu Desnoyers
2007-09-13 5:47 ` Rusty Russell
2007-09-13 21:21 ` Mathieu Desnoyers [this message]
2007-09-13 23:15 ` Rusty Russell
2007-09-14 15:32 ` Mathieu Desnoyers
2007-09-17 22:54 ` Rusty Russell
2007-09-18 13:41 ` Mathieu Desnoyers
2007-09-20 12:29 ` Rusty Russell
2007-09-21 13:37 ` Mathieu Desnoyers
2007-09-22 7:15 ` Rusty Russell
2007-09-06 20:02 ` [patch 2/8] Immediate Values - Architecture Independent Code Mathieu Desnoyers
2007-09-06 20:02 ` [patch 3/8] Immediate Values - Kconfig menu in EMBEDDED Mathieu Desnoyers
2007-09-07 6:49 ` Andi Kleen
2007-09-07 12:46 ` Mathieu Desnoyers
2007-09-07 22:39 ` Andi Kleen
2007-09-11 20:22 ` Mathieu Desnoyers
2007-09-12 12:42 ` Andi Kleen
2007-09-06 20:02 ` [patch 4/8] Immediate Values - Move Kprobes i386 restore_interrupt to kdebug.h Mathieu Desnoyers
2007-09-07 10:31 ` Ananth N Mavinakayanahalli
2007-09-06 20:02 ` [patch 5/8] Immediate Values - i386 Optimization Mathieu Desnoyers
2007-09-06 20:02 ` [patch 6/8] Immediate Values - Powerpc Optimization Mathieu Desnoyers
2007-09-06 20:02 ` [patch 7/8] Immediate Values Powerpc Optimization Fix Mathieu Desnoyers
2007-09-06 20:02 ` [patch 8/8] Immediate Values - Documentation Mathieu Desnoyers
2007-09-06 21:20 ` Randy Dunlap
2007-09-07 12:23 ` Mathieu Desnoyers
2007-09-07 14:24 ` Randy Dunlap
-- strict thread matches above, loose matches on Subject: below --
2007-08-27 15:59 [patch 0/8] Immediate Values Mathieu Desnoyers
2007-08-27 15:59 ` [patch 1/8] Immediate Values - Global Modules List and Module Mutex Mathieu Desnoyers
2007-08-20 20:23 [patch 0/8] Immediate Values Mathieu Desnoyers
2007-08-20 20:23 ` [patch 1/8] Immediate Values - Global Modules List and Module Mutex Mathieu Desnoyers
2007-08-12 15:07 [patch 0/8] Immediate Values Mathieu Desnoyers
2007-08-12 15:07 ` [patch 1/8] Immediate Values - Global Modules List and Module Mutex Mathieu Desnoyers
2007-07-14 1:24 [patch 0/8] Immediates Values (real variables) Mathieu Desnoyers
2007-07-14 1:24 ` [patch 1/8] Immediate values - Global modules list and module mutex Mathieu Desnoyers
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=20070913212107.GA15826@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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.