Re: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andrew Morton
> On Mon, 12 Feb 2007 23:24:44 +0100 Andi Kleen <[EMAIL PROTECTED]> wrote:
> > 
> > I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
> > second version (again).  It works fine.
> 
> I think I'll just drop the thing. Nuisance:gain seems to be out of order

It hasn't caused me any problems.  The nuisance factor at your end
is all due to trying to get the old patch to work rather than using the new one.
-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andi Kleen
On Monday 12 February 2007 23:00, Andrew Morton wrote:
> > On Sun, 11 Feb 2007 11:38:23 +0100 Andi Kleen <[EMAIL PROTECTED]> wrote:
> > On Sunday 11 February 2007 01:11, Dave Jones wrote:
> > > On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
> > >  > 
> > >  > The patch titled
> > >  >  rdmsr_on_cpu, wrmsr_on_cpu
> > >  > has been removed from the -mm tree.  Its filename was
> > >  >  rdmsr_on_cpu-wrmsr_on_cpu.patch
> > >  > 
> > >  > This patch was dropped because I've lost the plot on this thing
> > > 
> > > Alexey, send me the latest fixed up version of this, and I'll
> > > queue this up to save Andrew trying to sort it out.
> > 
> > I fixed it up to at least support x86-64 too
> > 
> 
> No you didn't ;) I still get a build error with i386 allmodconfig using
> your version.

That's not surprising because I didn't change anything on i386

> 
> I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
> second version (again).  It works fine.

I think I'll just drop the thing. Nuisance:gain seems to be out of order

-Andi

-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andrew Morton
> On Sun, 11 Feb 2007 11:38:23 +0100 Andi Kleen <[EMAIL PROTECTED]> wrote:
> On Sunday 11 February 2007 01:11, Dave Jones wrote:
> > On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
> >  > 
> >  > The patch titled
> >  >  rdmsr_on_cpu, wrmsr_on_cpu
> >  > has been removed from the -mm tree.  Its filename was
> >  >  rdmsr_on_cpu-wrmsr_on_cpu.patch
> >  > 
> >  > This patch was dropped because I've lost the plot on this thing
> > 
> > Alexey, send me the latest fixed up version of this, and I'll
> > queue this up to save Andrew trying to sort it out.
> 
> I fixed it up to at least support x86-64 too
> 

No you didn't ;) I still get a build error with i386 allmodconfig using
your version.

I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
second version (again).  It works fine.



From: Alexey Dobriyan <[EMAIL PROTECTED]>

There was OpenVZ specific bug rendering some cpufreq drivers unusable on SMP. 
In short, when cpufreq code thinks it confined itself to needed cpu by means
of set_cpus_allowed() to execute rdmsr, some "virtual cpu" feature can migrate
process to anywhere.  This triggers bugons and does wrong things in general.

This got fixed by introducing rdmsr_on_cpu and wrmsr_on_cpu executing rdmsr
and wrmsr on given physical cpu by means of smp_call_function_single().

Dave Jones mentioned cpufreq might be not only user of rdmsr_on_cpu() and
wrmsr_on_cpu(), so I'm putting them into arch/{i386,x86_64}/lib/ .

Signed-off-by: Alexey Dobriyan <[EMAIL PROTECTED]>
Cc: Andi Kleen <[EMAIL PROTECTED]>
Acked-by: Dave Jones <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 arch/i386/lib/Makefile   |2 
 arch/i386/lib/msr-on-cpu.c   |   70 +
 arch/x86_64/lib/Makefile |2 
 arch/x86_64/lib/msr-on-cpu.c |1 
 include/asm-i386/msr.h   |3 +
 include/asm-x86_64/msr.h |2 
 6 files changed, 79 insertions(+), 1 deletion(-)

diff -puN arch/i386/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu 
arch/i386/lib/Makefile
--- a/arch/i386/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/arch/i386/lib/Makefile
@@ -7,3 +7,5 @@ lib-y = checksum.o delay.o usercopy.o ge
bitops.o semaphore.o
 
 lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
+
+obj-y = msr-on-cpu.o
diff -puN /dev/null arch/i386/lib/msr-on-cpu.c
--- /dev/null
+++ a/arch/i386/lib/msr-on-cpu.c
@@ -0,0 +1,70 @@
+#include 
+#include 
+#include 
+#include 
+
+#ifdef CONFIG_SMP
+struct msr_info {
+   u32 msr_no;
+   u32 l, h;
+};
+
+static void __rdmsr_on_cpu(void *info)
+{
+   struct msr_info *rv = info;
+
+   rdmsr(rv->msr_no, rv->l, rv->h);
+}
+
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h)
+{
+   preempt_disable();
+   if (smp_processor_id() == cpu)
+   rdmsr(msr_no, *l, *h);
+   else {
+   struct msr_info rv;
+
+   rv.msr_no = msr_no;
+   smp_call_function_single(cpu, __rdmsr_on_cpu, , 0, 1);
+   *l = rv.l;
+   *h = rv.h;
+   }
+   preempt_enable();
+}
+
+static void __wrmsr_on_cpu(void *info)
+{
+   struct msr_info *rv = info;
+
+   wrmsr(rv->msr_no, rv->l, rv->h);
+}
+
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
+{
+   preempt_disable();
+   if (smp_processor_id() == cpu)
+   wrmsr(msr_no, l, h);
+   else {
+   struct msr_info rv;
+
+   rv.msr_no = msr_no;
+   rv.l = l;
+   rv.h = h;
+   smp_call_function_single(cpu, __wrmsr_on_cpu, , 0, 1);
+   }
+   preempt_enable();
+}
+#else
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h)
+{
+   rdmsr(msr_no, *l, *h);
+}
+
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
+{
+   wrmsr(msr_no, l, h);
+}
+#endif
+
+EXPORT_SYMBOL(rdmsr_on_cpu);
+EXPORT_SYMBOL(wrmsr_on_cpu);
diff -puN arch/x86_64/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu 
arch/x86_64/lib/Makefile
--- a/arch/x86_64/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/arch/x86_64/lib/Makefile
@@ -4,7 +4,7 @@
 
 CFLAGS_csum-partial.o := -funroll-loops
 
-obj-y := io.o iomap_copy.o
+obj-y := io.o iomap_copy.o msr-on-cpu.o
 
 lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \
usercopy.o getuser.o putuser.o  \
diff -puN /dev/null arch/x86_64/lib/msr-on-cpu.c
--- /dev/null
+++ a/arch/x86_64/lib/msr-on-cpu.c
@@ -0,0 +1 @@
+#include "../../i386/lib/msr-on-cpu.c"
diff -puN include/asm-i386/msr.h~rdmsr_on_cpu-wrmsr_on_cpu 
include/asm-i386/msr.h
--- a/include/asm-i386/msr.h~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/include/asm-i386/msr.h
@@ -83,6 +83,9 @@ static inline void wrmsrl (unsigned long
  : "c" (counter))
 #endif /* !CONFIG_PARAVIRT */
 
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
+
 /* symbolic names for some interesting MSRs */
 /* Intel defined MSRs. */
 #define 

Re: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andrew Morton
 On Sun, 11 Feb 2007 11:38:23 +0100 Andi Kleen [EMAIL PROTECTED] wrote:
 On Sunday 11 February 2007 01:11, Dave Jones wrote:
  On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:

The patch titled
 rdmsr_on_cpu, wrmsr_on_cpu
has been removed from the -mm tree.  Its filename was
 rdmsr_on_cpu-wrmsr_on_cpu.patch

This patch was dropped because I've lost the plot on this thing
  
  Alexey, send me the latest fixed up version of this, and I'll
  queue this up to save Andrew trying to sort it out.
 
 I fixed it up to at least support x86-64 too
 

No you didn't ;) I still get a build error with i386 allmodconfig using
your version.

I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
second version (again).  It works fine.



From: Alexey Dobriyan [EMAIL PROTECTED]

There was OpenVZ specific bug rendering some cpufreq drivers unusable on SMP. 
In short, when cpufreq code thinks it confined itself to needed cpu by means
of set_cpus_allowed() to execute rdmsr, some virtual cpu feature can migrate
process to anywhere.  This triggers bugons and does wrong things in general.

