Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-24 Thread Konrad Rzeszutek Wilk
On Tue, Sep 24, 2013 at 12:50:45PM -0700, Boris Ostrovsky wrote:
> On 09/12/2013 10:47 PM, Steven Rostedt wrote:
> >On Thu, 12 Sep 2013 22:29:44 -0400
> >Boris Ostrovsky  wrote:
> >
> >>From: Konrad Rzeszutek Wilk 
> >>
> >>xen_init_spinlocks() currently calls static_key_slow_inc() before
> >>jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually 
> >>is
> >>the case) the effect of this static_key_slow_inc() is deferred until after
> >>jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not 
> >>set, in
> >>which case the key is set immediately. Thus, depending on the value of 
> >>config
> >>option, we may observe different behavior.
> >>
> >>In addition, when we come to __jump_label_transform() from 
> >>jump_label_init(),
> >>the key (paravirt_ticketlocks_enabled) is already enabled. On processors 
> >>where
> >>ideal_nop is not the same as default_nop this will cause a BUG() since it is
> >>expected that before a key is enabled the latter is replaced by the former
> >>during initialization.
> >>
> >>To address this problem we need to move
> >>static_key_slow_inc(_ticketlocks_enabled) so that it is called
> >>after jump_label_init(). We also need to make sure that this is done before
> >>other cpus start to boot. early_initcall appears to be  a good place to do 
> >>so.
> >>(Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
> >>need to be set before alternative_instructions() runs.)
> >>
> >Reviewed-by: Steven Rostedt 
> >
> >Peter,
> >
> >This fixes a regression in 3.12 against xen. Please pull and push to
> >Linus sometime soon.
> 
> Peter,
> 
> Are you planning on taking this patch?

If he hasn't done yet (and I don't see a tip-bot email so I think the answer
is no) I can do it (as I am back from my mini vacation).

Thanks for the ping!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-24 Thread Boris Ostrovsky

On 09/12/2013 10:47 PM, Steven Rostedt wrote:

On Thu, 12 Sep 2013 22:29:44 -0400
Boris Ostrovsky  wrote:


From: Konrad Rzeszutek Wilk 

xen_init_spinlocks() currently calls static_key_slow_inc() before
jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
the case) the effect of this static_key_slow_inc() is deferred until after
jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, in
which case the key is set immediately. Thus, depending on the value of config
option, we may observe different behavior.

In addition, when we come to __jump_label_transform() from jump_label_init(),
the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
ideal_nop is not the same as default_nop this will cause a BUG() since it is
expected that before a key is enabled the latter is replaced by the former
during initialization.

To address this problem we need to move
static_key_slow_inc(_ticketlocks_enabled) so that it is called
after jump_label_init(). We also need to make sure that this is done before
other cpus start to boot. early_initcall appears to be  a good place to do so.
(Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
need to be set before alternative_instructions() runs.)


Reviewed-by: Steven Rostedt 

Peter,

This fixes a regression in 3.12 against xen. Please pull and push to
Linus sometime soon.


Peter,

Are you planning on taking this patch?

Thanks.
-boris




Thanks,

-- Steve


Signed-off-by: Konrad Rzeszutek Wilk 
Signed-off-by: Boris Ostrovsky 
---
  arch/x86/xen/spinlock.c | 11 +--
  1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 253f63f..d90628d 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
return;
}
  
-	static_key_slow_inc(_ticketlocks_enabled);

-
pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
pv_lock_ops.unlock_kick = xen_unlock_kick;
  }
+static __init int xen_init_spinlocks_jump(void)
+{
+   if (!xen_pvspin)
+   return 0;
+
+   static_key_slow_inc(_ticketlocks_enabled);
+   return 0;
+}
+early_initcall(xen_init_spinlocks_jump);
  
  static __init int xen_parse_nopvspin(char *arg)

  {


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


Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-24 Thread Boris Ostrovsky

On 09/12/2013 10:47 PM, Steven Rostedt wrote:

On Thu, 12 Sep 2013 22:29:44 -0400
Boris Ostrovsky boris.ostrov...@oracle.com wrote:


From: Konrad Rzeszutek Wilk konrad.w...@oracle.com

xen_init_spinlocks() currently calls static_key_slow_inc() before
jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
the case) the effect of this static_key_slow_inc() is deferred until after
jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, in
which case the key is set immediately. Thus, depending on the value of config
option, we may observe different behavior.

In addition, when we come to __jump_label_transform() from jump_label_init(),
the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
ideal_nop is not the same as default_nop this will cause a BUG() since it is
expected that before a key is enabled the latter is replaced by the former
during initialization.

To address this problem we need to move
static_key_slow_inc(paravirt_ticketlocks_enabled) so that it is called
after jump_label_init(). We also need to make sure that this is done before
other cpus start to boot. early_initcall appears to be  a good place to do so.
(Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
need to be set before alternative_instructions() runs.)


Reviewed-by: Steven Rostedt rost...@goodmis.org

Peter,

This fixes a regression in 3.12 against xen. Please pull and push to
Linus sometime soon.


Peter,

Are you planning on taking this patch?

Thanks.
-boris




Thanks,

-- Steve


Signed-off-by: Konrad Rzeszutek Wilk konrad.w...@oracle.com
Signed-off-by: Boris Ostrovsky boris.ostrov...@oracle.com
---
  arch/x86/xen/spinlock.c | 11 +--
  1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 253f63f..d90628d 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
return;
}
  
-	static_key_slow_inc(paravirt_ticketlocks_enabled);

-
pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
pv_lock_ops.unlock_kick = xen_unlock_kick;
  }
+static __init int xen_init_spinlocks_jump(void)
+{
+   if (!xen_pvspin)
+   return 0;
+
+   static_key_slow_inc(paravirt_ticketlocks_enabled);
+   return 0;
+}
+early_initcall(xen_init_spinlocks_jump);
  
  static __init int xen_parse_nopvspin(char *arg)

  {


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


Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-24 Thread Konrad Rzeszutek Wilk
On Tue, Sep 24, 2013 at 12:50:45PM -0700, Boris Ostrovsky wrote:
 On 09/12/2013 10:47 PM, Steven Rostedt wrote:
 On Thu, 12 Sep 2013 22:29:44 -0400
 Boris Ostrovsky boris.ostrov...@oracle.com wrote:
 
 From: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 
 xen_init_spinlocks() currently calls static_key_slow_inc() before
 jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually 
 is
 the case) the effect of this static_key_slow_inc() is deferred until after
 jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not 
 set, in
 which case the key is set immediately. Thus, depending on the value of 
 config
 option, we may observe different behavior.
 
 In addition, when we come to __jump_label_transform() from 
 jump_label_init(),
 the key (paravirt_ticketlocks_enabled) is already enabled. On processors 
 where
 ideal_nop is not the same as default_nop this will cause a BUG() since it is
 expected that before a key is enabled the latter is replaced by the former
 during initialization.
 
 To address this problem we need to move
 static_key_slow_inc(paravirt_ticketlocks_enabled) so that it is called
 after jump_label_init(). We also need to make sure that this is done before
 other cpus start to boot. early_initcall appears to be  a good place to do 
 so.
 (Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
 need to be set before alternative_instructions() runs.)
 
 Reviewed-by: Steven Rostedt rost...@goodmis.org
 
 Peter,
 
 This fixes a regression in 3.12 against xen. Please pull and push to
 Linus sometime soon.
 
 Peter,
 
 Are you planning on taking this patch?

If he hasn't done yet (and I don't see a tip-bot email so I think the answer
is no) I can do it (as I am back from my mini vacation).

Thanks for the ping!
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-12 Thread Steven Rostedt
On Thu, 12 Sep 2013 22:29:44 -0400
Boris Ostrovsky  wrote:

