RE: [patch 05/24] Text Edit Lock - Architecture Independent Code

2007-12-20 Thread zhangxiliang

> > ===
> > --- linux-2.6-lttng.orig/kernel/kprobes.c   2007-12-12
> > 18:10:32.0 -0500
> > +++ linux-2.6-lttng/kernel/kprobes.c2007-12-12
> > 18:10:34.0 -0500
> > @@ -644,7 +644,9 @@ valid_p:
> > list_del_rcu(>list);
> > kfree(old_p);
> > }
> > +   mutex_lock(_mutex);
> > arch_remove_kprobe(p);
> > +   mutex_unlock(_mutex);
> > } else {
> > mutex_lock(_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.

Could we insert the "mutex_lock" and "mutex_unlock" into "free_insn_slot"
instead of architecture code?

modify as follows:

void __kprobes free_insn_slot(kprobe_opcode_t * slot, int dirty)
{
struct kprobe_insn_page *kip;
struct hlist_node *pos;

+   mutex_lock(_mutex);
hlist_for_each_entry(kip, pos, _insn_pages, hlist) {
if (kip->insns <= slot &&
slot < kip->insns + (INSNS_PER_PAGE * MAX_INSN_SIZE)) {
int i = (slot - kip->insns) / MAX_INSN_SIZE;
if (dirty) {
kip->slot_used[i] = SLOT_DIRTY;
kip->ngarbage++;
} else {
collect_one_slot(kip, i);
}
break;
    }
    }

if (dirty && ++kprobe_garbage_slots > INSNS_PER_PAGE)
collect_garbage_slots();
+   mutex_unlock(_mutex);
}


> -Original Message-
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of zhangxiliang
> Sent: Friday, December 21, 2007 1:19 PM
> To: 'Mathieu Desnoyers'; [EMAIL PROTECTED]; 'Ingo
> Molnar'; linux-kernel@vger.kernel.org
> Cc: 'Andi Kleen'
> Subject: RE: [patch 05/24] Text Edit Lock - Architecture
> Independent Code
>
> hello,
>I have some questions for your patches.
>
> > 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.
>
>
> > ===
> > --- linux-2.6-lttng.orig/kernel/kprobes.c   2007-12-12
> > 18:10:32.0 -0500
> > +++ linux-2.6-lttng/kernel/kprobes.c2007-12-12
> > 18:10:34.0 -0500
> > @@ -644,7 +644,9 @@ valid_p:
> > list_del_rcu(>list);
> > kfree(old_p);
> > }
> > +   mutex_lock(_mutex);
> > arch_remove_kprobe(p);
> > +   mutex_unlock(_mutex);
> > } else {
> > mutex_lock(_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.
&

RE: [patch 05/24] Text Edit Lock - Architecture Independent Code

2007-12-20 Thread zhangxiliang
hello,
   I have some questions for your patches.

> 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.


> ===
> --- linux-2.6-lttng.orig/kernel/kprobes.c 2007-12-12
> 18:10:32.0 -0500
> +++ linux-2.6-lttng/kernel/kprobes.c  2007-12-12
> 18:10:34.0 -0500
> @@ -644,7 +644,9 @@ valid_p:
>   list_del_rcu(>list);
>   kfree(old_p);
>   }
> + mutex_lock(_mutex);
>   arch_remove_kprobe(p);
> + mutex_unlock(_mutex);
>   } else {
>   mutex_lock(_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.


> -Original Message-
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of
> Mathieu Desnoyers
> Sent: Friday, December 21, 2007 9:55 AM
> To: [EMAIL PROTECTED]; 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 <[EMAIL PROTECTED]>
> CC: Andi Kleen <[EMAIL PROTECTED]>
> ---
>  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.0 -0500
> +++ linux-2.6-lttng/include/linux/memory.h2007-11-07
> 11:13:48.0 -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.0 -0500
> +++ linux-2.6-lttng/mm/memory.c   2007-11-07
> 11:14:25.0 -0500
> @@ -50,6 +50,8 @@
>  #include 
>  #include 
>  #include 
> +#include 
> +#include 
>
>  #include 
>  #include 
> @@ -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(_mutex);
> +}
> +EXPORT_SYMBOL_GPL(kernel_text_lock);
> +
> +/**
> + * kernel_text_unlock   -   Release the kernel text modification lock
> + *
> + * Insures mutual write exclusion of kernel and 

RE: [patch 05/24] Text Edit Lock - Architecture Independent Code

2007-12-20 Thread zhangxiliang
hello,
   I have some questions for your patches.

 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.


 ===
 --- linux-2.6-lttng.orig/kernel/kprobes.c 2007-12-12
 18:10:32.0 -0500
 +++ linux-2.6-lttng/kernel/kprobes.c  2007-12-12
 18:10:34.0 -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.


 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED] On Behalf Of
 Mathieu Desnoyers
 Sent: Friday, December 21, 2007 9:55 AM
 To: [EMAIL PROTECTED]; 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 [EMAIL PROTECTED]
 CC: Andi Kleen [EMAIL PROTECTED]
 ---
  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.0 -0500
 +++ linux-2.6-lttng/include/linux/memory.h2007-11-07
 11:13:48.0 -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.0 -0500
 +++ linux-2.6-lttng/mm/memory.c   2007-11-07
 11:14:25.0 -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 

RE: [patch 05/24] Text Edit Lock - Architecture Independent Code

2007-12-20 Thread zhangxiliang

  ===
  --- linux-2.6-lttng.orig/kernel/kprobes.c   2007-12-12
  18:10:32.0 -0500
  +++ linux-2.6-lttng/kernel/kprobes.c2007-12-12
  18:10:34.0 -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.

Could we insert the mutex_lock and mutex_unlock into free_insn_slot
instead of architecture code?

modify as follows:

void __kprobes free_insn_slot(kprobe_opcode_t * slot, int dirty)
{
struct kprobe_insn_page *kip;
struct hlist_node *pos;

+   mutex_lock(kprobe_mutex);
hlist_for_each_entry(kip, pos, kprobe_insn_pages, hlist) {
if (kip-insns = slot 
slot  kip-insns + (INSNS_PER_PAGE * MAX_INSN_SIZE)) {
int i = (slot - kip-insns) / MAX_INSN_SIZE;
if (dirty) {
kip-slot_used[i] = SLOT_DIRTY;
kip-ngarbage++;
} else {
collect_one_slot(kip, i);
}
break;
}
}

if (dirty  ++kprobe_garbage_slots  INSNS_PER_PAGE)
collect_garbage_slots();
+   mutex_unlock(kprobe_mutex);
}


 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED] On Behalf Of zhangxiliang
 Sent: Friday, December 21, 2007 1:19 PM
 To: 'Mathieu Desnoyers'; [EMAIL PROTECTED]; 'Ingo
 Molnar'; linux-kernel@vger.kernel.org
 Cc: 'Andi Kleen'
 Subject: RE: [patch 05/24] Text Edit Lock - Architecture
 Independent Code

 hello,
I have some questions for your patches.

  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.


  ===
  --- linux-2.6-lttng.orig/kernel/kprobes.c   2007-12-12
  18:10:32.0 -0500
  +++ linux-2.6-lttng/kernel/kprobes.c2007-12-12
  18:10:34.0 -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.


  -Original Message-
  From: [EMAIL PROTECTED]
  [mailto:[EMAIL PROTECTED] On Behalf Of
  Mathieu Desnoyers
  Sent: Friday, December 21, 2007 9:55 AM
  To: [EMAIL PROTECTED]; 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

"swapon" function manpage

2007-03-08 Thread zhangxiliang
hello,
  The manpage of "swapon" function since Linux 2.6.17 has some error.
  The MAX_SWAPFILES should be 30 in the latest version. Swap migration uses
the two higest numbers of swap types (30 and 31).

Regards
Zhang Xiliang 



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


swapon function manpage

2007-03-08 Thread zhangxiliang
hello,
  The manpage of swapon function since Linux 2.6.17 has some error.
  The MAX_SWAPFILES should be 30 in the latest version. Swap migration uses
the two higest numbers of swap types (30 and 31).

Regards
Zhang Xiliang 



-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: ntp

2007-02-04 Thread zhangxiliang
Hello.
When I use the ntpd service, I see if I use the client attempt to connect 
the server repeat before the server is ready, the ntpd on server can not be 
ready all the times.

Sometimes the waiting time maybe very long.

- Original Message - 
From: "Matti Aarnio" <[EMAIL PROTECTED]>
To: "zhangxiliang" <[EMAIL PROTECTED]>
Cc: "Linux Kernel Mailing List" 
Sent: Friday, February 02, 2007 5:10 PM
Subject: Re: ntp


> On Fri, Feb 02, 2007 at 04:47:26PM +0800, zhangxiliang wrote:
>> When i start the ntp service successful on server, the client must
>> ntpdate with the server after waiting a moment.
>> The moment may be 3~5 minutes, or it may be 10~15 minutes. I don't
>> know why it happens?
>
> The  ntp server  takes several external clock comparisons to know its
> local running environments (hosts) clock behaviour.
>
> Before it knows that, it has no real knowledge of what the time is,
> and it won't report anything out.
>
> In my environments I have couple local machines (usually doing
> something else too) assigned as network local NTP servers, and
> all other machines refer to them.
>
>
>> Regards
>> Zhang Xiliang
>> MAIL:[EMAIL PROTECTED]
>
> /Matti Aarnio
> 



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


Re: ntp

2007-02-04 Thread zhangxiliang
Hello.
When I use the ntpd service, I see if I use the client attempt to connect 
the server repeat before the server is ready, the ntpd on server can not be 
ready all the times.

Sometimes the waiting time maybe very long.

- Original Message - 
From: Matti Aarnio [EMAIL PROTECTED]
To: zhangxiliang [EMAIL PROTECTED]
Cc: Linux Kernel Mailing List linux-kernel@vger.kernel.org
Sent: Friday, February 02, 2007 5:10 PM
Subject: Re: ntp


 On Fri, Feb 02, 2007 at 04:47:26PM +0800, zhangxiliang wrote:
 When i start the ntp service successful on server, the client must
 ntpdate with the server after waiting a moment.
 The moment may be 3~5 minutes, or it may be 10~15 minutes. I don't
 know why it happens?

 The  ntp server  takes several external clock comparisons to know its
 local running environments (hosts) clock behaviour.

 Before it knows that, it has no real knowledge of what the time is,
 and it won't report anything out.

 In my environments I have couple local machines (usually doing
 something else too) assigned as network local NTP servers, and
 all other machines refer to them.


 Regards
 Zhang Xiliang
 MAIL:[EMAIL PROTECTED]

 /Matti Aarnio
 



-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/