summaryrefslogtreecommitdiff
path: root/sys/arch/i386/include/cpu.h
AgeCommit message (Collapse)Author
2012-10-09Enable Supervisor Mode Execution Protection (SMEP), found in recentJonathan Gray
Intel chips. If the kernel is tricked into running code from a user page while in supervisor mode we'll now get a page fault and panic instead of running it. suggestions and ok guenther@, ok deraadt@
2012-03-27Make the bus_clock calculations happen later in the boot process soJonathan Gray
they can be conditionally called in future. This makes the i386 speedstep code closer to the amd64 code (though still with the added complications of VIA support and the *_update_cpuspeed callbacks)
2011-11-02display AMD/extended (0x80000001) cpuid flags and remove theJonathan Gray
Cyrix 3DNOW flag from normal cpuid flags as it will show up in extended flags. ok kettenis@
2011-05-23AMD K10/K11 pstate driver allows setperf and apm to change CPUClaudio Jeker
frequencies on newer AMD systems. Driver written by Bryan Steele / brynet gmail.com adjusted for i386 by myself. Put it in deraadt@
2011-04-22Remove unused structure member.Mark Kettenis
ok marco@, deraadt@
2011-03-23Normalize sentinel. Use _MACHINE_*_H_ and _<ARCH>_*_H_ properly and consitently.Paul Irofti
Discussed and okay drahn@. Okay deraadt@.
2010-10-02make ci_flags volatile; some future MD code will depend on this.Theo de Raadt
ok kettenis
2010-09-28Implement a per-cpu held mutex counter if DIAGNOSTIC on all non-x86 platforms,Miod Vallat
to complete matthew@'s commit of a few days ago, and drop __HAVE_CPU_MUTEX_LEVEL define. With help from, and ok deraadt@.
2010-09-24Add stricter asserts to DIAGNOSTIC kernels to help catch mutex andMatthew Dempsky
rwlock misuse. In particular, this commit makes the following changes: 1. i386 and amd64 now count the number of active mutexes so that assertwaitok(9) can detect attempts to sleep while holding a mutex. 2. i386 and amd64 check that we actually hold mutexes when passed to mtx_leave(). 3. Calls to rw_exit*() now call rw_assert_{rd,wr}lock() as appropriate. ok krw@, oga@; "sounds good to me" deraadt@; assembly bits double checked by pirofti@
2010-08-11Disable the RTC the periodic interrupt. Leaving it enabled causes theMark Kettenis
Dell Inspirion 4150 to wake up immediately even though RTC_EN isn't set in the PM1 Enable register. ok deraadt@, mlarkin@
2010-08-05new i386/amd64 machdep.lidsuspend sysctl which decides whether a lidTheo de Raadt
close causes a suspend. resumes are not tied to this; they happen unconditionally. this is a temporary knob for the 4.8 release; afterwards it will move to a more convenient place much moaning discussing where to put the knob with kettenis tested by various including phessler
2010-07-25in the clock drivers, seperate the soft-state and hard-state which wasTheo de Raadt
all jumbled up in the same functions. the rtc (mc chip) and clock (i8243) startup was also mixed up. they the soft state and hardware state can be started in the right order, and it is easy to restart just the neccessary parts upon resume. tested in numerous cases: (apic, pic) * (GENERIC.MP, GENERIC) * (mp, non-mp) * (i386, amd64) ok kettenis
2010-07-21Make sure that the FPU IPIs shoot down the right FPU context and not the FPUMark Kettenis
context of some random process that happened to be switched onto the FPU after the decision was made to send the IPI.
2010-05-23seteconf() died years agoTheo de Raadt
2009-12-09Detect the cache line size for the clflush instruction when we identifyOwain Ainsworth
the cpu. ok kettenis@ as part of a larger diff.
2009-06-03Just like on amd64. Instead of keeping a bitmap of which cpus a pmapArtur Grabowski
is active on, save a curpmap pointer in cpu_info. This lets us simplify a few things and do lazy context switching from a user process to a kernel thread. There's a new IPI introduced for forcing a cr3 reload when we're tearing down a dead pmap. kettenis@ ok (after I polished a few minor things)
2009-02-16Store conditionally extended cpuid family/model valuesJonathan Gray
in seperate variables in struct cpu_info instead of duplicating the process of extracting it from the signature. Use this value when determining the bus clock on P6/family 0x6 chips, which fixes speedstep on bernd@'s ThinkPad x200s. Discussed with several, 'just do it' weingart@, ok mikeb@
2008-11-22The last parts of cpu_unidle. i386, amd64 and sparc64Artur Grabowski
In short, make cpu_unidle do what signotify used to do and make signotify use cpu_unidle. Also, include a cpu_unidle in need_resched, it won't change much right now but will be needed in the future.
2008-10-15make random(9) return per-cpu values (by saving the seed in the cpuinfo),Theo de Raadt
which are uniform for the profclock on each cpu in a SMP system (but using a different seed for each cpu). on all cpus, avoid seeding with a value out of the [0, 2^31-1] range (since that is not stable) ok kettenis drahn
2008-09-28Remove "XXX for now" NLAPIC define. Already provided via lapic.h.Brad Smith
ok kettenis@
2008-07-18Add a macro that clears the want_resched flag that need_resched sets.Artur Grabowski
Right now when mi_switch picks up the same proc, we didn't clear the flag which would mean that every time we service an AST we would attempt a context switch. For some architectures, amd64 being probably the most extreme, that meant attempting to context switch for every trap and interrupt. Now we clear_resched explicitly after every context switch, even if it didn't do anything. Which also allows us to remove some more code in cpu_switchto (not done yet). miod@ ok
2008-06-09Remove fillw(). Bonus points if you do not remember what it was used for.Miod Vallat
2008-04-18Now that i386 has a per-process astpending, we can garbage collect ipi_astMark Kettenis
and do an ipi_nop cross-call from signotify() instead. ok miod@
2008-04-13garbage collect the cpus_running global variable;Thordur I. Bjornsson
pointed out by and ok drahn@, toby@;
2007-11-28quite a bit of simplification by removing cpu classes.Ted Unangst
also assume that 386 cpus are really unknown, and promote them to 486 instead of panic.
2007-11-16fix the bus_space #define nightmare, so that amd64 and i386 are much moreTheo de Raadt
uniform. as a result shared code like acpi needs less #ifdef's ok marco kettenis
2007-11-03APM switchto cleanup diff. This uses the switchto functionality toTobias Weingartner
significantly clean up the APM idle loop things. I actually can make sense of what the APM idle loop is supposed to do. Ok gwk@, beck@, and theo says ramdisks compile.
2007-09-07Remove some left-overs from the TSC based microtime. We don't needArtur Grabowski
to synchronize the tsc between CPUs anymore. While here, also remove the slow TLB IPI since it's been dead for a while. noticed by mickey toby@ ok
2007-06-07Replace magic bus clock constants in est related files with defines.Dimitry Andric
ok jsg
2007-05-29add support for core cpu temperature sensors.Ted Unangst
from a diff by pierre riteau, but updated to look like the amd64 version ok deraadt
2007-05-26Move cpu_info/curcpu to be mapped by the %fs segment. Extra input andTobias Weingartner
debugging by tom@, art@, kettenis@, and others. Testing by many others. ok art@, kettenis@, tom@
2007-04-21Introduce a smp aware hw.setperf mechanism, it will scale all CPUs orGordon Willem Klok
cores by the same amount, i.e. if you do hw.setperf=50 both cores will be scaled to the opearting state corresponing to 50%. Tested by many with est (mainly on core2duo machines like X60 thinkpads). Only enable est during GENERIC.MP build no one tested powernow. ok art@
2007-04-12Faster signal delivery on i386/MP.Artur Grabowski
We need to poke the other CPU so that it processes the AST immediately and doesn't wait for the next interrupt or syscall. Since IPIs really shouldn't process ASTs, we need to trigger a soft interrupt on the destination CPU to process the AST. But since we can't send soft interrupts to other CPUs, we send an IPI, that triggers a soft interrupt that in turn processes the AST. Also, this marks the beginning of moving to slightly better IPI mechanism of short and optimized IPIs instead of the large and complicated IPI infrastructure we're using now. tested by many, ok tholo@
2007-04-03Make the ast on i386 per-process instead of per-cpu. This makesArtur Grabowski
signal delivery more reliable in some cases when a process switches cpu. kettenis@ ok
2007-03-19Move i386 to timecounters. This is more or less the same code as amd64.Artur Grabowski
The "lapic" timer is ripped out since it wasn't actually a lapic timer, but a hacked up tsc timer with some synchronization for MP. There is no tsc timer right now since they are very unreliable on MP systems, systems with apm, and systems that change the cpu clock. Which basically means every modern machine out there. We're running with the i8259 timer now. deraadt@ ok
2007-03-15Since p_flag is often manipulated in interrupts and without biglockArtur Grabowski
it's a good idea to use atomic.h operations on it. This mechanic change updates all bit operations on p_flag to atomic_{set,clear}bits_int. Only exception is that P_OWEUPC is set by MI code before calling need_proftick and it's automatically cleared by ADDUPC. There's no reason for MD handling of that flag since everyone handles it the same way. kettenis@ ok
2007-02-20Revert PAE pmap for now, until the strange bug is found. This stopsTom Cosgrove
the freezes many of us are seeing (especially on amd64 machines running OpenBSD/i386). Much testing by nick@ (as always - thanks!), hugh@, ian@, kettenis@ and Sam Smith (s (at) msmith (dot) net). Requested by, input from, and ok deraadt@ ok art@, kettenis@, miod@
2006-12-24Define PROC_PC. Then, since profiling information is being reported inMiod Vallat
statclock(), do not bother doing this in userret() anymore. As a result, userret() does not need its pc and ticks arguments, simplify.
2006-12-20"#ifdef is a tool of the weak!"Gordon Willem Klok
Rename pentium_mhz to cpuspeed which is consistant with amd64 making shared ACPI code less nasty. ok marco, deraadt
2006-12-12Complete gwk's previous patch to stop setperf methods from returningDimitry Andric
errors to userland: make all cpu_setperf functions return void. Tested by many, ok gwk@
2006-11-29Remove all the extern cpu_{id,model,whatever} declarations from mostDimitry Andric
stuff in arch/i386/i386. This should prevent more screwups like the one I did before in ichpcib.c... ok dlg@ kettenis@
2006-11-29Remove cpu_swapin() and cpu_swapout(), they are no longer necessary (exceptMiod Vallat
for cpu_swapin() on hppa* which is kept).
2006-11-26Save misc info (ebx) register from cpuid with eax=1, so we can use itDimitry Andric
later for some identifications. "slap it in" deraadt
2006-07-25Kill option GPL_MATH_EMULATE.Mark Kettenis
ok deraadt@ and many others.
2006-06-12Some more improvements to EST:Dimitry Andric
- If an unknown EST CPU is encountered, use the known highest and lowest (and if different, the current) power state to generate a fake power state table on the fly. Thanks to canacar for the idea. - Calculate system bus clock speed before calling est_init(); it is needed to display proper MHz values from MSR values. - Also use the bus clock to identify EST CPU's, which is needed to differentiate e.g. Pentium M 715 and 760, which unfortunately have exactly the same MSR values. - Store power states directly as MSR values. Tested by many, "so when does it go in?" deraadt@
2006-05-29implement reliable microtime on smp (joint work w/ otto):Michael Shalayeff
send a bcast ipi from the cpu0 to all others to timestamp tsc on every clock intr. this way using local tsc provides accurate microtime() measurements. thus gettimeofday test passes now. otto@ deraadt@ ok
2006-05-19Reimplement the Enhanced SpeedStep CPU detection by using theDimitry Andric
quintuplet { vendor, MHz_hi, mV_hi, MHz_lo, mV_lo }, which works much better than parsing the branding string. It also makes it easier to add new models later. Shouldn't break any CPU's which previously worked okay with EST; if there's any trouble, please let me know! Also adds quite a number of VIA C7-M models, and a few more Pentium M models, all from FreeBSD. "go for it" deraadt@
2006-05-09Move the sti to after the memory write. We do not want execution ofOtto Moerbeek
this and microtime() to interleave. ok deraadt@ toby@ mickey@
2006-04-27implement separate PAE pmap that allows access to 64g of physmemMichael Shalayeff
if supported by the cpu(s). currently not enabled by default and not compiled into ramdisks. this grows paddr_t to 64bit but yet leaves bus_addr_t at 32bits. measures are taken to favour dmaable memory allocation from below 4g line such that buffer cache is already allocated form below, pool backend allocator prefers lower memory and then finally bounce buffers are used as last resort. PAE is engaged only if global variable cpu_pae is manually set to non-zero and there is physical memory present above 4g. simplify pcibios address math to use u_long as we always will be in the 32bit space.
2006-01-12Move to using gdt only (no more ldt in general case) but with a variableTobias Weingartner
limit selector, so that the w^x line can float much more dynamically. Much work done by tom. Tested by various people. Addresses concerns of (Julien Tinnes) <julien ATHOST cr0.org>