summaryrefslogtreecommitdiff
path: root/sys/powerpc
Commit message (Collapse)AuthorAgeFilesLines
* Merge r190708 from HEAD to releng/7.2: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=/releng/7.2/; revision=191213
* MFC r190946:Nathan Whitehorn2009-04-131-1/+1
| | | | | | | | | | | | | | | Fix recognition of kernel-mode traps that pass through the KDB trap handler but do not actually invoke KDB. This includes recoverable machine checks encountered in kernel mode. This patch causes machines with Grackle host-PCI bridges to be able to correctly enumerate them again. Reviewed by: marcel Approved by: re Notes: svn path=/stable/7/; revision=191001
* 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 r189675:Nathan Whitehorn2009-03-231-1/+4
| | | | | | | | | | | | Change the PVO zone for fictitious pages to the unmanaged PVO zone, to match the unmanaged flag set in the PVO attributes. Without doing this, pmap_remove() could try to remove fictitious pages (like those created by mmap of physical memory) from the wrong UMA zone, causing a panic. Reported by: Justin Hibbits Notes: svn path=/stable/7/; revision=190302
* Fix a mismerge from head that I somehow missed last night. This caused ↵Nathan Whitehorn2009-03-081-6/+3
| | | | | | | | | | | builds with KDB enabled to fail. Pointy hat to: me Notes: svn path=/stable/7/; revision=189536
* MFC r188860,188879,188923,188951:Nathan Whitehorn2009-03-079-52/+329
| | | | | | | Altivec support for PowerPC. Notes: svn path=/stable/7/; revision=189498
* 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-46/+47
| | | | | | | | | | | 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 r183288,183411,183827,184382:Nathan Whitehorn2008-10-303-25/+87
| | | | | | | | | | | | | | | | Expand DBDMA API to allow setting device-dependent control bits and allow DBDMA registers to lie in a subregion of a resource. Also import changes to the BMAC driver to handle these changes and change the way we enable the BMAC cell in macio. Instead of calling the macio's enable-enet word, which apparently does nothing on some machines, open an OF instance of the ethernet controller. This fixes cold booting from disk on my Blue & White G3. Approved by: re (gnn) Notes: svn path=/stable/7/; revision=184461
* MFC: r179164: "options " spelling (vs. "options<TAB>") so that commentedDavid E. O'Brien2008-09-011-2/+2
| | | | | | | lines line up nicely. Notes: svn path=/stable/7/; revision=182621
* Back out r182439 to move device bm to PowerPC-specific NOTES, and replace it ↵Nathan Whitehorn2008-08-311-6/+1
| | | | | | | | | | by an MFC of r179646, which does the same thing. Suggested by: rwatson Approved by: marcel (mentor) Notes: svn path=/stable/7/; revision=182551
* As "device bm" appears to be specific to powerpc, move it from the globalRobert Watson2008-08-291-0/+6
| | | | | | | NOTES to powerpc-specific NOTES. Notes: svn path=/stable/7/; revision=182439
* MFC of r178599,178600,179644,179645,180254,180233Nathan Whitehorn2008-08-286-14/+579
| | | | | | | | | Support for Apple BMAC ethernet controller and associated DBDMA support and required changes to macio and scc(4) to support multiple interrupts on macio children. Approved by: grehan (mentor) Notes: svn path=/stable/7/; revision=182379
* 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-1/+2
| | | | Notes: svn path=/stable/7/; revision=182202
* When r177253 and r177255 were merged from head to stable/7, theRobert Watson2008-08-031-1/+1
| | | | | | | | | addition of a ';' after a SYSINIT declaration was missed in powerpc/machdep.c because the file had moved in head. This commit adds the missing ';'. Notes: svn path=/stable/7/; revision=181234
* 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
* MFC rev. 173742-178057.Marcel Moolenaar2008-06-231-257/+324
| | | | | | | Requested by: mav (twice) Notes: svn path=/stable/7/; revision=179964
* MFC fix for PR ia64/118024Marcel Moolenaar2008-04-241-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | 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-38/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-302-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Revert powerpc scheduler change for now. This change should beXin LI2008-03-081-1/+1
| | | | | | | | | done after necessary ULE changes to be MFC'ed. Pointed out by: peter Notes: svn path=/stable/7/; revision=176931
* MFC: Switch to use ULE as default scheduler on amd64, i386 and powerpcXin LI2008-03-071-1/+1
| | | | | | | architectures. Notes: svn path=/stable/7/; revision=176923
* 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-032-0/+133
| | | | 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=173943
* MFC:Peter Grehan2007-11-143-4/+14
| | | | | | | | | | | | | | Split decr_init() into two, with the section that reads the timebase frequency from OpenFirmware moved out and into a routine that is called from cpu_startup(). This allows correct reporting of the CPU clockspeed when printing out CPU information at boot time. Approved by: re (Ken Smith) Notes: svn path=/stable/7/; revision=173609
* Unbreak. With DDB removed, KTR can not be used as-is becauseMarcel Moolenaar2007-10-291-5/+0
| | | | | | | | | GEOM wants to save the stack as part of KTR support. Approved by: re (kensmith) Notes: svn path=/stable/7/; revision=173123
* Remove debugging support from GENERIC kernels, remove warning inKen Smith2007-10-111-7/+0
| | | | | | | | | | UPDATING that says debugging support makes FreeBSD slower, and note RELENG_7 creation. Approved by: re (implicit) Notes: svn path=/stable/7/; revision=172534
* This commit was manufactured by cvs2svn to create branch 'RELENG_7'.cvs2svn2007-10-1015-7443/+0
| | | | Notes: svn path=/stable/7/; revision=172506
* Make the PCI code aware of PCI domains (aka PCI segments) so we canMarius Strobl2007-09-302-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | support machines having multiple independently numbered PCI domains and don't support reenumeration without ambiguity amongst the devices as seen by the OS and represented by PCI location strings. This includes introducing a function pci_find_dbsf(9) which works like pci_find_bsf(9) but additionally takes a domain number argument and limiting pci_find_bsf(9) to only search devices in domain 0 (the only domain in single-domain systems). Bge(4) and ofw_pcibus(4) are changed to use pci_find_dbsf(9) instead of pci_find_bsf(9) in order to no longer report false positives when searching for siblings and dupe devices in the same domain respectively. Along with this change the sole host-PCI bridge driver converted to actually make use of PCI domain support is uninorth(4), the others continue to use domain 0 only for now and need to be converted as appropriate later on. Note that this means that the format of the location strings as used by pciconf(8) has been changed and that consumers of <sys/pciio.h> potentially need to be recompiled. Suggested by: jhb Reviewed by: grehan, jhb, marcel Approved by: re (kensmith), jhb (PCI maintainer hat) Notes: svn path=/head/; revision=172394
* o Revert the part of if_gem.c rev. 1.35 which added a call to gem_stop()Marius Strobl2007-09-261-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to gem_attach() as the former access softc members not yet initialized at that time and gem_reset() actually is enough to stop the chip. [1] o Revise the use of gem_bitwait(); add bus_barrier() calls before calling gem_bitwait() to ensure the respective bit has been written before we starting polling on it and poll for the right bits to change, f.e. even though we only reset RX we have to actually wait for both GEM_RESET_RX and GEM_RESET_TX to clear. Add some additional gem_bitwait() calls in places we've been missing them according to the GEM documentation. Along with this some excessive DELAYs, which probably only were added because of bugs in gem_bitwait() and its use in the first place, as well as as have of an gem_bitwait() reimplementation in gem_reset_tx() were removed. o Add gem_reset_rxdma() and use it to deal with GEM_MAC_RX_OVERFLOW errors more gracefully as unlike gem_init_locked() it resets the RX DMA engine only, causing no link loss and the FIFOs not to be cleared. Also use it deal with GEM_INTR_RX_TAG_ERR errors, with previously were unhandled. This was based on information obtained from the Linux GEM and OpenSolaris ERI drivers. o Turn on workarounds for silicon bugs in the Apple GMAC variants. This was based on information obtained from the Darwin GMAC and Linux GEM drivers. o Turn on "infinite" (i.e. maximum 31 * 64 bytes in length) DMA bursts. This greatly improves especially RX performance. o Optimize the RX path, this consists of: - kicking the receiver as soon as we've a spare descriptor in gem_rint() again instead of just once after all the ready ones have been handled; - kicking the receiver the right way, i.e. as outlined in the GEM documentation in batches of 4 and by pointing it to the descriptor after the last valid one; - calling gem_rint() before gem_tint() in gem_intr() as gem_tint() may take quite a while; - doubling the size of the RX ring to 256 descriptors. Overall the RX performance of a GEM in a 1GHz Sun Fire V210 was improved from ~100Mbit/s to ~850Mbit/s. o In gem_add_rxbuf() don't assign the newly allocated mbuf to rxs_mbuf before calling bus_dmamap_load_mbuf_sg(), if bus_dmamap_load_mbuf_sg() fails we'll free the newly allocated mbuf, unable to recycle the previous one but a NULL pointer dereference instead. o In gem_init_locked() honor the return value of gem_meminit(). o Simplify gem_ringsize() and dont' return garbage in the default case. Based on OpenBSD. o Don't turn on MAC control, MIF and PCS interrupts unless GEM_DEBUG is defined as we don't need/use these interrupts for operation. o In gem_start_locked() sync the DMA maps of the descriptor rings before every kick of the transmitter and not just once after enqueuing all packets as the NIC might instantly start transmitting after we kicked it the first time. o Keep state of the link state and use it to enable or disable the MAC in gem_mii_statchg() accordingly as well as to return early from gem_start_locked() in case the link is down. [3] o Initialize the maximum frame size to a sane value. o In gem_mii_statchg() enable carrier extension if appropriate. o Increment if_ierrors in case of an GEM_MAC_RX_OVERFLOW error and in gem_eint(). [3] o Handle IFF_ALLMULTI correctly; don't set it if we've turned promiscuous group mode on and don't clear the flag if we've disabled promiscuous group mode (these were mostly NOPs though). [2] o Let gem_eint() also report GEM_INTR_PERR errors. o Move setting sc_variant from gem_pci_probe() to gem_pci_attach() as device probe methods are not supposed to touch the softc. o Collapse sc_inited and sc_pci into bits for sc_flags. o Add CTASSERTs ensuring that GEM_NRXDESC and GEM_NTXDESC are set to legal values. o Correctly set up for 802.3x flow control, though #ifdef out the code that actually enables it as this needs more testing and mainly a proper framework to support it. o Correct and add some conversions from hard-coded functions names to __func__ which were borked or forgotten in if_gem.c rev. 1.42. o Use PCIR_BAR instead of a homegrown macro. o Replace sc_enaddr[6] with sc_enaddr[ETHER_ADDR_LEN]. o In gem_pci_attach() in case attaching fails release the resources in the opposite order they were allocated. o Make gem_reset() static to if_gem.c as it's not needed outside that module. o Remove the GEM_GIGABIT flag and the associated code; GEM_GIGABIT was never set and the associated code was in the wrong place. o Remove sc_mif_config; it was only used to cache the contents of the respective register within gem_attach(). o Remove the #ifdef'ed out NetBSD/OpenBSD code for establishing a suspend hook as it will never be used on FreeBSD. o Also probe Apple Intrepid 2 GMAC and Apple Shasta GMAC, add support for Apple K2 GMAC. Based on OpenBSD. o Add support for Sun GBE/P cards, or in other words actually add support for cards based on GEM to gem(4). This mainly consists of adding support for the TBI of these chips. Along with this the PHY selection code was rewritten to hardcode the PHY number for certain configurations as for example the PHY of the on-board ERI of Blade 1000 shows up twice causing no link as the second incarnation is isolated. These changes were ported from OpenBSD with some additional improvements and modulo some bugs. o Add code to if_gem_pci.c allowing to read the MAC-address from the VPD on systems without Open Firmware. This is an improved version of my variant of the respective code in if_hme_pci.c o Now that gem(4) is MI enable it for all archs. Pointed out by: yongari [1] Suggested by: rwatson [2], yongari [3] Tested on: i386 (GEM), powerpc (GMACs by marcel and yongari), sparc64 (ERI and GEM) Reviewed by: yongari Approved by: re (kensmith) Notes: svn path=/head/; revision=172334
* 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-152-8/+8
| | | | | | | | | | | | | | | | | | 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
* Revamp the interrupt handling in support of INTR_FILTER. This includes:Marcel Moolenaar2007-08-1115-1095/+492
| | | | | | | | | | | | | | | | | | | | | | | | | | o Revamp the PIC I/F to only abstract the PIC hardware. The resource handling has been moved to nexus, where it belongs. o Include EOI and MASK+EOI methods to the PIC I/F in support of INTR_FILTER. o With the allocation of interrupt resources and setup of interrupt handlers in the common platform code we can delay talking to the PIC hardware after enumeration of all devices. Introduce a call to powerpc_intr_enable() in configure_final() to achieve that and have powerpc_setup_intr() only program the PIC when !cold. o As a consequence of the above, remove all early_attach() glue from the OpenPIC and Heathrow PIC drivers and have them register themselves when they're found during enumeration. o Decouple the interrupt vector from the interrupt request line. Allocate vectors increasingly so that they can be used for the intrcnt index as well. Extend the Heathrow PIC driver to translate between IRQ and vector. The OpenPIC driver already has the support for vectors in hardware. Approved by: re (blanket) Notes: svn path=/head/; revision=171805
* Re-enable external interrupts for faults, traps and syscalls.Marcel Moolenaar2007-08-082-18/+16
| | | | | | | Approved by: re (blanket) Notes: svn path=/head/; revision=171787
* Eliminate <machine/interruptvar.h> as it has only a singleMarcel Moolenaar2007-08-075-39/+5
| | | | | | | | | | prototype. In the future that prototype will not be needed at all anyway, but for now it's moved to intr_machdep.h. Approved by: re (blanket) Notes: svn path=/head/; revision=171785
* Remove redundant prototype.Marcel Moolenaar2007-08-072-4/+0
| | | | | | | Approved by: re (blanket) Notes: svn path=/head/; revision=171783
* Add prototype for trap().Marcel Moolenaar2007-08-071-0/+7
| | | | | | | Approved by: re (blanket) Notes: svn path=/head/; revision=171782
* Fix backward compatibility of the "old" (i.e. FreeBSD6) lseekMarcel Moolenaar2007-07-312-4/+4
| | | | | | | | | | | | | | syscall. It was broken when a new lseek syscall was introduced. The problem is that we need to swap the 32-bit td_retval values for the __syscall indirect syscall when the actual syscall has a 32-bit return value. Hence, we need to exclude lseek(2). And this means the "old" lseek(2) as well -- which we didn't. Based on a patch from: grehan@ Approved by: re (rwatson) Notes: svn path=/head/; revision=171670
* Cast the arguments to atomic_*_ptr() when mapping it to atomic_*_32()Marcel Moolenaar2007-07-101-3/+8
| | | | | | | | | This is a minimal fix. Approved by: re (kensmith) Notes: svn path=/head/; revision=171334
* Reimplement bus_dmamap_load with bus_dmamap_load_buffer.Pyun YongHyeon2007-06-221-68/+32
| | | | | | | | | | | | | | | Previously it didn't honor parent dma tag's restrictions such that an invalid dma segment could be passed to device. The driver for the device may panic in sanity check routine for the dma segment or may produce unexpected results. I have no idea how it could ever have worked before. Reviewed by: grehan Tested by: gad Approved by: re (hrs) Notes: svn path=/head/; revision=170979
* Honor maxsegsz of less than a page size in a DMA tag. Previously itPyun YongHyeon2007-06-221-0/+2
| | | | | | | | | | | | used to return PAGE_SIZE without respect to restrictions of a DMA tag. This affected all of the busdma load functions that use _bus_dmamap_loader_buffer() as their back-end. Reviewed by: scottl (long a ago) Approved by: re (hrs) Notes: svn path=/head/; revision=170978
* Enable the new physical memory allocator.Alan Cox2007-06-161-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allocator uses a binary buddy system with a twist. First and foremost, this allocator is required to support the implementation of superpages. As a side effect, it enables a more robust implementation of contigmalloc(9). Moreover, this reimplementation of contigmalloc(9) eliminates the acquisition of Giant by contigmalloc(..., M_NOWAIT, ...). The twist is that this allocator tries to reduce the number of TLB misses incurred by accesses through a direct map to small, UMA-managed objects and page table pages. Roughly speaking, the physical pages that are allocated for such purposes are clustered together in the physical address space. The performance benefits vary. In the most extreme case, a uniprocessor kernel running on an Opteron, I measured an 18% reduction in system time during a buildworld. This allocator does not implement page coloring. The reason is that superpages have much the same effect. The contiguous physical memory allocation necessary for a superpage is inherently colored. Finally, the one caveat is that this allocator does not effectively support prezeroed pages. I hope this is temporary. On i386, this is a slight pessimization. However, on amd64, the beneficial effects of the direct-map optimization outweigh the ill effects. I speculate that this is true in general of machines with a direct map. Approved by: re Notes: svn path=/head/; revision=170816
* Enable SCTP by default for GENERIC kernels in order to give itXin LI2007-06-141-0/+1
| | | | | | | | | | | | more exposure. The current state of SCTP implementation is considered to be ready for 32-bit platforms, but still need some work/testing on 64-bit platforms. Approved by: re (kensmith) Discussed with: rrs Notes: svn path=/head/; revision=170731
* Enable GEOM_PART_MBR by default. On ia64 this replaces GEOM_MBR.Marcel Moolenaar2007-06-131-0/+1
| | | | Notes: svn path=/head/; revision=170652
* Add kdb_cpu_sync_icache(), intended to synchronize instructionMarcel Moolenaar2007-06-097-19/+22
| | | | | | | | | caches with data caches after writing to memory. This typically is required to make breakpoints work on ia64 and powerpc. For those architectures the function is implemented. Notes: svn path=/head/; revision=170473