All of lore.kernel.org
 help / color / mirror / Atom feed
From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: Wang YanQing <udknight@gmail.com>,
	xiaoguangrong@cn.fujitsu.com, mingo@elte.hu,
	paulmck@linux.vnet.ibm.com, linux-kernel@vger.kernel.org,
	a.p.zijlstra@chello.nl, npiggin@suse.de,
	deepthi@linux.vnet.ibm.com, peterz@infradead.org,
	rusty@rustcorp.com.au, heiko.carstens@de.ibm.com,
	rostedt@goodmis.org, miltonm@bga.com,
	srivatsa.bhat@linux.vnet.ibm.com, jens.axboe@oracle.com,
	tj@kernel.org, akpm@linux-foundation.org,
	svaidy@linux.vnet.ibm.com, shli@kernel.org, tglx@linutronix.de,
	lig.fnst@cn.fujitsu.com, anton@samba.org,
	torvalds@linux-foundation.org, jbeulich@suse.com
Subject: Re: [PATCH 1/3] smp/ipi: Remove redundant cfd->cpumask_ipi mask
Date: Sun, 07 Jul 2013 22:15:06 +0530	[thread overview]
Message-ID: <51D99B12.7040407@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130706060317.GA3382@udknight>

Hi Wang,

On 07/06/2013 11:33 AM, Wang YanQing wrote:
> On Sat, Jul 06, 2013 at 10:59:39AM +0530, Preeti U Murthy wrote:
>> Hi Wang,
>>
>> On 07/06/2013 08:43 AM, Wang YanQing wrote:
>>> On Fri, Jul 05, 2013 at 09:57:01PM +0530, Preeti U Murthy wrote:
>>>> cfd->cpumask_ipi is used only in smp_call_function_many().The existing
>>>> comment around it says that this additional mask is used because
>>>> cfd->cpumask can get overwritten.
>>>>
>>>> There is no reason why the cfd->cpumask can be overwritten, since this
>>>> is a per_cpu mask; nobody can change it but us and we are
>>>> called with preemption disabled.
>>>
>>> The ChangeLog for f44310b98ddb7f0d06550d73ed67df5865e3eda5
>>> which import cfd->cpumask_ipi saied the reason why we need
>>> it:
>>>
>>> "    As explained by Linus as well:
>>>     
>>>      |
>>>      | Once we've done the "list_add_rcu()" to add it to the
>>>      | queue, we can have (another) IPI to the target CPU that can
>>>      | now see it and clear the mask.
>>>      |
>>>      | So by the time we get to actually send the IPI, the mask might
>>>      | have been cleared by another IPI.
>>
>> I am unable to understand where the cfd->cpumask of the source cpu is
>> getting cleared. Surely not by itself, since it is preempt disabled.
>> Also why should it get cleared?
> 
> Assume we have three CPUs: A,B,C
> 
> A call smp_call_function_many to notify C do something,
> and current it execute on finished below codes:
> 
> "for_each_cpu(cpu, cfd->cpumask) {
>                 struct call_single_data *csd = per_cpu_ptr(cfd->csd, cpu);
>                 struct call_single_queue *dst =
>                                         &per_cpu(call_single_queue, cpu);
>                 unsigned long flags;
> 
>                 csd_lock(csd);
>                 csd->func = func;
>                 csd->info = info;
> 
>                 raw_spin_lock_irqsave(&dst->lock, flags);
>                 list_add_tail(&csd->list, &dst->list);
>                 raw_spin_unlock_irqrestore(&dst->lock, flags);
>         }
> "
> You see "list_add_tail(&csd->list, &dst->list);", it pass the address of csd,
> and A stop before call arch_send_call_function_ipi_mask due interrupt.
> 
> At this time B send ipi to C also, then C will see the csd passed by A,
> then C will clear itself in the cfd->cpumask.

Ah ok! Thank you very much for this clarification :)

Regards
Preeti U Murthy


  reply	other threads:[~2013-07-07 16:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-05 16:26 [PATCH 0/3] smp/ipi: Minor cleanups in smp_call_function variants Preeti U Murthy
2013-07-05 16:27 ` [PATCH 1/3] smp/ipi: Remove redundant cfd->cpumask_ipi mask Preeti U Murthy
2013-07-06  3:13   ` Wang YanQing
2013-07-06  5:29     ` Preeti U Murthy
2013-07-06  6:03       ` Wang YanQing
2013-07-07 16:45         ` Preeti U Murthy [this message]
2013-07-05 16:27 ` [PATCH 2/3] smp/ipi:Clarify ambiguous comments around deadlock scenarios in smp_call_function variants Preeti U Murthy
2013-07-06  6:12   ` Wang YanQing
2013-07-06  7:48     ` Preeti U Murthy
2013-07-06 19:48       ` Thomas Gleixner
2013-07-07 16:29         ` Preeti U Murthy
2013-07-05 16:27 ` [PATCH 3/3] smp/ipi:Remove check around csd lock in handler for " Preeti U Murthy
2013-07-06  5:45   ` Wang YanQing
2013-07-06  8:06     ` Preeti U Murthy
2013-07-06 14:21       ` Wang YanQing
2013-07-07 16:23         ` Preeti U Murthy
2013-07-07 17:25           ` Wang YanQing

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=51D99B12.7040407@linux.vnet.ibm.com \
    --to=preeti@linux.vnet.ibm.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=anton@samba.org \
    --cc=deepthi@linux.vnet.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jbeulich@suse.com \
    --cc=jens.axboe@oracle.com \
    --cc=lig.fnst@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miltonm@bga.com \
    --cc=mingo@elte.hu \
    --cc=npiggin@suse.de \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=rusty@rustcorp.com.au \
    --cc=shli@kernel.org \
    --cc=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=svaidy@linux.vnet.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=udknight@gmail.com \
    --cc=xiaoguangrong@cn.fujitsu.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.