aboutsummaryrefslogtreecommitdiff
path: root/sys/ia64
Commit message (Collapse)AuthorAgeFilesLines
* MFC 214835:John Baldwin2011-01-251-4/+10
| | | | | | | | Adjust the order of operations in spinlock_enter() and spinlock_exit() to work properly with single-stepping in a kernel debugger. Notes: svn path=/stable/7/; revision=217856
* MFC: r204646Marius Strobl2010-10-171-7/+0
| | | | | | | | | | The NetBSD Foundation has granted permission to remove clause 3 and 4 from the software. Obtained from: NetBSD Notes: svn path=/stable/7/; revision=213957
* MFC r212413: bus_add_child: change type of order parameter to u_intAndriy Gapon2010-09-201-2/+2
| | | | Notes: svn path=/stable/7/; revision=212893
* MFC r197933:Konstantin Belousov2010-01-191-0/+2
| | | | | | | | | | Define architectural load bases for PIE binaries. MFC r198203: Change the load base to below 2GB for sparc64/sun4v. Notes: svn path=/stable/7/; revision=202642
* MFC 202019:Warner Losh2010-01-181-0/+1
| | | | | | | | Add INCLUDE_CONFIG_FILE in GENERIC on all non-embedded platforms. # This is the resolution of removing it from DEFAULTS... Notes: svn path=/stable/7/; revision=202547
* MFC r201443:Brooks Davis2010-01-121-0/+1
| | | | | | | Add vlan(4) to all GENERIC kernels. Notes: svn path=/stable/7/; revision=202135
* Revert 201164. Truly optional items like this do not belong on DEFAULTS.Warner Losh2010-01-041-7/+0
| | | | Notes: svn path=/stable/7/; revision=201536
* MFC r200594:Doug Barton2009-12-291-0/+7
| | | | | | | | Add INCLUDE_CONFIG_FILE, and a note in comments about how to also include the comments with CONFIGARGS Notes: svn path=/stable/7/; revision=201164
* MFC r189926:Konstantin Belousov2009-12-221-4/+2
| | | | | | | Add AT_EXECPATH ELF auxinfo entry type. Notes: svn path=/stable/7/; revision=200861
* MFC r186212 (by imp):Konstantin Belousov2009-12-221-12/+0
| | | | | | | | | | AT_DEBUG and AT_BRK were OBE like 10 years ago, so retire them. MFC r186225: Remove two remnant uses of AT_DEBUG. Notes: svn path=/stable/7/; revision=200858
* MFC: r195376Marius Strobl2009-12-171-17/+3
| | | | | | | | | | | | | | | Cleanup ALIGNED_POINTER: o add to platforms where it was missing (arm, i386, powerpc, sparc64, sun4v) o define as "1" on amd64 and i386 where there is no restriction o make the type returned consistent with ALIGN o remove _ALIGNED_POINTER o make associated comments consistent Reviewed by: bde, imp, marcel Approved by: sam (MFC to stable/7) Notes: svn path=/stable/7/; revision=200625
* MFC r197316Alan Cox2009-11-011-0/+2
| | | | | | | Add a new sysctl for reporting all of the supported page sizes. Notes: svn path=/stable/7/; revision=198742
* MFC 195840, 195844, and 196637:John Baldwin2009-09-141-1/+1
| | | | | | | | | | | Add a new type of VM object: OBJT_SG. An OBJT_SG object is very similar to a device pager (OBJT_DEVICE) object in that it uses fictitious pages to provide aliases to other memory addresses. The primary difference is that it uses an sglist(9) to determine the physical addresses for a given offset into the object instead of invoking the d_mmap() method in a device driver. Notes: svn path=/stable/7/; revision=197197
* MFC 193396, 193521, 194331, 194337, 194376, 194454, 194562, 194642, 195033,John Baldwin2009-09-042-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 195385, 195649, 195660, 195749, and 195774: Add support to the virtual memory system for configuring machine- dependent memory attributes: - Refactor contigmalloc() into two functions: a simple front-end that deals with the malloc tag and calls a new back-end, kmem_alloc_contig(), that allocates the pages and maps them. - Use kmem_alloc_contig() to implement the UMA back-end allocator for jumbo frame zones. - Use kmem_alloc_contig() to allocate the top-level page tables for PAE. - Introduce vm_memattr_t to as a type to hold memory attributes. - Introduce vm_object_set_memattr() for setting the default memory attributes that will be given to an object's pages. - Introduce and use pmap_page_{get,set}_memattr() for getting and setting a page's machine-dependent memory attributes. Add full support for these functions on amd64 and i386 and stubs for them on the other architectures. The function pmap_page_set_memattr() is also responsible for any other machine-dependent aspects of changing a page's memory attributes, such as flushing the cache or updating the direct map. The uses include kmem_alloc_contig(), vm_page_alloc(), and the device pager: kmem_alloc_contig() can now be used to allocate kernel memory with non-default memory attributes on amd64 and i386. vm_page_alloc() and the device pager will set the memory attributes for the real or fictitious page according to the object's default memory attributes. - Update the various pmap functions on amd64 and i386 that map pages to incorporate each page's memory attributes in the mapping. Reviewed by: alc Notes: svn path=/stable/7/; revision=196838
* MFC r195295:Ed Schouten2009-07-151-0/+1
| | | | | | | | | | | | | | Enable POSIX semaphores on all non-embedded architectures by default. More applications (including Firefox) seem to depend on this nowadays, so not having this enabled by default is a bad idea. Proposed by: miwi Patch by: Florian Smeets <flo kasimir com> Approved by: re (kib) Notes: svn path=/stable/7/; revision=195706
* MFC 179229 (alc), 195188: The VM system no longer uses setPQL2().Andriy Gapon2009-06-301-8/+0
| | | | | | | | | | Remove it and its helpers. Drop unused extern declarations in amd64 that seem to have been related. Reviewed by: alc Notes: svn path=/stable/7/; revision=195193
* Unbreak LINT.Fabien Thomas2009-06-071-0/+4
| | | | Notes: svn path=/stable/7/; revision=193641
* MFC:John Baldwin2009-05-191-1/+1
| | | | | | | | | - Add the interrupt vector number to intr_event_create so MI code can lookup hard interrupt events by number. - Add support to cpuset for binding hardware interrupts. Notes: svn path=/stable/7/; revision=192409
* MFC: Add a MI intr_event_handle() routine for the non-INTR_FILTER case.John Baldwin2009-05-191-46/+4
| | | | | | | | This allows all the INTR_FILTER #ifdef's to be removed from the MD interrupt code. Notes: svn path=/stable/7/; revision=192406
* MFC: Simplify the interrupt code a bit by always including the ie_disableJohn Baldwin2009-05-181-4/+1
| | | | | | | | and ie_eoi methods and collapsing down to a single intr_event_create() routine. Notes: svn path=/stable/7/; revision=192311
* MFC r191011:Konstantin Belousov2009-05-051-1/+4
| | | | | | | | | The bus_dmamap_load_uio(9) shall use pmap of the thread recorded in the uio_td to extract pages from, instead of unconditionally use kernel pmap. Notes: svn path=/stable/7/; revision=191809
* Merge r190708 from HEAD to stable/7:Dmitry Chagin2009-04-171-2/+2
| | | | | | | | | | | | | | | | | | Fix KBI breakage by r190520 which affects older linux.ko binaries: 1) Move the new field (brand_note) to the end of the Brandinfo structure. 2) Add a new flag BI_BRAND_NOTE that indicates that the brand_note pointer is valid. 3) Use the brand_note field if the flag BI_BRAND_NOTE is set and as old modules won't have the flag set, so the new field brand_note would be ignored. Suggested by: jhb Reviewed by: jhb Approved by: re (Ken Smith), kib (mentor) Notes: svn path=/stable/7/; revision=191210
* Merge from head to stable/7:Dmitry Chagin2009-03-291-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | r189771: Implement new way of branding ELF binaries by looking to a ".note.ABI-tag" section. The search order of a brand is changed, now first of all the ".note.ABI-tag" is looked through. Move code which fetch osreldate for ELF binary to check_note() handler. r189919: Use the properly sized types for ELF object header and program headers. This fixes osrel fetching from the FreeBSD branding note for the 64bit platforms (bug introduced by r189771). r190264: Fix several issues with parsing the notes for ELF objects. Badly formed ELF note may cause the caclulated pointer to the next note to point both after the note region, that was checked in the code, but also to point before the region, that was not checked [1]. Remember the first note location in note0 and leap out if the note is not between note0 and note_end. In the similar way, badly formed note may cause infinite loop by pointing next note into the same or previous note. Guard against this by limiting amount of loop iterations by arbitrary choosen big number. For clarity, check the calculated note alignment in each iteration. PR: kern/132886 Approved by: re(Ken Smith) Notes: svn path=/stable/7/; revision=190520
* MFC: Expand the scope of the sysctllock sx lock to protect the sysctl treeJohn Baldwin2009-03-102-26/+45
| | | | | | | | | | | itself. This also includes changes to the ia64 machine check code to defer adding machine check records to the sysctl tree, removing Giant from the CAM code that created dynamic sysctls, and tweaking the teardown of da(4) and cd(4) peripheral devices to not hold locks when freeing the sysctl tree. Notes: svn path=/stable/7/; revision=189640
* MFC: Add a stub for pmap_align_superpage() on machines that don't (yet)John Baldwin2009-02-261-0/+10
| | | | | | | | | implement pmap-level support for superpages. Pointy hat to: jhb Notes: svn path=/stable/7/; revision=189088
* MFC: Add support for "superpages" on amd64 and i386. This includes adding theJohn Baldwin2009-02-262-2/+9
| | | | | | | | | | | superpage reservation system to the machine-independent VM system as well as changes to the pmap code for amd64 and i386 to support superpages. Reviewed by: alc Tested by: ps Notes: svn path=/stable/7/; revision=189075
* MFC r183322:Konstantin Belousov2009-01-091-42/+43
| | | | | | | | | | | Change the static struct sysentvec and struct Elf_Brandinfo initializers to the C99 style. Explicitely initialize sysentvec.sv_maxssiz that was missed in most sysvecs. Notes: svn path=/stable/7/; revision=186936
* MFC rev 179382:Marcel Moolenaar2008-12-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | Work-around a compiler optimization bug, that broke libthr. Massive inlining resulted in constant propagation to the extend that cmpval was known to the compiler to be URWLOCK_WRITE_OWNER (= 0x80000000U). Unfortunately, instead of zero-extending the unsigned constant, it was sign-extended. As such, the cmpxchg instruction was comparing 0x0000000080000000LU to 0xffffffff80000000LU and obviously didn't perform the exchange. But, since the value returned by cmpxhg equalled cmpval (when zero- extended), the _thr_rtld_lock_release() function thought the exchange did happen and as such returned as if having released the lock. This was not the case. Subsequent locking requests found rw_state non-zero and the thread in question entered the kernel and block indefinitely. The work-around is to zero-extend by casting to uint64_t. Approved by: re (kensmith) Notes: svn path=/stable/7/; revision=185526
* MFCJohn Birrell2008-08-271-2/+2
| | | | | | | | | | DTrace support. Note that this defaults the 'make buildkernel' to build with CTF data so that the release kernel and modules are DTrace-able. Notes: svn path=/stable/7/; revision=182231
* MFC: Export 'struct pcpu' to userland w/o requiring _KERNEL.John Baldwin2008-08-261-2/+2
| | | | Notes: svn path=/stable/7/; revision=182202
* Hoist mergeinfo for sys/powerpc/include/atomic.h up to sys.Peter Wemm2008-08-141-0/+12
| | | | | | | | | | | Note that some of the changes that were mfc'ed to powerpc actually affect other platforms. This hoisting brings those changes to the others. This adds atomic_fetchadd_long to the rest, and adds atomic_readandclear_ptr to ia64. While I have not compile tested this, it looks harmless. Notes: svn path=/stable/7/; revision=181707
* Merge r177253, r177255 from head to stable/7:Robert Watson2008-07-222-2/+2
| | | | | | | | | | | | | | | | | In keeping with style(9)'s recommendations on macros, use a ';' after each SYSINIT() macro invocation. This makes a number of lightweight C parsers much happier with the FreeBSD kernel source, including cflow's prcc and lxr. Discussed with: imp, rink The requirement to place a ; after each SYSINIT definition has not been MFC'd, as this might break the compile third-party modules, but merging the actual ; additions reduces diffs against 8.x making it easier to merge other changes. Notes: svn path=/stable/7/; revision=180695
* MFC: Add preliminary support for binding interrupts to CPUs:John Baldwin2008-06-281-1/+1
| | | | | | | | | | | | | - Add a new method to interrupt events (ie_assign_cpu) for binding events to CPUs. - Bind ithreads to CPUs in their main loop (this is the original implementation, it may be changed if the cpuset stuff is MFC'd). - Add intr_event_bind(). - Implement ie_assign_cpu() and a 'intr_bind()' wrapper on amd64, i386, and sparc64. Notes: svn path=/stable/7/; revision=180082
* Merge rev 179173:Marcel Moolenaar2008-06-011-3/+6
| | | | | | | | | | | We can call ia64_flush_dirty() when the corresponding process is locked or not. As such, use PROC_LOCKED() to determine which case it is and lock the process when not. This is a manual merge. No merge history is created. Notes: svn path=/stable/7/; revision=179479
* MFC: Better implement I-cache invalidation.Marcel Moolenaar2008-04-264-89/+60
| | | | | | | | | | | Revision Changes Path 1.25 +4 -0 src/sys/ia64/ia64/elf_machdep.c 1.235 +18 -5 src/sys/ia64/ia64/machdep.c 1.198 +37 -84 src/sys/ia64/ia64/pmap.c 1.28 +1 -0 src/sys/ia64/include/md_var.h Notes: svn path=/stable/7/; revision=178541
* MFC fix for PR ia64/118024Marcel Moolenaar2008-04-242-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | o Rename cpu_thread_setup() to cpu_thread_alloc() to better communicate that it relates to (is called by) thread_alloc() o Add cpu_thread_free() which is called from thread_free() to counter-act cpu_thread_alloc(). i386: Have cpu_thread_free() call cpu_thread_clean() to preserve behaviour. ia64: Have cpu_thread_free() call mtx_destroy() for the mutex initialized in cpu_thread_alloc(). files: sys/amd64/amd64/vm_machdep.c:1.256 sys/arm/arm/vm_machdep.c:1.35 sys/i386/i386/vm_machdep.c1.284 sys/ia64/ia64/machdep.c:1.227 sys/ia64/ia64/vm_machdep.c:1.95 sys/kern/kern_thread.c:1.260 sys/powerpc/powerpc/vm_machdep.c:1.117 sys/sparc64/sparc64/vm_machdep.c:1.77 sys/sun4v/sun4v/vm_machdep.c:1.8 sys/sys/proc.h:1.495 Notes: svn path=/stable/7/; revision=178467
* Merge stack.9:1.5, amd64/db_trace.c:1.82, amd64/stack_machdep.c:1.1,Robert Watson2008-04-102-12/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | amd64/conf/GENERIC:1.489, amd64/include/stack.h:1.1, arm/db_trace.c:1.14, arm/stack_machdep.c:1.1, arm/include/stack.h:1.1, NOTES:1.1457, files:1.1254, files.amd64:1.115, files.arm:1.19, files.i386:1.588, files.ia64:1.94, files.powerpc:1.67, files.sparc64:1.93, files.sun4v:1.13, options:1.610, i386/conf/GENERIC:1.478, i386/db_trace.c:1.80, i386/stack_machdep.c:1.1, i386/include/stack.h:1.1, ia64/conf/GENERIC:1.93, ia64/db_machdep.c:1.6, ia64/stack_machdep.c:1.1, kern/subr_stack.c:1.5, pc98/conf/GENERIC:1.299, powerpc/conf/GENERIC:1.73, powerpc/include/stack.h:1.1, powerpc/db_trace.c:1.14, powerpc/stack_machdep.c:1.1, sparc64/conf/GENERIC:1.129, sparc64/include/stack.h:1.1, sparc64/db_trace.c:1.27, sparc64/stack_machdep.c:1.1, sun4v/conf/GENERIC:1.16, sun4v/include/stack.h:1.1, sun4v/db_trace.c:1.2, sun4v/stack_machdep.c:1.1, sys/stack.h:1.4 from HEAD to RELENG_7: Break out stack(9) from ddb(4): - Introduce per-architecture stack_machdep.c to hold stack_save(9). - Introduce per-architecture machine/stack.h to capture any common definitions required between db_trace.c and stack_machdep.c. - Add new kernel option "options STACK"; we will build in stack(9) if it is defined, or also if "options DDB" is defined to provide compatibility with existing users of stack(9). Add new stack_save_td(9) function, which allows the capture of a stacktrace of another thread rather than the current thread, which the existing stack_save(9) was limited to. It requires that the thread be neither swapped out nor running, which is the responsibility of the consumer to enforce. Update stack(9) man page. Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson) Merge i386/stack_machdep.c:1.2 from HEAD to RELENG_7: Remove duplicate $FreeBSD$ tag. Merge files.pc98:1.359, pc98/include/stack.h:1.1 from HEAD to RELENG_7: Catch up pc98 for i386 stack(9) changes: Add stub stack.h for pc98 that includes i386 pc98. Add i386 stack_machdep.c to files.pc98. Spotted by: tinderbox Notes: svn path=/stable/7/; revision=178079
* MFC: Kernel mode Network Lock Manager.Doug Rabson2008-04-101-0/+1
| | | | Notes: svn path=/stable/7/; revision=178061
* Merge amd64/machdep.c:1.680, amd64/mp_watchdog.c:1.6,Robert Watson2008-03-301-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | uart_dev_at91usart.c:1.13, scsi_low.h:1.9, subr_ntoskrnl.c:1.94, OsdDebug.c:1.14, dcons_os.c:1.20, ofw_consle.c:1.37, dev/sio.c:1.473, syscons.c:1.454, uart_core.c:1.23, union_subr.c:1.96, i386/machdep.c:1.664, i386/mp_watchdog.c:1.6, ia64/machdep.c:1.228, kern_clock.c:1.206, kern_shutdown.c:1.186, subr_kdb.c:1.25, subr_witness.c:1.239, vfs_subr.c:1.711, ng_base.c:1.140, cbus/sio.c:1.247, pc98/machdep.c:1.399, aim/machdep.c:1.107, pswitch.c:1.7, mac_test.c:19.3, psycho.c:1.73, sparc64/machdep.c:1.140, sparc64/trap.c:1.89, hvcons.c:1.7, sun4v/machdep.c:1.17, sun4v/trap.c:1.17, kdb.h:1.6 from HEAD to RELENG_7: Add a new 'why' argument to kdb_enter(), and a set of constants to use for that argument. This will allow DDB to detect the broad category of reason why the debugger has been entered, which it can use for the purposes of deciding which DDB script to run. Assign approximate why values to all current consumers of the kdb_enter() interface. For ABI/KPI reasons, the MFC creates a new function, kdb_enter_why(), with the new argument, updating existing consumers to use that, preserving kdb_enter() with the current argument, and wrapping it around kdb_enter_why(). Notes: svn path=/stable/7/; revision=177734
* MFC: Remove the 'needbounce' variable from _bus_dmamap_load_buffer().John Baldwin2008-03-171-5/+2
| | | | Notes: svn path=/stable/7/; revision=177305
* Insta MFC: machdep.c:1.230, pmap.c:1.197Marcel Moolenaar2008-02-142-0/+19
| | | | | | | | | | | | On Montecito processors, the instruction cache is in fact not coherent with the data caches. Implement a quick fix to allow us to boot on Montecito, while I'm working on a better fix in the mean time. Commit made on Montecito-based Itanium... Notes: svn path=/stable/7/; revision=176287
* MFC: Add a wrapper function that bound checks writes to the dump device.Ruslan Ermilov2008-01-301-6/+6
| | | | Notes: svn path=/stable/7/; revision=175819
* MFC fix for the panic("vm_thread_new: kstack allocation failed") andKonstantin Belousov2008-01-182-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | silent NULL pointer dereference in the i386 and sparc64 pmap_pinit() when the kmem_alloc_nofault() failed to allocate address space. Both functions now return error instead of panicing or dereferencing NULL. The reason for MFCing this so late in release cycle is, according to marius@, because > it fixes the crashing (though no panic) of the test suite > of the graphic/OpenEXR port on sparc64. This test suite is run > (and required to succeed) during the package build and that's > why portmgr@ bitch about at it as OpenEXR is a dependency of KDE > which in turn is supposed to end up on the release CD images. Revisions MFCed: 1.677 of src/sys/amd64/amd64/machdep.c 1.592 of src/sys/amd64/amd64/pmap.c 1.88 of src/sys/arm/arm/pmap.c 1.27 of src/sys/arm/at91/kb920x_machdep.c 1.22 of src/sys/arm/sa11x0/assabet_machdep.c 1.8 of src/sys/arm/xscale/i80321/ep80219_machdep.c 1.29 of src/sys/arm/xscale/i80321/iq31244_machdep.c 1.3 of src/sys/arm/xscale/i8134x/crb_machdep.c 1.6 of src/sys/arm/xscale/ixp425/avila_machdep.c 1.41 of src/sys/compat/pecoff/imgact_pecoff.c 1.26 of src/sys/compat/svr4/imgact_svr4.c 1.660 of src/sys/i386/i386/machdep.c 1.596 of src/sys/i386/i386/pmap.c 1.68 of src/sys/i386/ibcs2/imgact_coff.c 1.56 of src/sys/i386/linux/imgact_linux.c 1.226 of src/sys/ia64/ia64/machdep.c 1.192 of src/sys/ia64/ia64/pmap.c 1.102 of src/sys/kern/imgact_aout.c 1.179 of src/sys/kern/imgact_elf.c 1.56 of src/sys/kern/imgact_gzip.c 1.310 of src/sys/kern/kern_exec.c 1.287 of src/sys/kern/kern_fork.c 1.236 of src/sys/kern/kern_kse.c 1.253 of src/sys/kern/kern_proc.c 1.352 of src/sys/kern/kern_sig.c 1.63 of src/sys/kern/kern_thr.c 1.257 of src/sys/kern/kern_thread.c 1.397 of src/sys/pc98/pc98/machdep.c 1.104 of src/sys/powerpc/powerpc/machdep.c 1.10 of src/sys/powerpc/powerpc/pmap_dispatch.c 1.139 of src/sys/sparc64/sparc64/machdep.c 1.167 of src/sys/sparc64/sparc64/pmap.c 1.16 of src/sys/sun4v/sun4v/machdep.c 1.40 of src/sys/sun4v/sun4v/pmap.c 1.493 of src/sys/sys/proc.h 1.78 of src/sys/sys/signalvar.h 1.80 of src/sys/vm/pmap.h 1.79 of src/sys/vm/vm_extern.h 1.226 of src/sys/vm/vm_glue.c 1.390 of src/sys/vm/vm_map.c Requested by: marius Tested by: Peter Holm, marius (make universe and sparc64 runs) Approved by: re (kensmith) Notes: svn path=/stable/7/; revision=175435
* This commit was manufactured by cvs2svn to create branch 'RELENG_7'.cvs2svn2007-12-031-0/+57
| | | | Notes: svn path=/stable/7/; revision=174217
* MFC: expand critical section coverage so that shared fast and ithread handlersScott Long2007-11-261-1/+1
| | | | | | | | | don't stall. Approved by: re Notes: svn path=/stable/7/; revision=173938
* Use the correct expanded name for SCTP.Christian Brueffer2007-09-261-1/+1
| | | | | | | | | | PR: 116496 Submitted by: koitsu Reviewed by: rrs Approved by: re (kensmith) Notes: svn path=/head/; revision=172332
* Change the management of cached pages (PQ_CACHE) in two fundamentalAlan Cox2007-09-251-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ways: (1) Cached pages are no longer kept in the object's resident page splay tree and memq. Instead, they are kept in a separate per-object splay tree of cached pages. However, access to this new per-object splay tree is synchronized by the _free_ page queues lock, not to be confused with the heavily contended page queues lock. Consequently, a cached page can be reclaimed by vm_page_alloc(9) without acquiring the object's lock or the page queues lock. This solves a problem independently reported by tegge@ and Isilon. Specifically, they observed the page daemon consuming a great deal of CPU time because of pages bouncing back and forth between the cache queue (PQ_CACHE) and the inactive queue (PQ_INACTIVE). The source of this problem turned out to be a deadlock avoidance strategy employed when selecting a cached page to reclaim in vm_page_select_cache(). However, the root cause was really that reclaiming a cached page required the acquisition of an object lock while the page queues lock was already held. Thus, this change addresses the problem at its root, by eliminating the need to acquire the object's lock. Moreover, keeping cached pages in the object's primary splay tree and memq was, in effect, optimizing for the uncommon case. Cached pages are reclaimed far, far more often than they are reactivated. Instead, this change makes reclamation cheaper, especially in terms of synchronization overhead, and reactivation more expensive, because reactivated pages will have to be reentered into the object's primary splay tree and memq. (2) Cached pages are now stored alongside free pages in the physical memory allocator's buddy queues, increasing the likelihood that large allocations of contiguous physical memory (i.e., superpages) will succeed. Finally, as a result of this change long-standing restrictions on when and where a cached page can be reclaimed and returned by vm_page_alloc(9) are eliminated. Specifically, calls to vm_page_alloc(9) specifying VM_ALLOC_INTERRUPT can now reclaim and return a formerly cached page. Consequently, a call to malloc(9) specifying M_NOWAIT is less likely to fail. Discussed with: many over the course of the summer, including jeff@, Justin Husted @ Isilon, peter@, tegge@ Tested by: an earlier version by kris@ Approved by: re (kensmith) Notes: svn path=/head/; revision=172317
* It has been observed on the mailing lists that the different categoriesAlan Cox2007-09-151-2/+4
| | | | | | | | | | | | | | | | | | of pages don't sum to anywhere near the total number of pages on amd64. This is for the most part because uma_small_alloc() pages have never been counted as wired pages, like their kmem_malloc() brethren. They should be. This changes fixes that. It is no longer necessary for the page queues lock to be held to free pages allocated by uma_small_alloc(). I removed the acquisition and release of the page queues lock from uma_small_free() on amd64 and ia64 weeks ago. This patch updates the other architectures that have uma_small_alloc() and uma_small_free(). Approved by: re (kensmith) Notes: svn path=/head/; revision=172189
* Clear pending interrupts before we enable external interrupts.Marcel Moolenaar2007-08-061-5/+20
| | | | | | | | | | | | | | | Recently the AP in my Merced box seems to have grown a habit of getting unexpected interrupts, such as redundant wake-ups and legacy interrupts that require an INTA cycle. While here, replace DELAY(0) with cpu_spinwait() so that it's clear what we're doing as well as enable the code to take advantage of cpu_spinwait() when it gets implemented. Approved by: re (blanket) Notes: svn path=/head/; revision=171740
* Keep interrupts disabled while handling external interrupts.Marcel Moolenaar2007-08-063-73/+64
| | | | | | | | | | | | | | | There's no advantage in allowing nested external interrupts. In fact, it leads to a potential stack overrun. While here, put the interrupt vector in the trapframe, so as to compensate for the 36 cycle latency of reading cr.ivr. Further simplify assembly code by dealing with ASTs from C. Approved by: re (blanket) Notes: svn path=/head/; revision=171739