summaryrefslogtreecommitdiffstats
path: root/sys/amd64/isa
Commit message (Collapse)AuthorAgeFilesLines
* Add ACPI S2-S4BIOS Suspend/Resume code.takawata2001-07-203-2/+53
| | | | | | Some problems may remain. Reviewed by:iwasaki
* The per-cpu temporary buffers are not needed since the pcb_save areas havetegge2001-07-171-14/+5
| | | | | | | the proper alignment. Change dummy variable in npxinit from stack to bss to ensure proper alignment. Reviewed by: bde
* Use PCPU_GET(cpuid) instead of curproc->p_oncpu.tegge2001-07-161-9/+9
| | | | Reviewed by: peter
* Fix another missed pcb_savefpu reference (inside NPX_DEBUG)peter2001-07-121-2/+2
|
* Activate SSE/SIMD. This is the extra context switching support thatpeter2001-07-121-11/+82
| | | | | | | | | | | | | | | we are required to do if we let user processes use the extra 128 bit registers etc. This is the base part of the diff I got from: http://www.issei.org/issei/FreeBSD/sse.html I believe this is by: Mr. SUZUKI Issei <issei@issei.org> SMP support apparently by: Takekazu KATO <kato@chino.it.okayama-u.ac.jp> Test code by: NAKAMURA Kazushi <kaz@kobe1995.net>, see http://kobe1995.net/~kaz/FreeBSD/SSE.en.html I have fixed a couple of style(9) deviations. I have some followup commits to fix a couple of non-style things.
* With Alfred's permission, remove vm_mtx in favor of a fine-grained approachdillon2001-07-041-7/+5
| | | | | | | | | (this commit is just the first stage). Also add various GIANT_ macros to formalize the removal of Giant, making it easy to test in a more piecemeal fashion. These macros will allow us to test fine-grained locks to a degree before removing Giant, and also after, and to remove Giant in a piecemeal fashion via sysctl's on those subsystems which the authors believe can operate without Giant.
* Repo copy i8237.h to dev/ic so we can get rid of some of the final vestigesimp2001-06-301-1/+1
| | | | of includes of i386 files from non-i386 ports.
* Don't assume that resource type is ioport and rid equal 0.nyan2001-06-171-5/+6
|
* Fix warnings:peter2001-06-151-3/+3
| | | | | 908: warning: long unsigned int format, unsigned int arg (arg 3) 887: warning: `timezero' defined but not used
* Clean up the code exporting interrupt statistics via sysctl a bit:tmm2001-06-015-6/+2
| | | | | | | | | | | | | - move the sysctl code to kern_intr.c - do not use INTRCNT_COUNT, but rather eintrcnt - intrcnt to determine the length of the intrcnt array - move the declarations of intrnames, eintrnames, intrcnt and eintrcnt from machine-dependent include files to sys/interrupt.h - remove the hw.nintr sysctl, it is not needed. - fix various style bugs Requested by: bde Reviewed by: bde (some time ago)
* lock vm while playing with pmapalfred2001-05-231-0/+9
|
* Convert npx interrupts into traps instead of vice versa. This is muchbde2001-05-221-75/+81
| | | | | | | | simpler for npx exceptions that start as traps (no assembly required...) and works better for npx exceptions that start as interrupts (there is no longer a problem for nested interrupts). Submitted by: original (pre-SMPng) version by luoqi
* Throw away the complications in npxsave() and their infrastructure.bde2001-05-201-53/+23
| | | | | | | | | | | | npxsave() went to great lengths to excecute fnsave with interrupts enabled in case executing it froze the CPU. This case can't happen, at least for Intel CPU/NPX's. Spurious IRQ13's don't imply spurious freezes. Anyway, the complications were usually no-ops because IRQ13 is not used on i486's and newer CPUs, and because SMPng broke them in rev.1.84. Forcible enabling of interrupts was changed to write_eflags(old_eflags), but since SMPng usually calls npxsave() from cpu_switch() with interrupts disabled, write_eflags() usually just kept interrupts disabled.
* Use a critical region to protect almost everything in npxinit().bde2001-05-201-0/+6
| | | | | | | | | | | npxinit() didn't have the usual race because it doesn't save to curpcb, but it may have had a worse form of it since it uses the npx when it doesn't "own" it. I'm not sure if locking prevented this. npxinit() is normally caled with the proc lock but not sched_lock. Use a critical region to protect pushing of curproc's npx state to curpcb in npxexit(). Not doing so was harmless since it at worst saved a wrong state to a dieing pcb.
* - Axe the IMEN_BITS and APIC_IMEN_BITS constants.jhb2001-05-171-4/+3
| | | | | | - Add back in a definition of NHWI which is preferred over ICU_LEN. Submitted by: bde
* Remove unneeded includes of sys/ipl.h and machine/ipl.h.jhb2001-05-154-4/+0
|
* Move the definition of HWI_MASK to the i386/isa/icu.h header right next tojhb2001-05-151-0/+2
| | | | the definition of ICU_LEN.
* - Use ICU_LEN rather than NHWI for the size of the array of ithreads.jhb2001-05-151-2/+1
| | | | - Remove unneeded include of sys/ipl.h.
* Fixed panics in npx exception handling. When using IRQ13 exceptionbde2001-05-021-7/+18
| | | | | | | | | | | | | | | | | | handling, SMPng always switches the npx context away from curproc before calling the handler, so the handler always paniced. When using exception 16 exception handling, SMPng sometimes switches the npx context away from curproc before calling the handler, so the handler sometimes paniced. Also, we didn't lock the context while using it, so we sometimes didn't detect the switch and then paniced in a less controlled way. Just lock the context while using it, and return without doing anything except clearing the busy latch if the context is not for curproc. This fixes the exception 16 case and makes the IRQ13 case harmless. In both cases, the instruction that caused the exception is restarted and the exception repeats. In the exception 16 case, we soon get an exception that can be handled without doing anything special. In the IRQ13 case, we get an easy to kill hung process.
* Undo part of the tangle of having sys/lock.h and sys/mutex.h included inmarkm2001-05-013-16/+20
| | | | | | | | | | | other "system" header files. Also help the deprecation of lockmgr.h by making it a sub-include of sys/lock.h and removing sys/lockmgr.h form kernel .c files. Sort sys/*.h includes where possible in affected files. OK'ed by: bde (with reservations)
* Add in a missing call to forward_hardclock() in the SMP case.jhb2001-04-281-0/+3
| | | | Submitted by: bde
* Overhaul of the SMP code. Several portions of the SMP kernel support havejhb2001-04-272-4/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | been made machine independent and various other adjustments have been made to support Alpha SMP. - It splits the per-process portions of hardclock() and statclock() off into hardclock_process() and statclock_process() respectively. hardclock() and statclock() call the *_process() functions for the current process so that UP systems will run as before. For SMP systems, it is simply necessary to ensure that all other processors execute the *_process() functions when the main clock functions are triggered on one CPU by an interrupt. For the alpha 4100, clock interrupts are delievered in a staggered broadcast fashion, so we simply call hardclock/statclock on the boot CPU and call the *_process() functions on the secondaries. For x86, we call statclock and hardclock as usual and then call forward_hardclock/statclock in the MD code to send an IPI to cause the AP's to execute forwared_hardclock/statclock which then call the *_process() functions. - forward_signal() and forward_roundrobin() have been reworked to be MI and to involve less hackery. Now the cpu doing the forward sets any flags, etc. and sends a very simple IPI_AST to the other cpu(s). AST IPIs now just basically return so that they can execute ast() and don't bother with setting the astpending or needresched flags themselves. This also removes the loop in forward_signal() as sched_lock closes the race condition that the loop worked around. - need_resched(), resched_wanted() and clear_resched() have been changed to take a process to act on rather than assuming curproc so that they can be used to implement forward_roundrobin() as described above. - Various other SMP variables have been moved to a MI subr_smp.c and a new header sys/smp.h declares MI SMP variables and API's. The IPI API's from machine/ipl.h have moved to machine/smp.h which is included by sys/smp.h. - The globaldata_register() and globaldata_find() functions as well as the SLIST of globaldata structures has become MI and moved into subr_smp.c. Also, the globaldata list is only available if SMP support is compiled in. Reviewed by: jake, peter Looked over by: eivind
* People are still having problems with i586_* on UP machines and SMPjhb2001-04-131-1/+1
| | | | | | machines, so just hack it to disable them for now until it can be fixed. Inspired by hair pulling of: asmodai
* Remove the BETTER_CLOCK #ifdef's. The code is on by default and is herejhb2001-04-101-4/+0
| | | | | | to stay for the foreseeable future. OK'd by: peter (the idea)
* Catch up to header include changes:jhb2001-03-281-3/+1
| | | | | - <sys/mutex.h> now requires <sys/systm.h> - <sys/mutex.h> and <sys/sx.h> now require <sys/lock.h>
* Switch from save/disable/restore_intr() to critical_enter/exit().jhb2001-03-281-16/+13
|
* Export intrnames and intrcnt as sysctls (hw.nintr, hw.intrnames andtmm2001-03-235-9/+10
| | | | | | hw.intrcnt). Approved by: rwatson
* Show the bzero() bandwidth in kBps instead of Bps; use u_int32_t insteaddes2001-03-191-3/+3
| | | | | | | of long and int64_t; and print the result as an unsigned long. This should make the output from the bzero() test more readable, and avoid printing a negative bandwidth. Note that this doesn't change the decision process, since that is based on time elapsed, not on computed bandwidth.
* Grab the process lock while calling psignal and before calling psignal.jhb2001-03-071-0/+2
|
* Don't enable interrupts before calling sched_ithd for threaded interrupts.jhb2001-03-053-3/+0
| | | | Tested by: obrien
* Remove the leading underscore from all symbols defined in x86 asmjake2001-02-257-46/+46
| | | | | | | | | | | and used in C or vice versa. The elf compiler uses the same names for both. Remove asnames.h with great prejudice; it has served its purpose. Note that this does not affect the ability to generate an aout kernel due to gcc's -mno-underscores option. moral support from: peter, jhb
* - Add a new ithread_schedule() function to do the bulk of the work ofjhb2001-02-201-52/+7
| | | | | | | | | | | | | | | | scheduling an interrupt thread to run when needed. This has the side effect of enabling support for entropy gathering from interrupts on all architectures. - Change the software interrupt and x86 and alpha hardware interrupt code to use ithread_schedule() for most of their processing when scheduling an interrupt to run. - Remove the pesky Warning message about interrupt threads having entropy enabled. I'm not sure why I put that in there in the first place. - Add more error checking for parameters and change some cases that returned EINVAL to panic on failure instead via KASSERT(). - Instead of doing a documented evil hack of setting the P_NOLOAD flag on every interrupt thread whose pri was SWI_CLOCK, set the flag explicity for clk_ithd's proc during start_softintr().
* Fixed style bugs in clock.c rev.1.164 and cpu.h rev.1.52-1.53 -- declarebde2001-02-191-6/+1
| | | | | | tsc_present in the right places (together with other variables of the same linkage), and don't use messy ifdefs just to avoid exporting it in some cases.
* Allow the superuser to prefent all interrupt harvesting onmarkm2001-02-181-1/+1
| | | | her system.
* RIP <machine/lock.h>.markm2001-02-113-9/+0
| | | | | | | Some things needed bits of <i386/include/lock.h> - cy.c now has its own (only) copy of the COM_(UN)LOCK() macros, and IMASK_(UN)LOCK() has been moved to <i386/include/apic.h> (AKA <machine/apic.h>). Reviewed by: jhb
* Re-enable preemption on interrupts. My last commit accidentally revertedjhb2001-02-101-1/+8
| | | | it as I was playing with some other ways of doing kernel preemption.
* Catch up to changes to inthand_add().jhb2001-02-091-8/+8
|
* Use the MI ithread helper functions in the x86 interrupt code.jhb2001-02-094-417/+191
|
* Change and clean the mutex lock interface.bmilekic2001-02-095-29/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mtx_enter(lock, type) becomes: mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized) similarily, for releasing a lock, we now have: mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN. We change the caller interface for the two different types of locks because the semantics are entirely different for each case, and this makes it explicitly clear and, at the same time, it rids us of the extra `type' argument. The enter->lock and exit->unlock change has been made with the idea that we're "locking data" and not "entering locked code" in mind. Further, remove all additional "flags" previously passed to the lock acquire/release routines with the exception of two: MTX_QUIET and MTX_NOSWITCH The functionality of these flags is preserved and they can be passed to the lock/unlock routines by calling the corresponding wrappers: mtx_{lock, unlock}_flags(lock, flag(s)) and mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN locks, respectively. Re-inline some lock acq/rel code; in the sleep lock case, we only inline the _obtain_lock()s in order to ensure that the inlined code fits into a cache line. In the spin lock case, we inline recursion and actually only perform a function call if we need to spin. This change has been made with the idea that we generally tend to avoid spin locks and that also the spin locks that we do have and are heavily used (i.e. sched_lock) do recurse, and therefore in an effort to reduce function call overhead for some architectures (such as alpha), we inline recursion for this case. Create a new malloc type for the witness code and retire from using the M_DEV type. The new type is called M_WITNESS and is only declared if WITNESS is enabled. Begin cleaning up some machdep/mutex.h code - specifically updated the "optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently need those. Finally, caught up to the interface changes in all sys code. Contributors: jake, jhb, jasone (in no particular order)
* Implement preemptive scheduling of hardware interrupt threads.jake2001-02-012-2/+11
| | | | | | | | | | | | - If possible, context switch to the thread directly in sched_ithd(), rather than triggering a delayed ast reschedule. - Disable interrupts while restoring fpu state in the trap handler, in order to ensure that we are not preempted in the middle, which could cause migration to another cpu. Reviewed by: peter Tested by: peter (alpha)
* Convert mca (microchannel bus support) from something that we countpeter2001-01-293-13/+13
| | | | (bogus) to something that we test for the presence of.
* Send "#if NISA > 0" to the bit-bucket and replace it with an option.peter2001-01-292-8/+6
| | | | | These were compile-time "is the isa code present?" tests and not 'how many isa busses' tests.
* Clear intr_nesting_level when an interrupt thread has no morejake2001-01-282-0/+2
| | | | | | | handlers and wants to exit, so it doesn't panic in exit1() which malloc()s with M_WAITOK. Reported by: Bob Bishop <rb@gid.co.uk>
* Remove the Xforward_irq IPI.jhb2001-01-241-4/+0
|
* Make intr_nesting_level per-process, rather than per-cpu. Setupjake2001-01-215-6/+20
| | | | | | | | interrupt threads to run with it always >= 1, so that malloc can detect M_WAITOK from "interrupt" context. This is also necessary in order to context switch from sched_ithd() directly. Reviewed By: peter
* Remove MUTEX_DECLARE() and MTX_COLD. Instead, postpone full mutexjasone2001-01-211-1/+1
| | | | | | | | initialization until after malloc() is safe to call, then iterate through all mutexes and complete their initialization. This change is necessary in order to avoid some circular bootstrapping dependencies.
* - Make npx_intr INTR_MPSAFE and move acquiring Giant into thejake2001-01-201-1/+5
| | | | | | function itself. - Remove a hack to allow acquiring Giant from the npx asm trap vector.
* Convert apm from a bogus 'count' into a plain option. Clean out somepeter2001-01-191-3/+3
| | | | other cruft from the files.alpha and files.ia64 that were related to this.
* Add in a space that got lost in the previous commit in some debugging codejhb2001-01-191-1/+1
| | | | so that '&' becomes a binary operator and not a unary operator.
* EEK! I missed a couple of places with the 24->32 interrupt change.peter2001-01-193-2/+14
|
OpenPOWER on IntegriCloud