[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090615210119.GD24554@elte.hu>
Date: Mon, 15 Jun 2009 23:01:19 +0200
From: Ingo Molnar <mingo@...e.hu>
To: "H. Peter Anvin" <hpa@...or.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@...ymtl.ca>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>,
Linus Torvalds <torvalds@...ux-foundation.org>,
mingo@...hat.com, paulus@...ba.org, acme@...hat.com,
linux-kernel@...r.kernel.org, penberg@...helsinki.fi,
vegard.nossum@...il.com, efault@....de, jeremy@...p.org,
npiggin@...e.de, tglx@...utronix.de,
linux-tip-commits@...r.kernel.org
Subject: Re: [tip:perfcounters/core] perf_counter: x86: Fix call-chain
support to use NMI-safe methods
* H. Peter Anvin <hpa@...or.com> wrote:
> Mathieu Desnoyers wrote:
> >>>
> >> Writing control registers is serializing, so it's a lot more expensive
> >> than writing a normal register; my *guess* is that it will be on the
> >> order of 100-200 cycles.
> >>
> >> That is not based on any actual information.
> >>
> >
> > Then how about just writing to the cr2 register *if* it has changed
> > while the NMI handler was running ?
> >
> > if (unlikely(read_cr2() != saved_cr2)))
> > write_cr2(saved_cr2)
> >
> > Mathieu
> >
>
> That works fine, obviously, and although it's probably overkill
> it's also a trivially cheap optimization.
Writing cr2 costs 84 cycles so it's not overkill at all - it's a
nice optimization!
Btw., we dont have to re-read it - we actually _know_ when we got a
fault (the fault handler gives us back an error code).
So we can do this common optimization and avoid the cr2 write
usually. We only need the cr2 read.
Hm, tempting ...
Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists