lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1394638899.26565.197.camel@linux-s257.site>
Date:	Wed, 12 Mar 2014 23:41:39 +0800
From:	joeyli <jlee@...e.com>
To:	"Rafael J. Wysocki" <rjw@...ysocki.net>
Cc:	Julian Wollrath <jwollrath@....de>,
	Thomas Gleixner <tglx@...utronix.de>, x86@...nel.org,
	LKML <linux-kernel@...r.kernel.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@...el.com>,
	"H. Peter Anvin" <hpa@...or.com>
Subject: Re: [RESEND] Fast TSC calibration fails with v3.14-rc1 and later

Hi Rafael, 

於 三,2014-03-12 於 14:30 +0100,Rafael J. Wysocki 提到:
> > But I wonder: Can we simply enable SCI later?  In other words, can
> we
> > split acpi_early_init() so that the part before
> acpi_enable_subsystem()
> > is done before timekeeping_init() and the part including and after
> > is done right after anon_vma_init()?  Would the TAD initialization
> work
> > then?
> 
> Below is a patch implementing that idea.  Julian, can you please test
> this one too?
> 
> Rafael
> 
> ---
>  drivers/acpi/bus.c   |   20 +++++++++++++++-----
>  include/linux/acpi.h |    1 +
>  init/main.c          |    1 +
>  3 files changed, 17 insertions(+), 5 deletions(-)
> 
> Index: linux-pm/drivers/acpi/bus.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/bus.c
> +++ linux-pm/drivers/acpi/bus.c
> @@ -494,11 +494,21 @@ void __init acpi_early_init(void)
>         }
>  
>         status = acpi_load_tables();
> -       if (ACPI_FAILURE(status)) {
> -               printk(KERN_ERR PREFIX
> -                      "Unable to load the System Description Tables
> \n");
> -               goto error0;
> -       }
> +       if (ACPI_SUCCESS(status))
> +               return;
> +
> +       printk(KERN_ERR PREFIX "Unable to load the System Description
> Tables\n");
> +
> + error0:
> +       disable_acpi();
> +}
> +
> +void __init acpi_subsystem_init(void)
> +{
> +       acpi_status status;
> +
> +       if (acpi_disabled)
> +               return;
>  

After check the DSDT of target machine, I afraid the above patch is not
enough to use _GRT and _SRT because they need opregion support of
SystemMemory and SystemIO for trigger SMM to access RTC.

In my current semifinished patches, I add code to run the
acpi_ev_install_region_handlers() in acpi_enable_subsystem() when
acpi_early_init(), for install region handler to support opregion.

Before install region_handlers, it call acpi_enable() to enable acpi
mode and I think need setup SCI interrupt before run acpi_enable():

acpi_early_init(void)
	acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
	acpi_enable_subsystem(u32 flags)
		acpi_enable();		/* Enable ACPI mode */
		acpi_tb_initialize_facs();
		acpi_ev_install_region_handlers();  /* Need it! */


For developing ACPI TAD support, I used SystemIO to access CMOS port in
DSDT of Intel DQ57 for simulate ACPI TAD. It also need SystemIO opregion
support as the real machine. I just run your patch on this machine but
it failed.

I think maybe still using ACPI_FADT_NO_CMOS_RTC to check does
acpi_early_init() need run before timekeeping_init().
If there have any future machine that applied ACPI TAD but "Fast TSC
calibration" fail, at least the alternate TSC calibration can work
around issue.


Thanks a lot!
Joey Lee

--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