Re: [PATCH 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-07 Thread Wang YanQing
On Sun, Jul 07, 2013 at 09:53:48PM +0530, Preeti U Murthy wrote:
> > "
> >  /* 
> >   
> >   * Unlocked CSDs are valid through generic_exec_single():  
> >   
> >   */
> 
> I don't understand this comment. All callers of generic_exec_single()
> take the csd lock. So where is the scenario of csds being unlocked in
> generic_exec_single() before the call to
> arch_send_call_function_single_ipi() is made?
>   Rather what is the above comment trying to say?

I have given the answer to this question in last reply.

I don't know whether it is right to make a assumption through
this way that what you do currently:

Find all the current api users, and drop all the robust codes,
despite the unpredictable future users.

Ok, I know the balance between "robust" vs "performance",
robust check codes will bring performance penalty in fastest
code path, but the "penalty" is neglectable sometimes for
modern CPU.

I decide to respect the MAINTAINER's decision to accept this 
change or not.

Thanks.



--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-07 Thread Preeti U Murthy
Hi Wang,

On 07/06/2013 07:51 PM, Wang YanQing wrote:
> On Sat, Jul 06, 2013 at 01:36:27PM +0530, Preeti U Murthy wrote:
>> Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
>> Unlocking a parameter which is not locked should be seen as a bug, which
>> the above code is not doing. In fact it avoids it being reported as a bug.
> 
> Although I know what's your meaning, but just like the comment in code:
> 
> "
>  /*   
> 
>   * Unlocked CSDs are valid through generic_exec_single():
> 
>   */

I don't understand this comment. All callers of generic_exec_single()
take the csd lock. So where is the scenario of csds being unlocked in
generic_exec_single() before the call to
arch_send_call_function_single_ipi() is made?
  Rather what is the above comment trying to say?

> "
> 
> If the csd don't come from generic_exec_single, then
> Unlocked CSDs maybe are not valid. So we check CSD_FLAG_LOCK
> to avoid trigger the WARN_ON in csd_unlock.
> 
> Genric_exec_single's name imply it is a generic version,
> you know, maybe we will have "special" version.
> 
> Thanks.
> 

Regards
Preeti U Murthy

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-07 Thread Preeti U Murthy
Hi Wang,

On 07/06/2013 07:51 PM, Wang YanQing wrote:
 On Sat, Jul 06, 2013 at 01:36:27PM +0530, Preeti U Murthy wrote:
 Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
 Unlocking a parameter which is not locked should be seen as a bug, which
 the above code is not doing. In fact it avoids it being reported as a bug.
 
 Although I know what's your meaning, but just like the comment in code:
 
 
  /*   
 
   * Unlocked CSDs are valid through generic_exec_single():
 
   */

I don't understand this comment. All callers of generic_exec_single()
take the csd lock. So where is the scenario of csds being unlocked in
generic_exec_single() before the call to
arch_send_call_function_single_ipi() is made?
  Rather what is the above comment trying to say?

 
 
 If the csd don't come from generic_exec_single, then
 Unlocked CSDs maybe are not valid. So we check CSD_FLAG_LOCK
 to avoid trigger the WARN_ON in csd_unlock.
 
 Genric_exec_single's name imply it is a generic version,
 you know, maybe we will have special version.
 
 Thanks.
 

Regards
Preeti U Murthy

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-07 Thread Wang YanQing
On Sun, Jul 07, 2013 at 09:53:48PM +0530, Preeti U Murthy wrote:
  
   /* 

* Unlocked CSDs are valid through generic_exec_single():  

*/
 
 I don't understand this comment. All callers of generic_exec_single()
 take the csd lock. So where is the scenario of csds being unlocked in
 generic_exec_single() before the call to
 arch_send_call_function_single_ipi() is made?
   Rather what is the above comment trying to say?

I have given the answer to this question in last reply.

I don't know whether it is right to make a assumption through
this way that what you do currently:

Find all the current api users, and drop all the robust codes,
despite the unpredictable future users.

Ok, I know the balance between robust vs performance,
robust check codes will bring performance penalty in fastest
code path, but the penalty is neglectable sometimes for
modern CPU.

I decide to respect the MAINTAINER's decision to accept this 
change or not.

Thanks.



--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-06 Thread Wang YanQing
On Sat, Jul 06, 2013 at 01:36:27PM +0530, Preeti U Murthy wrote:
> Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
> Unlocking a parameter which is not locked should be seen as a bug, which
> the above code is not doing. In fact it avoids it being reported as a bug.

Although I know what's your meaning, but just like the comment in code:

"
 /* 
  
  * Unlocked CSDs are valid through generic_exec_single():  
  
  */
"

If the csd don't come from generic_exec_single, then
Unlocked CSDs maybe are not valid. So we check CSD_FLAG_LOCK
to avoid trigger the WARN_ON in csd_unlock.

Genric_exec_single's name imply it is a generic version,
you know, maybe we will have "special" version.

Thanks.
--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-06 Thread Preeti U Murthy
On 07/06/2013 11:15 AM, Wang YanQing wrote:
> On Fri, Jul 05, 2013 at 09:57:21PM +0530, Preeti U Murthy wrote:
>> call_single_data is always locked by all callers of
>> arch_send_call_function_single_ipi() or
>> arch_send_call_function_ipi_mask() which results in execution of
>> generic_call_function_interrupt() handler.
>>
>> Hence remove the check for lock on csd in generic_call_function_interrupt()
>> handler, before unlocking it.
> 
> I can't find where is the generic_call_function_interrupt :)

Sorry about this error :)
> 
>> Signed-off-by: Preeti U Murthy 
>> Cc: Peter Zijlstra 
>> Cc: Ingo Molnar 
>> Cc: Xiao Guangrong 
>> Cc: srivatsa.b...@linux.vnet.ibm.com
>> Cc: Paul E. McKenney 
>> Cc: Steven Rostedt 
>> Cc: Rusty Russell > ---
>>
>>  kernel/smp.c |   14 +-
>>  1 file changed, 1 insertion(+), 13 deletions(-)
>>
>> diff --git a/kernel/smp.c b/kernel/smp.c
>> index b6981ae..d37581a 100644
>> --- a/kernel/smp.c
>> +++ b/kernel/smp.c
>> @@ -181,25 +181,13 @@ void generic_smp_call_function_single_interrupt(void)
>>  
>>  while (!list_empty()) {
>>  struct call_single_data *csd;
>> -unsigned int csd_flags;
>>  
>>  csd = list_entry(list.next, struct call_single_data, list);
>>  list_del(>list);
>>  
>> -/*
>> - * 'csd' can be invalid after this call if flags == 0
>> - * (when called through generic_exec_single()),
>> - * so save them away before making the call:
>> - */
>> -csd_flags = csd->flags;
>> -
> 
> You haven't mention this change in the ChangeLog, don't do it.

Right, I will include it in the changelog.

> I can't see any harm to remove csd_flags, but I hope others
> check it again.
> 
>>  csd->func(csd->info);
>>  
>> -/*
>> - * Unlocked CSDs are valid through generic_exec_single():
>> - */
>> -if (csd_flags & CSD_FLAG_LOCK)
>> -csd_unlock(csd);
>> +csd_unlock(csd);
> 
> I don't like this change, I think check CSD_FLAG_LOCK 
> to make sure we really need csd_unlock is good.

Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
Unlocking a parameter which is not locked should be seen as a bug, which
the above code is not doing. In fact it avoids it being reported as a bug.

> 
> Just like you can't know who and how people will use the
> API, so some robust check code is good.
> 

Regards
Preeti U Murthy

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-06 Thread Preeti U Murthy
On 07/06/2013 11:15 AM, Wang YanQing wrote:
 On Fri, Jul 05, 2013 at 09:57:21PM +0530, Preeti U Murthy wrote:
 call_single_data is always locked by all callers of
 arch_send_call_function_single_ipi() or
 arch_send_call_function_ipi_mask() which results in execution of
 generic_call_function_interrupt() handler.

 Hence remove the check for lock on csd in generic_call_function_interrupt()
 handler, before unlocking it.
 
 I can't find where is the generic_call_function_interrupt :)

Sorry about this error :)
 
 Signed-off-by: Preeti U Murthy pre...@linux.vnet.ibm.com
 Cc: Peter Zijlstra a.p.zijls...@chello.nl
 Cc: Ingo Molnar mi...@elte.hu
 Cc: Xiao Guangrong xiaoguangr...@cn.fujitsu.com
 Cc: srivatsa.b...@linux.vnet.ibm.com
 Cc: Paul E. McKenney paul...@linux.vnet.ibm.com
 Cc: Steven Rostedt rost...@goodmis.org
 Cc: Rusty Russell ru...@rustcorp.com.au
 ---

  kernel/smp.c |   14 +-
  1 file changed, 1 insertion(+), 13 deletions(-)

 diff --git a/kernel/smp.c b/kernel/smp.c
 index b6981ae..d37581a 100644
 --- a/kernel/smp.c
 +++ b/kernel/smp.c
 @@ -181,25 +181,13 @@ void generic_smp_call_function_single_interrupt(void)
  
  while (!list_empty(list)) {
  struct call_single_data *csd;
 -unsigned int csd_flags;
  
  csd = list_entry(list.next, struct call_single_data, list);
  list_del(csd-list);
  
 -/*
 - * 'csd' can be invalid after this call if flags == 0
 - * (when called through generic_exec_single()),
 - * so save them away before making the call:
 - */
 -csd_flags = csd-flags;
 -
 
 You haven't mention this change in the ChangeLog, don't do it.

Right, I will include it in the changelog.

 I can't see any harm to remove csd_flags, but I hope others
 check it again.
 
  csd-func(csd-info);
  
 -/*
 - * Unlocked CSDs are valid through generic_exec_single():
 - */
 -if (csd_flags  CSD_FLAG_LOCK)
 -csd_unlock(csd);
 +csd_unlock(csd);
 
 I don't like this change, I think check CSD_FLAG_LOCK 
 to make sure we really need csd_unlock is good.

Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
Unlocking a parameter which is not locked should be seen as a bug, which
the above code is not doing. In fact it avoids it being reported as a bug.

 
 Just like you can't know who and how people will use the
 API, so some robust check code is good.
 

Regards
Preeti U Murthy

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-06 Thread Wang YanQing
On Sat, Jul 06, 2013 at 01:36:27PM +0530, Preeti U Murthy wrote:
 Ideally it should be under a WARN_ON(). csd_unlock() has that WARN_ON().
 Unlocking a parameter which is not locked should be seen as a bug, which
 the above code is not doing. In fact it avoids it being reported as a bug.

Although I know what's your meaning, but just like the comment in code:


 /* 
  
  * Unlocked CSDs are valid through generic_exec_single():  
  
  */


If the csd don't come from generic_exec_single, then
Unlocked CSDs maybe are not valid. So we check CSD_FLAG_LOCK
to avoid trigger the WARN_ON in csd_unlock.

Genric_exec_single's name imply it is a generic version,
you know, maybe we will have special version.

Thanks.
--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-05 Thread Wang YanQing
On Fri, Jul 05, 2013 at 09:57:21PM +0530, Preeti U Murthy wrote:
> call_single_data is always locked by all callers of
> arch_send_call_function_single_ipi() or
> arch_send_call_function_ipi_mask() which results in execution of
> generic_call_function_interrupt() handler.
> 
> Hence remove the check for lock on csd in generic_call_function_interrupt()
> handler, before unlocking it.

I can't find where is the generic_call_function_interrupt :)

> Signed-off-by: Preeti U Murthy 
> Cc: Peter Zijlstra 
> Cc: Ingo Molnar 
> Cc: Xiao Guangrong 
> Cc: srivatsa.b...@linux.vnet.ibm.com
> Cc: Paul E. McKenney 
> Cc: Steven Rostedt 
> Cc: Rusty Russell  ---
> 
>  kernel/smp.c |   14 +-
>  1 file changed, 1 insertion(+), 13 deletions(-)
> 
> diff --git a/kernel/smp.c b/kernel/smp.c
> index b6981ae..d37581a 100644
> --- a/kernel/smp.c
> +++ b/kernel/smp.c
> @@ -181,25 +181,13 @@ void generic_smp_call_function_single_interrupt(void)
>  
>   while (!list_empty()) {
>   struct call_single_data *csd;
> - unsigned int csd_flags;
>  
>   csd = list_entry(list.next, struct call_single_data, list);
>   list_del(>list);
>  
> - /*
> -  * 'csd' can be invalid after this call if flags == 0
> -  * (when called through generic_exec_single()),
> -  * so save them away before making the call:
> -  */
> - csd_flags = csd->flags;
> -

You haven't mention this change in the ChangeLog, don't do it.
I can't see any harm to remove csd_flags, but I hope others
check it again.

>   csd->func(csd->info);
>  
> - /*
> -  * Unlocked CSDs are valid through generic_exec_single():
> -  */
> - if (csd_flags & CSD_FLAG_LOCK)
> - csd_unlock(csd);
> + csd_unlock(csd);

I don't like this change, I think check CSD_FLAG_LOCK 
to make sure we really need csd_unlock is good.

Just like you can't know who and how people will use the
API, so some robust check code is good.
--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-05 Thread Preeti U Murthy
call_single_data is always locked by all callers of
arch_send_call_function_single_ipi() or
arch_send_call_function_ipi_mask() which results in execution of
generic_call_function_interrupt() handler.

Hence remove the check for lock on csd in generic_call_function_interrupt()
handler, before unlocking it.

Signed-off-by: Preeti U Murthy 
Cc: Peter Zijlstra 
Cc: Ingo Molnar 
Cc: Xiao Guangrong 
Cc: srivatsa.b...@linux.vnet.ibm.com
Cc: Paul E. McKenney 
Cc: Steven Rostedt 
Cc: Rusty Russell list);
 
-   /*
-* 'csd' can be invalid after this call if flags == 0
-* (when called through generic_exec_single()),
-* so save them away before making the call:
-*/
-   csd_flags = csd->flags;
-
csd->func(csd->info);
 
-   /*
-* Unlocked CSDs are valid through generic_exec_single():
-*/
-   if (csd_flags & CSD_FLAG_LOCK)
-   csd_unlock(csd);
+   csd_unlock(csd);
}
 }
 

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-05 Thread Preeti U Murthy
call_single_data is always locked by all callers of
arch_send_call_function_single_ipi() or
arch_send_call_function_ipi_mask() which results in execution of
generic_call_function_interrupt() handler.

