All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Gang <gang.chen@asianux.com>
To: paulmck@linux.vnet.ibm.com
Cc: dipankar@in.ibm.com,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] kernel/rcutree.c: deem to be lazy if there are no callbacks.
Date: Wed, 21 Aug 2013 13:59:29 +0800	[thread overview]
Message-ID: <52145741.7000008@asianux.com> (raw)
In-Reply-To: <5212F467.8090407@asianux.com>


If we still doubt about it, but can not find a suitable way to fix it
(neither of us are familiar with it).

Is it suitable to use BUG_ON() for it (the diff may like below) ?

-------------------------------diff begin-------------------------------

diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index dbf74b5..1d02659 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -2728,6 +2728,7 @@ static int rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
 		if (rdp->nxtlist)
 			hc = true;
 	}
+	BUG_ON(!hc && !al);
 	if (all_lazy)
 		*all_lazy = al;
 	return hc;

-------------------------------diff end---------------------------------

Thanks.


On 08/20/2013 12:45 PM, Chen Gang wrote:
> On 08/20/2013 12:43 PM, Chen Gang wrote:
>> On 08/20/2013 12:18 PM, Paul E. McKenney wrote:
>>> On Tue, Aug 20, 2013 at 11:51:23AM +0800, Chen Gang wrote:
>>>>
>>>>
>>>> If 'hc' is false, 'al' will never be false, either (only need check
>>>> "irdp->qlen != rdp->qlen_lazy' when 'rdp->nxtlist' existance).
>>>>
>>>> Recommend to improve the related code, like the diff below.
>>>
>>> Are you sure that this represents an improvement?  If so, why?
>>>
>>
>> If 'hc' and 'al' really has relationships, better to let 'C code'
>> express it, that will make the code clearer.
>>
>>> Or to put it another way, I see a patch that increases the size of the
>>> kernel by three lines.  What is the corresponding benefit given common
>>> kernel workloads?
>>>
>>
>> For 'al', need not check for each looping, and for 'hc', may save the
>> useless looping (so it can make performance better).
>>
>> For C code, it really increases 3 lines, but may not for assembly code
>> (excuse me, I am not check it, I think it is not important, although it
>> is easy to give a comparing for binary).
>>
> 
> Oh, sorry, I mean: only for our case, "it is not important".
> 
> 
>>> 							Thanx, Paul
>>>
>>>> ----------------------------------diff begin------------------------------------
>>>>
>>>> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
>>>> index 5b53a89..421caf0 100644
>>>> --- a/kernel/rcutree.c
>>>> +++ b/kernel/rcutree.c
>>>> @@ -2719,10 +2719,13 @@ static int rcd'_cpu_has_callbacks(int cpu, bool *all_lazy)
>>>>
>>>>  	for_each_rcu_flavor(rsp) {
>>>>  		rdp = per_cpu_ptr(rsp->rda, cpu);
>>>> -		if (rdp->qlen != rdp->qlen_lazy)
>>>> -			al = false;
>>>> -		if (rdp->nxtlist)
>>>> +		if (rdp->nxtlist) {
>>>>  			hc = true;
>>>> +			if (rdp->qlen != rdp->qlen_lazy) {
>>>> +				al = false;
>>>> +				break;
>>>> +			}
>>>> +		}
>>>>  	}
>>>>  	if (all_lazy)
>>>>  		*all_lazy = al;
>>>>
>>>> ----------------------------------diff end--------------------------------------
>>>>
>>>>
>>>> On 08/20/2013 11:50 AM, Chen Gang wrote:
>>>>> According to the comment above rcu_cpu_has_callbacks(): "If there are
>>>>> no callbacks, all of them are deemed to be lazy".
>>>>>
>>>>> So when both 'hc' and 'al' are false, '*all_lazy' should be true, not
>>>>> false.
>>>>>
>>>>>
>>>>> Signed-off-by: Chen Gang <gang.chen@asianux.com>
>>>>> ---
>>>>>  kernel/rcutree.c |    2 +-
>>>>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
>>>>> index 5b53a89..9ee9565 100644
>>>>> --- a/kernel/rcutree.c
>>>>> +++ b/kernel/rcutree.c
>>>>> @@ -2725,7 +2725,7 @@ static int rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
>>>>>  			hc = true;
>>>>>  	}
>>>>>  	if (all_lazy)
>>>>> -		*all_lazy = al;
>>>>> +		*all_lazy = !hc ? true : al;
>>>>>  	return hc;
>>>>>  }
>>>>>  
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Chen Gang
>>>>
>>>
>>>
>>>
>>
>>
> 
> 


-- 
Chen Gang

  reply	other threads:[~2013-08-21  6:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-20  3:50 [PATCH] kernel/rcutree.c: deem to be lazy if there are no callbacks Chen Gang
2013-08-20  3:51 ` Chen Gang
2013-08-20  4:18   ` Paul E. McKenney
2013-08-20  4:43     ` Chen Gang
2013-08-20  4:45       ` Chen Gang
2013-08-21  5:59         ` Chen Gang [this message]
2013-08-21 14:23           ` Paul E. McKenney
2013-08-22  3:01             ` Chen Gang
2013-08-25 19:18               ` Paul E. McKenney
2013-08-26  2:21                 ` Chen Gang F T
2013-09-03  5:41                   ` Chen Gang
2013-09-03 17:59                     ` Paul E. McKenney
2013-09-04  1:57                       ` Chen Gang
2013-09-03 19:36                   ` Paul E. McKenney
2013-09-04  2:41                     ` Chen Gang F T
2013-08-20  4:10 ` Paul E. McKenney
2013-08-20  4:30   ` Chen Gang

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=52145741.7000008@asianux.com \
    --to=gang.chen@asianux.com \
    --cc=dipankar@in.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.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.