From owner-cvs-all Fri Nov 2 13:22:34 2001 Delivered-To: cvs-all@freebsd.org Received: from tasogare.imasy.or.jp (tasogare.imasy.or.jp [202.227.24.5]) by hub.freebsd.org (Postfix) with ESMTP id A9A2137B407; Fri, 2 Nov 2001 13:22:12 -0800 (PST) Received: from localhost (iwasaki.imasy.or.jp [202.227.24.92]) (authenticated as iwa with CRAM-MD5) by tasogare.imasy.or.jp (8.11.6+3.4W/8.11.6/tasogare) with ESMTP/inet id fA2LM9W97098; Sat, 3 Nov 2001 06:22:09 +0900 (JST) (envelope-from iwasaki@jp.FreeBSD.org) Date: Sat, 03 Nov 2001 06:23:19 +0900 (JST) Message-Id: <20011103.062319.41627011.iwasaki@jp.FreeBSD.org> To: jhb@FreeBSD.org Cc: cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org Subject: Re: cvs commit: src/sys/conf files src/sys/dev/acpica acpi.c src From: Mitsuru IWASAKI In-Reply-To: References: <200111011634.fA1GY8M18688@freefall.freebsd.org> X-Mailer: Mew version 2.0 on Emacs 20.7 / Mule 4.0 (HANANOEN) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Hi, > On 01-Nov-01 Mitsuru IWASAKI wrote: > > iwasaki 2001/11/01 08:34:08 PST > > > > Modified files: > > sys/conf files > > sys/dev/acpica acpi.c > > sys/dev/syscons syscons.c > > sys/i386/apm apm.c > > sys/i386/isa clock.c > > sys/sys kernel.h > > Added files: > > sys/kern subr_power.c > > sys/sys power.h > > Log: > > Some fix for the recent apm module changes. > > - Now that apm loadable module can inform its existence to other kernel > > components (e.g. i386/isa/clock.c:startrtclock()'s TCS hack). > > - Exchange priority of SI_SUB_CPU and SI_SUB_KLD for above purpose. > > - Add simple arbitration mechanism for APM vs. ACPI. This prevents > > the kernel enables both of them. > > - Remove obsolete `#ifdef DEV_APM' related code. > > - Add abstracted interface for Powermanagement operations. Public apm(4) > > functions, such as apm_suspend(), should be replaced new interfaces. > > Currently only power_pm_suspend (successor of apm_suspend) is > > implemented. > > > > Reviewed by: peter, arch@ and audit@ > > Hmm, I actually really don't like swapping those SYSINIT's. Probably what you > should do is do whwat the alpha does and initalize the timecounters during the > SI_SUB_CLOCKS sysinit. If SI_SUB_CLOCKS is before SI_SUB_KLD, then you should > create a SI_SUB_TC after SI_SUB_KLD and initialize timecounters there. Ok, like this? Index: i386/isa/clock.c =================================================================== RCS file: /home/ncvs/src/sys/i386/isa/clock.c,v retrieving revision 1.178 diff -u -r1.178 clock.c --- i386/isa/clock.c 1 Nov 2001 16:33:36 -0000 1.178 +++ i386/isa/clock.c 2 Nov 2001 12:07:27 -0000 @@ -788,8 +788,6 @@ } set_timer_freq(timer_freq, hz); - i8254_timecounter.tc_frequency = timer_freq; - tc_init(&i8254_timecounter); #ifndef CLK_USE_TSC_CALIBRATION if (tsc_freq != 0) { @@ -814,37 +812,6 @@ printf("TSC clock: %u Hz (Method B)\n", tsc_freq); #endif } - -#if !defined(SMP) - /* - * We can not use the TSC in SMP mode, until we figure out a - * cheap (impossible), reliable and precise (yeah right!) way - * to synchronize the TSCs of all the CPUs. - * Curse Intel for leaving the counter out of the I/O APIC. - */ - - /* - * We can not use the TSC if we support APM. Precise timekeeping - * on an APM'ed machine is at best a fools pursuit, since - * any and all of the time spent in various SMM code can't - * be reliably accounted for. Reading the RTC is your only - * source of reliable time info. The i8254 looses too of course - * but we need to have some kind of time... - * We don't know at this point whether APM is going to be used - * or not, nor when it might be activated. Play it safe. - */ - if (power_pm_get_type() == POWER_PM_TYPE_APM) { - if (bootverbose) - printf("TSC initialization skipped: APM enabled.\n"); - return; - } - - if (tsc_present && tsc_freq != 0 && !tsc_is_broken) { - tsc_timecounter.tc_frequency = tsc_freq; - tc_init(&tsc_timecounter); - } - -#endif /* !defined(SMP) */ } /* @@ -992,6 +959,34 @@ int apic_8254_trial; void *clkdesc; #endif /* APIC_IO */ + + i8254_timecounter.tc_frequency = timer_freq; + tc_init(&i8254_timecounter); +#if !defined(SMP) + /* + * We can not use the TSC in SMP mode, until we figure out a + * cheap (impossible), reliable and precise (yeah right!) way + * to synchronize the TSCs of all the CPUs. + * Curse Intel for leaving the counter out of the I/O APIC. + */ + + /* + * We can not use the TSC if we support APM. Precise timekeeping + * on an APM'ed machine is at best a fools pursuit, since + * any and all of the time spent in various SMM code can't + * be reliably accounted for. Reading the RTC is your only + * source of reliable time info. The i8254 looses too of course + * but we need to have some kind of time... + * We don't know at this point whether APM is going to be used + * or not, nor when it might be activated. Play it safe. + */ + if (power_pm_get_type() != POWER_PM_TYPE_APM && + tsc_present && tsc_freq != 0 && !tsc_is_broken) { + tsc_timecounter.tc_frequency = tsc_freq; + tc_init(&tsc_timecounter); + } + +#endif /* !defined(SMP) */ if (statclock_disable) { /* Index: sys/kernel.h =================================================================== RCS file: /home/ncvs/src/sys/sys/kernel.h,v retrieving revision 1.96 diff -u -r1.96 kernel.h --- sys/kernel.h 1 Nov 2001 16:34:06 -0000 1.96 +++ sys/kernel.h 2 Nov 2001 11:19:03 -0000 @@ -119,8 +119,8 @@ SI_SUB_WITNESS = 0x1A80000, /* witness initialization */ SI_SUB_LOCK = 0x1B00000, /* lockmgr locks */ SI_SUB_EVENTHANDLER = 0x1C00000, /* eventhandler init */ - SI_SUB_KLD = 0x2000000, /* KLD and module setup */ - SI_SUB_CPU = 0x2100000, /* CPU resource(s)*/ + SI_SUB_CPU = 0x2000000, /* CPU resource(s)*/ + SI_SUB_KLD = 0x2100000, /* KLD and module setup */ SI_SUB_INTRINSIC = 0x2200000, /* proc 0*/ SI_SUB_VM_CONF = 0x2300000, /* config VM, set limits*/ SI_SUB_RUN_QUEUE = 0x2400000, /* set up run queue*/ But I won't commit this unless weird problem is reported :-) However, if someone commit this I don't complain about it. > Logically, we need the CPU up and initialized before we start trying to figure > out what modules we have and how to init them. At least IMO. Hmmm, really? I checked all of SI_SUB_KLD sysinits and modevent functions briefly, but I didn't see any dependency on SI_SUB_CPU sysinits. I believe that kernel linker should not depend on CPU initialization... Thanks To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message