From: john stultz <johnstul@us.ibm.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Ian Campbell <Ian.Campbell@eu.citrix.com>,
mingo@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org,
andi@firstfloor.org, williams@redhat.com, schwidefsky@de.ibm.com,
mingo@elte.hu, linux-tip-commits@vger.kernel.org
Subject: Re: [PATCH] acpi/pm: If failed at validating ACPI PM timer, inhibit future reads.
Date: Fri, 14 Jan 2011 07:44:09 -0800 [thread overview]
Message-ID: <1295019849.2655.8.camel@work-vm> (raw)
In-Reply-To: <20110114140941.GA3062@dumpdata.com>
On Fri, 2011-01-14 at 09:09 -0500, Konrad Rzeszutek Wilk wrote:
> On Thu, Jan 13, 2011 at 11:15:16PM +0100, Thomas Gleixner wrote:
> > On Thu, 13 Jan 2011, Konrad Rzeszutek Wilk wrote:
> >
> > > tgl, John,
> > >
> > > Should I push this to Linus or are you guys going to push
> > > this patch during this merge window?
> >
> > Wait a moment. This patch is fresh of the press and not that urgent,
> > really.
>
> It is a regression compared to 2.6.37 kernel. I don't know the
> urgency requirements for regressions but I figured the earlier the
> better.
>
> >
> > > I've traced it down to the fact that when we boot under Xen we do
> > > not have the HPET enabled nor the ACPI PM timer setup. The
> >
> > Crap. If Xen would not have setup the pm timer then it would not even
> > reach the consistency check. It would simply bail out via
>
> Keep in mind that Linux (under Xen) does see the ACPI PM-Timer at bootup
> (it parses the ACPI tables), and when it tries to actually read the
> values, so past this point:
>
> >
> > if (!pmtmr_ioport)
> > return -ENODEV;
> >
>
> .. it fails at:
> if (i == ACPI_PM_READ_CHECKS) {
>
> and returns -ENODEV. So pmtmr_ioport was still valid at that time.
>
> > and the whole misery would not have happened at all. Though it's a
> > Good Thing that Xen is so screwed as it points to a real flaw which
> > might happen on real hardware as well. See below
> >
> > > hpet_enable() is never called (b/c xen_time_init is called), and
> > > for calibration of tsc_khz (calibrate_tsc == xen_tsc_khz) we
> > > get a valid value.
> > >
> > > So 'tsc_read_refs' tries to read the ACPI PM timer (acpi_pm_read_early),
> > > however that is disabled under Xen:
> > >
> > > [ 1.099272] calling init_acpi_pm_clocksource+0x0/0xdc @ 1
> > > [ 1.140186] PM-Timer failed consistency check (0x0xffffff) - aborting.
> > >
> > > So the tsc_calibrate_check gets called, it can't do HPET, and reading
> > > from ACPI PM timer results in getting 0xffffff.. .. and
> > > (0xffff..-0xffff..)/some other value results in div_zero.
> >
> > Nonsense. 0/(some other value) does not result in a divide by zero
> > except "some other value" is zero.
>
> <scratches his head> You are right.
The (0xffff - 0xffff) bit ends up as the divisor in calc_pmtmr_ref.
> >
> > > There is a check in 'tsc_refine_calibration_work' for invalid
> > > values:
> > >
> > > /* hpet or pmtimer available ? */
> > > if (!hpet && !ref_start && !ref_stop)
> > > goto out;
> > >
> > > But since ref_start and ref_stop have 0xffffff it does not trigger.
> > >
> > > This little fix makes the read to be 0 and the check triggers.
> >
> > First of all the patch disables the pm_timer completely, which happens
> > to results in a 0 read as a side effect. But the main point of this
>
> I does not look like a side-effect. Specifically:
>
> static inline u32 acpi_pm_read_early(void)
> {
> if (!pmtmr_ioport)
> return 0;
>
> return acpi_pm_read_verified() & ACPI_PM_MASK;
> }
>
> .. ends up taking the !pmtmr_ioport path which is what
> tsc_refine_calibration_work has a check for.
>
> > fix is to disable pmtimer in case of failure in the init function
> > completely.
> >
> > Further there are several error conditions in this init function and
> > we really need to disable pmtimer for all of them not just for the
> > case you encountered.
>
> Good point. What about this patch? John, is it OK if I carry
> your Ack-by on this modified patch?
I'm actually looking at a different fix, as I'm worried by Thomas'
comment about hitting the same issue on real hardware if we catch the
same pmtrm value both times.
thanks
-john
next prev parent reply other threads:[~2011-01-14 15:44 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-06 0:39 [PATCH] Greatly improve TSC calibration using a delayed workqueue John Stultz
2010-11-07 20:41 ` Andi Kleen
2010-11-08 22:04 ` john stultz
2010-11-09 13:43 ` Andi Kleen
2010-11-09 21:41 ` john stultz
2010-11-10 13:47 ` Andi Kleen
2010-12-05 11:18 ` [tip:x86/tsc] x86: Improve " tip-bot for John Stultz
2011-01-11 8:13 ` Kirill A. Shutemov
2011-01-11 8:26 ` Thomas Gleixner
2011-01-11 8:30 ` Kirill A. Shutemov
2011-01-11 8:37 ` Thomas Gleixner
2011-01-11 9:56 ` Kirill A. Shutemov
2011-01-11 10:26 ` Thomas Gleixner
2011-01-13 17:49 ` Konrad Rzeszutek Wilk
2011-01-13 18:01 ` john stultz
2011-01-13 21:40 ` [PATCH] acpi/pm: If failed at validating ACPI PM timer, inhibit future reads Konrad Rzeszutek Wilk
2011-01-13 22:15 ` Thomas Gleixner
2011-01-14 14:09 ` Konrad Rzeszutek Wilk
2011-01-14 15:44 ` john stultz [this message]
2011-01-14 15:54 ` john stultz
2011-01-14 16:02 ` Thomas Gleixner
2011-01-14 16:33 ` john stultz
2011-01-14 16:28 ` Konrad Rzeszutek Wilk
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=1295019849.2655.8.camel@work-vm \
--to=johnstul@us.ibm.com \
--cc=Ian.Campbell@eu.citrix.com \
--cc=andi@firstfloor.org \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=kirill@shutemov.name \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=schwidefsky@de.ibm.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tglx@linutronix.de \
--cc=williams@redhat.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.