> From: Konrad Rzeszutek Wilk 
> 
> xen_init_spinlocks() currently calls static_key_slow_inc() before
> jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
> the case) the effect of this static_key_slow_inc() is deferred until after
> jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, 
> in
> which case the key is set immediately. Thus, depending on the value of config
> option, we may observe different behavior.
> 
> In addition, when we come to __jump_label_transform() from jump_label_init(),
> the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
> ideal_nop is not the same as default_nop this will cause a BUG() since it is
> expected that before a key is enabled the latter is replaced by the former
> during initialization.
> 
> To address this problem we need to move
> static_key_slow_inc(_ticketlocks_enabled) so that it is called
> after jump_label_init(). We also need to make sure that this is done before
> other cpus start to boot. early_initcall appears to be  a good place to do so.
> (Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
> need to be set before alternative_instructions() runs.)
> 

Reviewed-by: Steven Rostedt 

Peter,

This fixes a regression in 3.12 against xen. Please pull and push to
Linus sometime soon.

Thanks,

-- Steve

> Signed-off-by: Konrad Rzeszutek Wilk 
> Signed-off-by: Boris Ostrovsky 
> ---
>  arch/x86/xen/spinlock.c | 11 +--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
> index 253f63f..d90628d 100644
> --- a/arch/x86/xen/spinlock.c
> +++ b/arch/x86/xen/spinlock.c
> @@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
>   return;
>   }
>  
> - static_key_slow_inc(_ticketlocks_enabled);
> -
>   pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
>   pv_lock_ops.unlock_kick = xen_unlock_kick;
>  }
> +static __init int xen_init_spinlocks_jump(void)
> +{
> + if (!xen_pvspin)
> + return 0;
> +
> + static_key_slow_inc(_ticketlocks_enabled);
> + return 0;
> +}
> +early_initcall(xen_init_spinlocks_jump);
>  
>  static __init int xen_parse_nopvspin(char *arg)
>  {

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


[PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-12 Thread Boris Ostrovsky
From: Konrad Rzeszutek Wilk 

xen_init_spinlocks() currently calls static_key_slow_inc() before
jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
the case) the effect of this static_key_slow_inc() is deferred until after
jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, in
which case the key is set immediately. Thus, depending on the value of config
option, we may observe different behavior.

In addition, when we come to __jump_label_transform() from jump_label_init(),
the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
ideal_nop is not the same as default_nop this will cause a BUG() since it is
expected that before a key is enabled the latter is replaced by the former
during initialization.

To address this problem we need to move
static_key_slow_inc(_ticketlocks_enabled) so that it is called
after jump_label_init(). We also need to make sure that this is done before
other cpus start to boot. early_initcall appears to be  a good place to do so.
(Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
need to be set before alternative_instructions() runs.)

Signed-off-by: Konrad Rzeszutek Wilk 
Signed-off-by: Boris Ostrovsky 
---
 arch/x86/xen/spinlock.c | 11 +--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 253f63f..d90628d 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
return;
}
 
-   static_key_slow_inc(_ticketlocks_enabled);
-
pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
pv_lock_ops.unlock_kick = xen_unlock_kick;
 }
+static __init int xen_init_spinlocks_jump(void)
+{
+   if (!xen_pvspin)
+   return 0;
+
+   static_key_slow_inc(_ticketlocks_enabled);
+   return 0;
+}
+early_initcall(xen_init_spinlocks_jump);
 
 static __init int xen_parse_nopvspin(char *arg)
 {
-- 
1.8.1.4

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


[PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-12 Thread Boris Ostrovsky
From: Konrad Rzeszutek Wilk konrad.w...@oracle.com

xen_init_spinlocks() currently calls static_key_slow_inc() before
jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
the case) the effect of this static_key_slow_inc() is deferred until after
jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, in
which case the key is set immediately. Thus, depending on the value of config
option, we may observe different behavior.

In addition, when we come to __jump_label_transform() from jump_label_init(),
the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
ideal_nop is not the same as default_nop this will cause a BUG() since it is
expected that before a key is enabled the latter is replaced by the former
during initialization.

To address this problem we need to move
static_key_slow_inc(paravirt_ticketlocks_enabled) so that it is called
after jump_label_init(). We also need to make sure that this is done before
other cpus start to boot. early_initcall appears to be  a good place to do so.
(Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
need to be set before alternative_instructions() runs.)

Signed-off-by: Konrad Rzeszutek Wilk konrad.w...@oracle.com
Signed-off-by: Boris Ostrovsky boris.ostrov...@oracle.com
---
 arch/x86/xen/spinlock.c | 11 +--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 253f63f..d90628d 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
return;
}
 