This got fixed by introducing rdmsr_on_cpu and wrmsr_on_cpu executing rdmsr
and wrmsr on given physical cpu by means of smp_call_function_single().

Dave Jones mentioned cpufreq might be not only user of rdmsr_on_cpu() and
wrmsr_on_cpu(), so I'm putting them into arch/{i386,x86_64}/lib/ .

Signed-off-by: Alexey Dobriyan [EMAIL PROTECTED]
Cc: Andi Kleen [EMAIL PROTECTED]
Acked-by: Dave Jones [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 arch/i386/lib/Makefile   |2 
 arch/i386/lib/msr-on-cpu.c   |   70 +
 arch/x86_64/lib/Makefile |2 
 arch/x86_64/lib/msr-on-cpu.c |1 
 include/asm-i386/msr.h   |3 +
 include/asm-x86_64/msr.h |2 
 6 files changed, 79 insertions(+), 1 deletion(-)

diff -puN arch/i386/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu 
arch/i386/lib/Makefile
--- a/arch/i386/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/arch/i386/lib/Makefile
@@ -7,3 +7,5 @@ lib-y = checksum.o delay.o usercopy.o ge
bitops.o semaphore.o
 
 lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
+
+obj-y = msr-on-cpu.o
diff -puN /dev/null arch/i386/lib/msr-on-cpu.c
--- /dev/null
+++ a/arch/i386/lib/msr-on-cpu.c
@@ -0,0 +1,70 @@
+#include linux/module.h
+#include linux/preempt.h
+#include linux/smp.h
+#include asm/msr.h
+
+#ifdef CONFIG_SMP
+struct msr_info {
+   u32 msr_no;
+   u32 l, h;
+};
+
+static void __rdmsr_on_cpu(void *info)
+{
+   struct msr_info *rv = info;
+
+   rdmsr(rv-msr_no, rv-l, rv-h);
+}
+
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h)
+{
+   preempt_disable();
+   if (smp_processor_id() == cpu)
+   rdmsr(msr_no, *l, *h);
+   else {
+   struct msr_info rv;
+
+   rv.msr_no = msr_no;
+   smp_call_function_single(cpu, __rdmsr_on_cpu, rv, 0, 1);
+   *l = rv.l;
+   *h = rv.h;
+   }
+   preempt_enable();
+}
+
+static void __wrmsr_on_cpu(void *info)
+{
+   struct msr_info *rv = info;
+
+   wrmsr(rv-msr_no, rv-l, rv-h);
+}
+
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
+{
+   preempt_disable();
+   if (smp_processor_id() == cpu)
+   wrmsr(msr_no, l, h);
+   else {
+   struct msr_info rv;
+
+   rv.msr_no = msr_no;
+   rv.l = l;
+   rv.h = h;
+   smp_call_function_single(cpu, __wrmsr_on_cpu, rv, 0, 1);
+   }
+   preempt_enable();
+}
+#else
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h)
+{
+   rdmsr(msr_no, *l, *h);
+}
+
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
+{
+   wrmsr(msr_no, l, h);
+}
+#endif
+
+EXPORT_SYMBOL(rdmsr_on_cpu);
+EXPORT_SYMBOL(wrmsr_on_cpu);
diff -puN arch/x86_64/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu 
arch/x86_64/lib/Makefile
--- a/arch/x86_64/lib/Makefile~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/arch/x86_64/lib/Makefile
@@ -4,7 +4,7 @@
 
 CFLAGS_csum-partial.o := -funroll-loops
 
-obj-y := io.o iomap_copy.o
+obj-y := io.o iomap_copy.o msr-on-cpu.o
 
 lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \
usercopy.o getuser.o putuser.o  \
diff -puN /dev/null arch/x86_64/lib/msr-on-cpu.c
--- /dev/null
+++ a/arch/x86_64/lib/msr-on-cpu.c
@@ -0,0 +1 @@
+#include ../../i386/lib/msr-on-cpu.c
diff -puN include/asm-i386/msr.h~rdmsr_on_cpu-wrmsr_on_cpu 
include/asm-i386/msr.h
--- a/include/asm-i386/msr.h~rdmsr_on_cpu-wrmsr_on_cpu
+++ a/include/asm-i386/msr.h
@@ -83,6 +83,9 @@ static inline void wrmsrl (unsigned long
  : c (counter))
 #endif /* !CONFIG_PARAVIRT */
 
