public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dipankar Sarma <dipankar@in.ibm.com>
To: Zwane Mwaikambo <zwane@holomorphy.com>
Cc: Corey Minyard <cminyard@mvista.com>,
	Linus Torvalds <torvalds@transmeta.com>,
	"Heater, Daniel (IndSys, GEFanuc,
	VMIC)" <Daniel.Heater@gefanuc.com>,
	John Levon <levon@movementarian.org>,
	linux-kernel@vger.kernel.org
Subject: Re: NMI handling rework for x86
Date: Fri, 15 Nov 2002 13:43:38 +0530	[thread overview]
Message-ID: <20021115134338.C5088@in.ibm.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0211150225490.2750-100000@montezuma.mastecende.com>; from zwane@holomorphy.com on Fri, Nov 15, 2002 at 02:40:10AM -0500

On Fri, Nov 15, 2002 at 02:40:10AM -0500, Zwane Mwaikambo wrote:
> On Fri, 15 Nov 2002, Dipankar Sarma wrote:
> > The RCU part is fairly simple - you want to avoid having to acquire
> > a lock for every NMI event to walk the handler so you do it
> > lockfree. If a process running in a different CPU tries to
> > free an nmi handler, it removes it from the list, issues an
> > rcu callback (to be invoked after all CPUs have gone through
> > a context switch or executed user-level code ensuring that the
> > deleted nmi handler can't be running) and waits for completion of
> 
> How are you so sure the handler isn't running? You can get an NMI after 
> any cpu instruction inbetween all of that happening, not to mention that 
> it can happen on multiple processors means since its a shared nmi handler 
> list, you're almost never going to find that list not being traversed at 
> some stage by a processor. Try synchronising the cpus for a removal when 
> they're all handling an NMI every millisecond.

Once you remove a handler from the list, any subsequent NMI is *not*
going to see the handler. So even if another CPU is executing the same
handler, if you wait for the RCU callback, you can guarantee that
no-one is executing the deleted handler. RCU will wait for all the
CPUs to context switch or execute user-level code atleast once.
That meant any other CPU which might have been executing the NMI
handler at the time of deletion has now exited from the handler.

> I don't think you can rely on completion() to ensure this. Its hardly an 

Corey's code doesn't rely on completion() to ensure this, it relies
on RCU to make sure that nobody is running the handler. The key is
that once the pointers between the prev and the next of the deleted
NMI handler are set, subsequent NMIs aren't going to see that handler.
context switch/user-level means that CPU must have exited any
NMI handler it may have been executing at the time of deletion.


> atomic operation in this context, whats wrong with spin_trylock(nmi_handler_lock) 
> and do an early bailout on failure?

spin_trylock modifies the lock cacheline, so cacheline bouncing.

Thanks
-- 
Dipankar Sarma  <dipankar@in.ibm.com> http://lse.sourceforge.net
Linux Technology Center, IBM Software Lab, Bangalore, India.

  reply	other threads:[~2002-11-15  8:02 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-15  4:30 NMI handling rework for x86 Corey Minyard
2002-11-15  4:40 ` Zwane Mwaikambo
2002-11-15  6:10   ` Dipankar Sarma
2002-11-15  7:40     ` Zwane Mwaikambo
2002-11-15  8:13       ` Dipankar Sarma [this message]
2002-11-15  8:18         ` Zwane Mwaikambo
2002-11-15  8:50           ` Dipankar Sarma
2002-11-15 17:41           ` John Levon
2002-11-15 22:46             ` Zwane Mwaikambo
2002-11-15  5:12 ` John Levon
2002-11-15  5:19   ` John Levon
2002-11-15 14:13   ` Corey Minyard
2002-11-15 17:48     ` John Levon
2002-11-15 19:00       ` Corey Minyard
2002-11-15 19:28         ` John Levon
2002-11-15 19:35           ` Corey Minyard
2002-11-17  2:00         ` John Levon
2002-11-17  2:31           ` Zwane Mwaikambo
2002-11-18 16:48             ` Corey Minyard
2002-11-18 15:34           ` Corey Minyard
2002-11-15  5:20 ` Randy.Dunlap
2002-11-15  9:50 ` Mikael Pettersson

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=20021115134338.C5088@in.ibm.com \
    --to=dipankar@in.ibm.com \
    --cc=Daniel.Heater@gefanuc.com \
    --cc=cminyard@mvista.com \
    --cc=levon@movementarian.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    --cc=zwane@holomorphy.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox