From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: zhangxiliang <zhangxiliang@cn.fujitsu.com>
Cc: akpm@linux-foundation.org, "'Ingo Molnar'" <mingo@elte.hu>,
linux-kernel@vger.kernel.org,
"'Andi Kleen'" <andi@firstfloor.org>
Subject: Re: [patch 05/24] Text Edit Lock - Architecture Independent Code
Date: Fri, 21 Dec 2007 08:46:02 -0500 [thread overview]
Message-ID: <20071221134602.GA31783@Krystal> (raw)
In-Reply-To: <001701c84390$f6825f70$cb8da70a@zhangxiliang>
* zhangxiliang (zhangxiliang@cn.fujitsu.com) wrote:
> hello,
> I have some questions for your patches.
>
Hi,
> > Paravirt and alternatives are always done when SMP is
> > inactive, so there is no
> > need to use locks.
>
> > -#ifndef CONFIG_KPROBES
> > -#ifdef CONFIG_HOTPLUG_CPU
> > - /* It must still be possible to apply SMP alternatives. */
> > - if (num_possible_cpus() <= 1)
> > -#endif
> > - {
> > - change_page_attr(virt_to_page(start),
> > - size >> PAGE_SHIFT, PAGE_KERNEL_RX);
> > - printk("Write protecting the kernel text:
> > %luk\n", size >> 10);
> > - }
> > -#endif
> > + change_page_attr(virt_to_page(start),
> > + size >> PAGE_SHIFT, PAGE_KERNEL_RX);
> > + printk(KERN_INFO "Write protecting the kernel text: %luk\n",
> > + size >> 10);
> > +
>
> Why "mark_rodata_ro" doesn't consider smp instance? Maybe it will be appied in
> future.
>
In its previous state, mark_rodata_ro was disabled in these situations :
- System supports CPU_HOTPLUG (alternatives will need to be applied when
we pass from 1->2 and 2->1 cpu.
- System supports KPROBES, it need to put breakpoints in the code.
The main effect of the change I introduce is that I allow the kernel
code to be marked RO even in these situations. Alternatives and kprobes
uses the text_poke to modify kernel code, which temporarily disabled the
Write Protection bit on the local CPU so the memory write to RO pages
can be done.
So I guess the answer to your question is : previously, mark_rodata_ro
did not support CPU HOTPLUG nor KPROBES, and now it does, which is
much cleaner.
>
> > ===================================================================
> > --- linux-2.6-lttng.orig/kernel/kprobes.c 2007-12-12
> > 18:10:32.000000000 -0500
> > +++ linux-2.6-lttng/kernel/kprobes.c 2007-12-12
> > 18:10:34.000000000 -0500
> > @@ -644,7 +644,9 @@ valid_p:
> > list_del_rcu(&p->list);
> > kfree(old_p);
> > }
> > + mutex_lock(&kprobe_mutex);
> > arch_remove_kprobe(p);
> > + mutex_unlock(&kprobe_mutex);
> > } else {
> > mutex_lock(&kprobe_mutex);
> > if (p->break_handler)
>
> I think "mutex_lock" and "mutex_unlock" shoud be in architecture code.
> In "__register_kprobe" funtion, its implement "arch_prepare_kprobe" and
> "arch_arm_kprobe" is also depended on arch. So the remove implement is not
> the same on the different architecture code.
>
> Maybe it doesn't need the mutex_lock in "arch_remove_kprobe" on some embeded
> system chips if linux can support the other embeded system chips in future.
>
Which patch is this coming from ?
My Text Edit Lock - kprobes architecture independent support
patch _removes_ the kprobe_mutex taken around arch_remove_kprobes
because it is useless, I don't see how this patch snippet applies to my
patchset at all.
If you suggest to change the way locking is currently done in
kprobes, please do this in a separate thread, as a RFC ?
Mathieu
>
> > -----Original Message-----
> > From: linux-kernel-owner@vger.kernel.org
> > [mailto:linux-kernel-owner@vger.kernel.org] On Behalf Of
> > Mathieu Desnoyers
> > Sent: Friday, December 21, 2007 9:55 AM
> > To: akpm@linux-foundation.org; Ingo Molnar;
> > linux-kernel@vger.kernel.org
> > Cc: Mathieu Desnoyers; Andi Kleen
> > Subject: [patch 05/24] Text Edit Lock - Architecture Independent Code
> >
> > This is an architecture independant synchronization around kernel text
> > modifications through use of a global mutex.
> >
> > A mutex has been chosen so that kprobes, the main user of
> > this, can sleep during
> > memory allocation between the memory read of the instructions
> > it must replace
> > and the memory write of the breakpoint.
> >
> > Other user of this interface: immediate values.
> >
> > Paravirt and alternatives are always done when SMP is
> > inactive, so there is no
> > need to use locks.
> >
> > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> > CC: Andi Kleen <andi@firstfloor.org>
> > ---
> > include/linux/memory.h | 7 +++++++
> > mm/memory.c | 34 ++++++++++++++++++++++++++++++++++
> > 2 files changed, 41 insertions(+)
> >
> > Index: linux-2.6-lttng/include/linux/memory.h
> > ===================================================================
> > --- linux-2.6-lttng.orig/include/linux/memory.h>
> > 2007-11-07 11:11:26.000000000 -0500
> > +++ linux-2.6-lttng/include/linux/memory.h 2007-11-07
> > 11:13:48.000000000 -0500
> > @@ -93,4 +93,11 @@ extern int memory_notify(unsigned long v
> > #define hotplug_memory_notifier(fn, pri) do { } while (0)
> > #endif
> >
> > +/*
> > + * Take and release the kernel text modification lock, used
> > for code patching.
> > + * Users of this lock can sleep.
> > + */
> > +extern void kernel_text_lock(void);
> > +extern void kernel_text_unlock(void);
> > +
> > #endif /* _LINUX_MEMORY_H_ */
> > Index: linux-2.6-lttng/mm/memory.c
> > ===================================================================
> > --- linux-2.6-lttng.orig/mm/memory.c 2007-11-07
> > 11:12:33.000000000 -0500
> > +++ linux-2.6-lttng/mm/memory.c 2007-11-07
> > 11:14:25.000000000 -0500
> > @@ -50,6 +50,8 @@
> > #include <linux/delayacct.h>
> > #include <linux/init.h>
> > #include <linux/writeback.h>
> > +#include <linux/kprobes.h>
> > +#include <linux/mutex.h>
> >
> > #include <asm/pgalloc.h>
> > #include <asm/uaccess.h>
> > @@ -84,6 +86,12 @@ EXPORT_SYMBOL(high_memory);
> >
> > int randomize_va_space __read_mostly = 1;
> >
> > +/*
> > + * mutex protecting text section modification (dynamic code
> > patching).
> > + * some users need to sleep (allocating memory...) while
> > they hold this lock.
> > + */
> > +static DEFINE_MUTEX(text_mutex);
> > +
> > static int __init disable_randmaps(char *s)
> > {
> > randomize_va_space = 0;
> > @@ -2748,3 +2756,29 @@ int access_process_vm(struct task_struct
> >
> > return buf - old_buf;
> > }
> > +
> > +/**
> > + * kernel_text_lock - Take the kernel text modification lock
> > + *
> > + * Insures mutual write exclusion of kernel and modules text
> > live text
> > + * modification. Should be used for code patching.
> > + * Users of this lock can sleep.
> > + */
> > +void __kprobes kernel_text_lock(void)
> > +{
> > + mutex_lock(&text_mutex);
> > +}
> > +EXPORT_SYMBOL_GPL(kernel_text_lock);
> > +
> > +/**
> > + * kernel_text_unlock - Release the kernel text modification lock
> > + *
> > + * Insures mutual write exclusion of kernel and modules text
> > live text
> > + * modification. Should be used for code patching.
> > + * Users of this lock can sleep.
> > + */
> > +void __kprobes kernel_text_unlock(void)
> > +{
> > + mutex_unlock(&text_mutex);
> > +}
> > +EXPORT_SYMBOL_GPL(kernel_text_unlock);
> >
> > --
> > Mathieu Desnoyers
> > Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
> > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25
> > A8FE 3BAE 9A68
> > --
> > 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/
> >
> >
>
>
>
--
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-12-21 13:46 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-21 1:54 [patch 00/24] Markers use immediate values, for 2.6.24-rc5-mm1 Mathieu Desnoyers
2007-12-21 1:54 ` [patch 01/24] Kprobes - use a mutex to protect the instruction pages list Mathieu Desnoyers
2007-12-21 1:54 ` [patch 02/24] Kprobes - do not use kprobes mutex in arch code Mathieu Desnoyers
2007-12-21 1:54 ` [patch 03/24] Kprobes - declare kprobe_mutex static Mathieu Desnoyers
2007-12-21 1:54 ` [patch 04/24] Add INIT_ARRAY() to kernel.h Mathieu Desnoyers
2007-12-21 1:54 ` [patch 05/24] Text Edit Lock - Architecture Independent Code Mathieu Desnoyers
2007-12-21 5:18 ` zhangxiliang
2007-12-21 6:01 ` zhangxiliang
2007-12-21 13:46 ` Mathieu Desnoyers [this message]
2007-12-21 1:54 ` [patch 06/24] Text Edit Lock - Alternative code for x86 Mathieu Desnoyers
2007-12-21 1:54 ` [patch 07/24] Text Edit Lock - kprobes architecture independent support Mathieu Desnoyers
2007-12-21 1:54 ` [patch 08/24] Text Edit Lock - kprobes x86_32 Mathieu Desnoyers
2007-12-21 1:54 ` [patch 09/24] Text Edit Lock - kprobes x86_64 Mathieu Desnoyers
2007-12-21 1:54 ` [patch 10/24] Text Edit Lock - x86_32 standardize debug rodata Mathieu Desnoyers
2007-12-21 1:54 ` [patch 11/24] Text Edit Lock - x86_64 " Mathieu Desnoyers
2007-12-21 1:54 ` [patch 12/24] Immediate Values - Architecture Independent Code Mathieu Desnoyers
2007-12-21 1:54 ` [patch 13/24] Immediate Values - Kconfig menu in EMBEDDED Mathieu Desnoyers
2007-12-21 1:54 ` [patch 14/24] Immediate Values - x86 Optimization Mathieu Desnoyers
2007-12-21 2:56 ` H. Peter Anvin
2007-12-21 3:19 ` Mathieu Desnoyers
2007-12-21 3:30 ` H. Peter Anvin
2007-12-21 13:16 ` [patch 14/24] Immediate Values - x86 Optimization (updated) Mathieu Desnoyers
2007-12-21 13:19 ` Mathieu Desnoyers
2007-12-21 1:54 ` [patch 15/24] Add text_poke and sync_core to powerpc Mathieu Desnoyers
2007-12-21 1:54 ` [patch 16/24] Immediate Values - Powerpc Optimization Mathieu Desnoyers
2007-12-21 1:54 ` [patch 17/24] Immediate Values - Documentation Mathieu Desnoyers
2007-12-21 1:54 ` [patch 18/24] Scheduler Profiling - Use Immediate Values Mathieu Desnoyers
2007-12-21 1:54 ` [patch 19/24] Immediate Values - Move Kprobes x86 restore_interrupt to kdebug.h Mathieu Desnoyers
2007-12-21 1:54 ` [patch 20/24] Add __discard section to x86 Mathieu Desnoyers
2007-12-21 1:54 ` [patch 21/24] Immediate Values - x86 Optimization NMI and MCE support Mathieu Desnoyers
2007-12-21 13:25 ` [patch 21/24] Immediate Values - x86 Optimization NMI and MCE support (updated) Mathieu Desnoyers
2007-12-21 1:55 ` [patch 22/24] Immediate Values - Powerpc Optimization NMI MCE support Mathieu Desnoyers
2007-12-21 1:55 ` [patch 23/24] Immediate Values Use Arch NMI and MCE Support Mathieu Desnoyers
2007-12-21 1:55 ` [patch 24/24] Linux Kernel Markers - Use Immediate Values 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=20071221134602.GA31783@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=zhangxiliang@cn.fujitsu.com \
/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.