From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Alex Chiang <achiang@hp.com>, "Luck, Tony" <tony.luck@intel.com>,
"stable@kernel.org" <stable@kernel.org>,
"linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] ia64: prevent irq migration race in __cpu_disable path
Date: Fri, 06 Feb 2009 23:17:09 +0000 [thread overview]
Message-ID: <20090206231709.GP10918@linux.vnet.ibm.com> (raw)
In-Reply-To: <20090206210550.GF2445@ldl.fc.hp.com>
On Fri, Feb 06, 2009 at 02:05:50PM -0700, Alex Chiang wrote:
> * Luck, Tony <tony.luck@intel.com>:
> > > This is wrong because fixup_irqs calls migrate_irqs, and in
> > > migrate_irqs, we use the cpu_online_map to:
> > >
> > > 1. look for interrupts on current CPU
> > > 2. if we find one, move it to the first available CPU in
> > > the cpu_online_map
> > >
> > > This means we can potentially migrate an interrupt off ourself
> > > back to... ourself. Uh oh.
> >
> > Should we make migrate_irqs smarter then ... does any caller really
> > expect that it would "migrate" the irq to the same cpu?
>
> The only thing migrate_irqs does is locate irqs that have their
> CPU affinity set to the current CPU, and if so, changes the
> affinity.
>
> We still have possible pending timer interrupts that we need to
> handle, so I'm not seeing how changing the migrate_irqs
> implementation (to avoid migrating to ourself) will handle that.
>
> On one hand, I think the only irq handler that can be called at
> this point is our timer_interrupt, which doesn't seem to be using
> any RCU APIs.
>
> On the other hand, if we really want to make sure that we're not
> calling interrupt handlers with our CPU marked as 'offline', then
> we need to fix ia64_process_pending_intr() so that we're not
> firing our timer_interrupt with a NULL pt_regs.
>
> Add in to the mix that x86 seems to have the same assumption that
> we do (that it's ok to call our timer interrupt handler even if
> we're already marked as 'offline').
>
> I'm leaning towards reverting Paul's previous commit entirely
> because
>
> - migrate_platform_irqs() doesn't cause any interrupt
> handlers to be fired by itself
>
> - it also uses cpu_online)map to find a new CPU to assign
> CPEI to
>
> Thoughts?
I would suggest at least a comment stating why it is safe to take the
interrupts on a CPU marked offline. As to the eventual solution, you
guys are the experts on your architecture.
Thanx, Paul
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Alex Chiang <achiang@hp.com>, "Luck, Tony" <tony.luck@intel.com>,
"stable@kernel.org" <stable@kernel.org>,
"linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] ia64: prevent irq migration race in __cpu_disable path
Date: Fri, 6 Feb 2009 15:17:09 -0800 [thread overview]
Message-ID: <20090206231709.GP10918@linux.vnet.ibm.com> (raw)
In-Reply-To: <20090206210550.GF2445@ldl.fc.hp.com>
On Fri, Feb 06, 2009 at 02:05:50PM -0700, Alex Chiang wrote:
> * Luck, Tony <tony.luck@intel.com>:
> > > This is wrong because fixup_irqs calls migrate_irqs, and in
> > > migrate_irqs, we use the cpu_online_map to:
> > >
> > > 1. look for interrupts on current CPU
> > > 2. if we find one, move it to the first available CPU in
> > > the cpu_online_map
> > >
> > > This means we can potentially migrate an interrupt off ourself
> > > back to... ourself. Uh oh.
> >
> > Should we make migrate_irqs smarter then ... does any caller really
> > expect that it would "migrate" the irq to the same cpu?
>
> The only thing migrate_irqs does is locate irqs that have their
> CPU affinity set to the current CPU, and if so, changes the
> affinity.
>
> We still have possible pending timer interrupts that we need to
> handle, so I'm not seeing how changing the migrate_irqs
> implementation (to avoid migrating to ourself) will handle that.
>
> On one hand, I think the only irq handler that can be called at
> this point is our timer_interrupt, which doesn't seem to be using
> any RCU APIs.
>
> On the other hand, if we really want to make sure that we're not
> calling interrupt handlers with our CPU marked as 'offline', then
> we need to fix ia64_process_pending_intr() so that we're not
> firing our timer_interrupt with a NULL pt_regs.
>
> Add in to the mix that x86 seems to have the same assumption that
> we do (that it's ok to call our timer interrupt handler even if
> we're already marked as 'offline').
>
> I'm leaning towards reverting Paul's previous commit entirely
> because
>
> - migrate_platform_irqs() doesn't cause any interrupt
> handlers to be fired by itself
>
> - it also uses cpu_online)map to find a new CPU to assign
> CPEI to
>
> Thoughts?
I would suggest at least a comment stating why it is safe to take the
interrupts on a CPU marked offline. As to the eventual solution, you
guys are the experts on your architecture.
Thanx, Paul
next prev parent reply other threads:[~2009-02-06 23:17 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-06 16:22 [PATCH] ia64: prevent irq migration race in __cpu_disable path Alex Chiang
2009-02-06 16:22 ` Alex Chiang
2009-02-06 17:00 ` Paul E. McKenney
2009-02-06 17:00 ` Paul E. McKenney
2009-02-06 18:07 ` Alex Chiang
2009-02-06 18:07 ` Alex Chiang
2009-02-06 18:33 ` Paul E. McKenney
2009-02-06 18:33 ` Paul E. McKenney
2009-02-06 18:43 ` Alex Chiang
2009-02-06 18:43 ` Alex Chiang
2009-02-06 18:42 ` Luck, Tony
2009-02-06 18:42 ` Luck, Tony
2009-02-06 21:05 ` Alex Chiang
2009-02-06 21:05 ` Alex Chiang
2009-02-06 23:17 ` Paul E. McKenney [this message]
2009-02-06 23:17 ` Paul E. McKenney
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=20090206231709.GP10918@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=achiang@hp.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@kernel.org \
--cc=tony.luck@intel.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.