Hence remove the check for lock on csd in generic_call_function_interrupt()
handler, before unlocking it.

Signed-off-by: Preeti U Murthy pre...@linux.vnet.ibm.com
Cc: Peter Zijlstra a.p.zijls...@chello.nl
Cc: Ingo Molnar mi...@elte.hu
Cc: Xiao Guangrong xiaoguangr...@cn.fujitsu.com
Cc: srivatsa.b...@linux.vnet.ibm.com
Cc: Paul E. McKenney paul...@linux.vnet.ibm.com
Cc: Steven Rostedt rost...@goodmis.org
Cc: Rusty Russell ru...@rustcorp.com.au
---

 kernel/smp.c |   14 +-
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/kernel/smp.c b/kernel/smp.c
index b6981ae..d37581a 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -181,25 +181,13 @@ void generic_smp_call_function_single_interrupt(void)
 
while (!list_empty(list)) {
struct call_single_data *csd;
-   unsigned int csd_flags;
 
csd = list_entry(list.next, struct call_single_data, list);
list_del(csd-list);
 
-   /*
-* 'csd' can be invalid after this call if flags == 0
-* (when called through generic_exec_single()),
-* so save them away before making the call:
-*/
-   csd_flags = csd-flags;
-
csd-func(csd-info);
 
-   /*
-* Unlocked CSDs are valid through generic_exec_single():
-*/
-   if (csd_flags  CSD_FLAG_LOCK)
-   csd_unlock(csd);
+   csd_unlock(csd);
}
 }
 