+void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
+void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
+
 /* symbolic names for some interesting MSRs */
 /* Intel defined MSRs. */
 #define 

Re: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andi Kleen
On Monday 12 February 2007 23:00, Andrew Morton wrote:
  On Sun, 11 Feb 2007 11:38:23 +0100 Andi Kleen [EMAIL PROTECTED] wrote:
  On Sunday 11 February 2007 01:11, Dave Jones wrote:
   On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
 
 The patch titled
  rdmsr_on_cpu, wrmsr_on_cpu
 has been removed from the -mm tree.  Its filename was
  rdmsr_on_cpu-wrmsr_on_cpu.patch
 
 This patch was dropped because I've lost the plot on this thing
   
   Alexey, send me the latest fixed up version of this, and I'll
   queue this up to save Andrew trying to sort it out.
  
  I fixed it up to at least support x86-64 too
  
 
 No you didn't ;) I still get a build error with i386 allmodconfig using
 your version.

That's not surprising because I didn't change anything on i386

 
 I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
 second version (again).  It works fine.

I think I'll just drop the thing. Nuisance:gain seems to be out of order

-Andi

-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-12 Thread Andrew Morton
 On Mon, 12 Feb 2007 23:24:44 +0100 Andi Kleen [EMAIL PROTECTED] wrote:
  
  I backed out x86_64-mm-msr-on-cpu.patch (again) and went with Alexey's
  second version (again).  It works fine.
 
 I think I'll just drop the thing. Nuisance:gain seems to be out of order

It hasn't caused me any problems.  The nuisance factor at your end
is all due to trying to get the old patch to work rather than using the new one.
-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-11 Thread Andi Kleen
On Sunday 11 February 2007 01:11, Dave Jones wrote:
> On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
>  > 
>  > The patch titled
>  >  rdmsr_on_cpu, wrmsr_on_cpu
>  > has been removed from the -mm tree.  Its filename was
>  >  rdmsr_on_cpu-wrmsr_on_cpu.patch
>  > 
>  > This patch was dropped because I've lost the plot on this thing
> 
> Alexey, send me the latest fixed up version of this, and I'll
> queue this up to save Andrew trying to sort it out.

I fixed it up to at least support x86-64 too

-Andi
-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-11 Thread Andi Kleen
On Sunday 11 February 2007 01:11, Dave Jones wrote:
 On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
   
   The patch titled
rdmsr_on_cpu, wrmsr_on_cpu
   has been removed from the -mm tree.  Its filename was
rdmsr_on_cpu-wrmsr_on_cpu.patch
   
   This patch was dropped because I've lost the plot on this thing
 
 Alexey, send me the latest fixed up version of this, and I'll
 queue this up to save Andrew trying to sort it out.

I fixed it up to at least support x86-64 too

-Andi
-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-10 Thread Dave Jones
On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
 > 
 > The patch titled
 >  rdmsr_on_cpu, wrmsr_on_cpu
 > has been removed from the -mm tree.  Its filename was
 >  rdmsr_on_cpu-wrmsr_on_cpu.patch
 > 
 > This patch was dropped because I've lost the plot on this thing

Alexey, send me the latest fixed up version of this, and I'll
queue this up to save Andrew trying to sort it out.

Dave

-- 
http://www.codemonkey.org.uk
-
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: - rdmsr_on_cpu-wrmsr_on_cpu.patch removed from -mm tree

2007-02-10 Thread Dave Jones
On Thu, Feb 08, 2007 at 01:32:43PM -0800, [EMAIL PROTECTED] wrote:
  
  The patch titled
   rdmsr_on_cpu, wrmsr_on_cpu
  has been removed from the -mm tree.  Its filename was
   rdmsr_on_cpu-wrmsr_on_cpu.patch
  
  This patch was dropped because I've lost the plot on this thing

Alexey, send me the latest fixed up version of this, and I'll
queue this up to save Andrew trying to sort it out.

Dave

-- 
http://www.codemonkey.org.uk
-
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/