-   static_key_slow_inc(paravirt_ticketlocks_enabled);
-
pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
pv_lock_ops.unlock_kick = xen_unlock_kick;
 }
+static __init int xen_init_spinlocks_jump(void)
+{
+   if (!xen_pvspin)
+   return 0;
+
+   static_key_slow_inc(paravirt_ticketlocks_enabled);
+   return 0;
+}
+early_initcall(xen_init_spinlocks_jump);
 
 static __init int xen_parse_nopvspin(char *arg)
 {
-- 
1.8.1.4

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


Re: [PATCH] xen: Do not enable spinlocks before jump_label_init() has executed

2013-09-12 Thread Steven Rostedt
On Thu, 12 Sep 2013 22:29:44 -0400
Boris Ostrovsky boris.ostrov...@oracle.com wrote:

 From: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 
 xen_init_spinlocks() currently calls static_key_slow_inc() before
 jump_label_init() is invoked. When CONFIG_JUMP_LABEL is set (which usually is
 the case) the effect of this static_key_slow_inc() is deferred until after
 jump_label_init(). This is different from when CONFIG_JUMP_LABEL is not set, 
 in
 which case the key is set immediately. Thus, depending on the value of config
 option, we may observe different behavior.
 
 In addition, when we come to __jump_label_transform() from jump_label_init(),
 the key (paravirt_ticketlocks_enabled) is already enabled. On processors where
 ideal_nop is not the same as default_nop this will cause a BUG() since it is
 expected that before a key is enabled the latter is replaced by the former
 during initialization.
 
 To address this problem we need to move
 static_key_slow_inc(paravirt_ticketlocks_enabled) so that it is called
 after jump_label_init(). We also need to make sure that this is done before
 other cpus start to boot. early_initcall appears to be  a good place to do so.
 (Note that we cannot move whole xen_init_spinlocks() there since pv_lock_ops
 need to be set before alternative_instructions() runs.)
 

Reviewed-by: Steven Rostedt rost...@goodmis.org

Peter,

This fixes a regression in 3.12 against xen. Please pull and push to
Linus sometime soon.

Thanks,

-- Steve

 Signed-off-by: Konrad Rzeszutek Wilk konrad.w...@oracle.com
 Signed-off-by: Boris Ostrovsky boris.ostrov...@oracle.com
 ---
  arch/x86/xen/spinlock.c | 11 +--
  1 file changed, 9 insertions(+), 2 deletions(-)
 
 diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
 index 253f63f..d90628d 100644
 --- a/arch/x86/xen/spinlock.c
 +++ b/arch/x86/xen/spinlock.c
 @@ -267,11 +267,18 @@ void __init xen_init_spinlocks(void)
   return;
   }
  
 - static_key_slow_inc(paravirt_ticketlocks_enabled);
 -
   pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
   pv_lock_ops.unlock_kick = xen_unlock_kick;
  }
 +static __init int xen_init_spinlocks_jump(void)
 +{
 + if (!xen_pvspin)
 + return 0;
 +
 + static_key_slow_inc(paravirt_ticketlocks_enabled);
 + return 0;
 +}
 +early_initcall(xen_init_spinlocks_jump);
  
  static __init int xen_parse_nopvspin(char *arg)
  {

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