--
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 3/3] smp/ipi:Remove check around csd lock in handler for smp_call_function variants

2013-07-05 Thread Wang YanQing
On Fri, Jul 05, 2013 at 09:57:21PM +0530, Preeti U Murthy wrote:
 call_single_data is always locked by all callers of
 arch_send_call_function_single_ipi() or
 arch_send_call_function_ipi_mask() which results in execution of
 generic_call_function_interrupt() handler.
 
 Hence remove the check for lock on csd in generic_call_function_interrupt()
 handler, before unlocking it.

I can't find where is the generic_call_function_interrupt :)

 Signed-off-by: Preeti U Murthy pre...@linux.vnet.ibm.com
 Cc: Peter Zijlstra a.p.zijls...@chello.nl
 Cc: Ingo Molnar mi...@elte.hu
 Cc: Xiao Guangrong xiaoguangr...@cn.fujitsu.com
 Cc: srivatsa.b...@linux.vnet.ibm.com
 Cc: Paul E. McKenney paul...@linux.vnet.ibm.com
 Cc: Steven Rostedt rost...@goodmis.org
 Cc: Rusty Russell ru...@rustcorp.com.au
 ---
 
  kernel/smp.c |   14 +-
  1 file changed, 1 insertion(+), 13 deletions(-)
 
 diff --git a/kernel/smp.c b/kernel/smp.c
 index b6981ae..d37581a 100644
 --- a/kernel/smp.c
 +++ b/kernel/smp.c
 @@ -181,25 +181,13 @@ void generic_smp_call_function_single_interrupt(void)
  
   while (!list_empty(list)) {
   struct call_single_data *csd;
 - unsigned int csd_flags;
  
   csd = list_entry(list.next, struct call_single_data, list);
   list_del(csd-list);
  
 - /*
 -  * 'csd' can be invalid after this call if flags == 0
 -  * (when called through generic_exec_single()),
 -  * so save them away before making the call:
 -  */
 - csd_flags = csd-flags;
 -

You haven't mention this change in the ChangeLog, don't do it.
I can't see any harm to remove csd_flags, but I hope others
check it again.

   csd-func(csd-info);
  
 - /*
 -  * Unlocked CSDs are valid through generic_exec_single():
 -  */
 - if (csd_flags  CSD_FLAG_LOCK)
 - csd_unlock(csd);
 + csd_unlock(csd);

I don't like this change, I think check CSD_FLAG_LOCK 
to make sure we really need csd_unlock is good.

Just like you can't know who and how people will use the
API, so some robust check code is good.
--
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/