Date: Wed, 9 Jul 2003 00:08:11 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 34232 for review Message-ID: <200307090708.h6978BWQ003481@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=34232 Change 34232 by marcel@marcel_nfs on 2003/07/09 00:07:31 IFC @34224 Affected files ... .. //depot/projects/uart/alpha/alpha/pmap.c#4 integrate .. //depot/projects/uart/amd64/amd64/pmap.c#4 integrate .. //depot/projects/uart/conf/NOTES#2 integrate .. //depot/projects/uart/conf/files#4 integrate .. //depot/projects/uart/dev/acpica/acpi_isab.c#1 branch .. //depot/projects/uart/dev/pci/isa_pci.c#2 integrate .. //depot/projects/uart/dev/sound/pci/ich.c#4 integrate .. //depot/projects/uart/dev/sound/pcm/feeder.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/feeder.h#2 integrate .. //depot/projects/uart/dev/usb/umct.c#3 integrate .. //depot/projects/uart/dev/wi/if_wi_pccard.c#2 integrate .. //depot/projects/uart/geom/geom_dump.c#2 integrate .. //depot/projects/uart/i386/i386/pmap.c#4 integrate .. //depot/projects/uart/i386/i386/sys_machdep.c#2 integrate .. //depot/projects/uart/isa/isa_common.c#2 integrate .. //depot/projects/uart/isa/isavar.h#2 integrate .. //depot/projects/uart/isa/psm.c#3 integrate .. //depot/projects/uart/kern/sched_ule.c#3 integrate .. //depot/projects/uart/kern/subr_param.c#2 integrate .. //depot/projects/uart/kern/sys_pipe.c#2 integrate .. //depot/projects/uart/modules/acpi/Makefile#2 integrate .. //depot/projects/uart/net/if_vlan.c#3 integrate .. //depot/projects/uart/net/if_vlan_var.h#2 integrate .. //depot/projects/uart/netinet/ip_fw2.c#3 integrate .. //depot/projects/uart/pci/if_dc.c#3 integrate .. //depot/projects/uart/pci/if_dcreg.h#2 integrate .. //depot/projects/uart/sparc64/sparc64/pmap.c#4 integrate .. //depot/projects/uart/sys/pipe.h#2 integrate .. //depot/projects/uart/vm/vm_pageout.c#3 integrate Differences ... ==== //depot/projects/uart/alpha/alpha/pmap.c#4 (text+ko) ==== @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.129 2003/07/03 20:18:00 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.130 2003/07/06 20:32:42 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -993,7 +993,7 @@ if (m->wire_count == 0) { vm_page_busy(m); vm_page_free_zero(m); - --cnt.v_wire_count; + atomic_subtract_int(&cnt.v_wire_count, 1); } return 1; } @@ -1181,7 +1181,7 @@ #endif p->wire_count--; - cnt.v_wire_count--; + atomic_subtract_int(&cnt.v_wire_count, 1); vm_page_free_zero(p); vm_page_unlock_queues(); return 1; ==== //depot/projects/uart/amd64/amd64/pmap.c#4 (text+ko) ==== @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.419 2003/07/03 20:18:01 alc Exp $ + * $FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.420 2003/07/08 19:40:34 alc Exp $ */ /*- * Copyright (c) 2003 Networks Associates Technology, Inc. @@ -2119,7 +2119,7 @@ ptepa += NBPDR; pde++; } - pmap_invalidate_all(kernel_pmap); + pmap_invalidate_all(pmap); } } ==== //depot/projects/uart/conf/NOTES#2 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1157 2003/06/28 05:47:34 scottl Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1161 2003/07/07 21:19:04 wollman Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -456,7 +456,7 @@ # The `ether' device provides generic code to handle # Ethernets; it is MANDATORY when an Ethernet device driver is # configured or token-ring is enabled. -# The 'wlan' device provides generic code to support 802.11 +# The `wlan' device provides generic code to support 802.11 # drivers, including host AP mode; it is MANDATORY for the wi # driver and will eventually be required by all 802.11 drivers. # The `fddi' device provides generic code to support FDDI. @@ -674,13 +674,13 @@ # One of these is mandatory: options FFS #Fast filesystem options NFSCLIENT #Network File System -options NFSSERVER #Network File System # The rest are optional: options CD9660 #ISO 9660 filesystem options FDESCFS #File descriptor filesystem options HPFS #OS/2 File system options MSDOSFS #MS DOS File System (FAT, FAT32) +options NFSSERVER #Network File System options NTFS #NT File System options NULLFS #NULL filesystem #options NWFS #NetWare filesystem @@ -727,8 +727,8 @@ # # In order to manage swap, the system must reserve bitmap space that # scales with the largest mounted swap device multiplied by NSWAPDEV, -# irregardless of whether other swap devices exist or not. So it -# is not a good idea to make this value too large. +# irrespective of whether other swap devices exist. So it is not a +# good idea to make this value too large. options NSWAPDEV=5 # Disk quotas are supported when this option is enabled. @@ -848,14 +848,15 @@ # device drivers. The host adapters are listed in the ISA and PCI # device configuration sections below. # -# Beginning with FreeBSD 2.0.5 you can wire down your SCSI devices so -# that a given bus, target, and LUN always come on line as the same -# device unit. In earlier versions the unit numbers were assigned -# in the order that the devices were probed on the SCSI bus. This -# means that if you removed a disk drive, you may have had to rewrite -# your /etc/fstab file, and also that you had to be careful when adding -# a new disk as it may have been probed earlier and moved your device -# configuration around. +# It is possible to wire down your SCSI devices so that a given bus, +# target, and LUN always come on line as the same device unit. In +# earlier versions the unit numbers were assigned in the order that +# the devices were probed on the SCSI bus. This means that if you +# removed a disk drive, you may have had to rewrite your /etc/fstab +# file, and also that you had to be careful when adding a new disk +# as it may have been probed earlier and moved your device configuration +# around. (See also option GEOM_VOL for a different solution to this +# problem.) # This old behavior is maintained as the default behavior. The unit # assignment begins with the first non-wired down unit for a device ==== //depot/projects/uart/conf/files#4 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.801 2003/06/28 06:12:41 sam Exp $ +# $FreeBSD: src/sys/conf/files,v 1.802 2003/07/08 18:59:32 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -241,6 +241,7 @@ dev/acpica/acpi_cmbat.c optional acpi dev/acpica/acpi_cpu.c optional acpi dev/acpica/acpi_ec.c optional acpi +dev/acpica/acpi_isab.c optional acpi dev/acpica/acpi_lid.c optional acpi dev/acpica/acpi_pci.c optional acpi pci dev/acpica/acpi_pci_link.c optional acpi pci ==== //depot/projects/uart/dev/pci/isa_pci.c#2 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/pci/isa_pci.c,v 1.7 2002/10/30 19:55:06 iedowse Exp $ + * $FreeBSD: src/sys/dev/pci/isa_pci.c,v 1.8 2003/07/08 18:56:58 jhb Exp $ */ /* @@ -42,6 +42,7 @@ #include <sys/bus.h> #include <sys/rman.h> +#include <isa/isavar.h> #include <pci/pcivar.h> #include <pci/pcireg.h> @@ -54,7 +55,7 @@ }; static int isab_probe(device_t dev); -static int isab_attach(device_t dev); +static int pci_isab_attach(device_t dev); static int isab_detach(device_t dev); static int isab_resume(device_t dev); static int isab_suspend(device_t dev); @@ -62,7 +63,7 @@ static device_method_t isab_methods[] = { /* Device interface */ DEVMETHOD(device_probe, isab_probe), - DEVMETHOD(device_attach, isab_attach), + DEVMETHOD(device_attach, pci_isab_attach), DEVMETHOD(device_detach, isab_detach), DEVMETHOD(device_shutdown, bus_generic_shutdown), DEVMETHOD(device_suspend, isab_suspend), @@ -86,8 +87,6 @@ sizeof(struct isab_softc), }; -static devclass_t isab_devclass; - DRIVER_MODULE(isab, pci, isab_driver, isab_devclass, 0, 0); /* @@ -155,21 +154,17 @@ } static int -isab_attach(device_t dev) +pci_isab_attach(device_t dev) { - device_t child; struct isab_softc *sc = device_get_softc(dev); int error, rid; /* * Attach an ISA bus. Note that we can only have one ISA bus. */ - child = device_add_child(dev, "isa", 0); - if (child != NULL) { - error = bus_generic_attach(dev); - if (error) - return (error); - } + error = isab_attach(dev); + if (error) + return (error); switch (pci_get_devid(dev)) { case 0x71108086: /* Intel 82371AB */ ==== //depot/projects/uart/dev/sound/pci/ich.c#4 (text+ko) ==== @@ -32,7 +32,7 @@ #include <pci/pcireg.h> #include <pci/pcivar.h> -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/ich.c,v 1.30 2003/07/06 03:11:06 cg Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pci/ich.c,v 1.31 2003/07/06 23:54:00 cg Exp $"); /* -------------------------------------------------------------------- */ @@ -43,6 +43,7 @@ #define SIS7012ID 0x70121039 /* SiS 7012 needs special handling */ #define ICH4ID 0x24c58086 /* ICH4 needs special handling too */ +#define ICH5ID 0x24d58086 /* ICH5 needs to be treated as ICH4 */ /* buffer descriptor */ struct ich_desc { @@ -577,8 +578,8 @@ stat = ich_rd(sc, ICH_REG_GLOB_STA, 4); if ((stat & ICH_GLOB_STA_PCR) == 0) { - /* ICH4 may fail when busmastering is enabled. Continue */ - if (pci_get_devid(sc->dev) != ICH4ID) { + /* ICH4/ICH5 may fail when busmastering is enabled. Continue */ + if ((pci_get_devid(sc->dev) != ICH4ID) && (pci_get_devid(sc->dev) != ICH5ID)) { return ENXIO; } } @@ -628,7 +629,11 @@ case ICH4ID: device_set_desc(dev, "Intel ICH4 (82801DB)"); - return 0; + return -1000; /* allow a better driver to override us */ + + case ICH5ID: + device_set_desc(dev, "Intel ICH5 (82801EB)"); + return -1000; /* allow a better driver to override us */ case SIS7012ID: device_set_desc(dev, "SiS 7012"); @@ -682,15 +687,15 @@ * By default, ich4 has NAMBAR and NABMBAR i/o spaces as * read-only. Need to enable "legacy support", by poking into * pci config space. The driver should use MMBAR and MBBAR, - * but doing so will mess things up here. ich4 has enough new - * features it warrants it's own driver. + * but doing so will mess things up here. ich4/5 have enough new + * features to warrant a seperate driver. */ - if (pci_get_devid(dev) == ICH4ID) { + if ((pci_get_devid(dev) == ICH4ID) || (pci_get_devid(dev) == ICH5ID)) { pci_write_config(dev, PCIR_ICH_LEGACY, ICH_LEGACY_ENABLE, 1); } /* - * Enable bus master. On ich4 this may prevent the detection of + * Enable bus master. On ich4/5 this may prevent the detection of * the primary codec becoming ready in ich_init(). */ pci_enable_busmaster(dev); @@ -712,7 +717,7 @@ sc->bufsz = pcm_getbuffersize(dev, 4096, ICH_DEFAULT_BUFSZ, ICH_MAX_BUFSZ); if (bus_dma_tag_create(NULL, 8, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, - NULL, NULL, sc->bufsz, 1, 0x3ffff, 0, + NULL, NULL, sc->bufsz, 1, 0x3ffff, 0, busdma_lock_mutex, &Giant, &sc->dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; @@ -811,7 +816,7 @@ struct sc_info *sc; int i; - sc = pcm_getdevinfo(dev); + sc = pcm_getdevinfo(dev); for (i = 0 ; i < 3; i++) { sc->ch[i].run_save = sc->ch[i].run; if (sc->ch[i].run) { ==== //depot/projects/uart/dev/sound/pcm/feeder.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ #include "feeder_if.h" -SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/feeder.c,v 1.29 2003/03/05 14:48:28 orion Exp $"); +SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/feeder.c,v 1.30 2003/07/07 17:40:02 cg Exp $"); MALLOC_DEFINE(M_FEEDER, "feeder", "pcm feeder"); @@ -194,11 +194,13 @@ nf->source = c->feeder; + /* XXX we should use the lowest common denominator for align */ if (nf->align > 0) c->align += nf->align; else if (nf->align < 0 && c->align < -nf->align) c->align = -nf->align; - + if (c->feeder != NULL) + c->feeder->parent = nf; c->feeder = nf; return 0; @@ -372,6 +374,20 @@ return (c->direction == PCMDIR_REC)? best : c->feeder->desc->out; } +void +feeder_printchain(struct pcm_feeder *head) +{ + struct pcm_feeder *f; + + printf("feeder chain (head @%p)\n", head); + f = head; + while (f != NULL) { + printf("%s/%d @ %p\n", f->class->name, f->desc->idx, f); + f = f->source; + } + printf("[end]\n\n"); +} + /*****************************************************************************/ static int ==== //depot/projects/uart/dev/sound/pcm/feeder.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/sound/pcm/feeder.h,v 1.8 2002/01/26 22:13:24 cg Exp $ + * $FreeBSD: src/sys/dev/sound/pcm/feeder.h,v 1.9 2003/07/07 17:40:02 cg Exp $ */ struct pcm_feederdesc { @@ -57,6 +57,7 @@ int chn_addfeeder(struct pcm_channel *c, struct feeder_class *fc, struct pcm_feederdesc *desc); int chn_removefeeder(struct pcm_channel *c); struct pcm_feeder *chn_findfeeder(struct pcm_channel *c, u_int32_t type); +void feeder_printchain(struct pcm_feeder *head); #define FEEDER_DECLARE(feeder, palign, pdata) \ static struct feeder_class feeder ## _class = { \ ==== //depot/projects/uart/dev/usb/umct.c#3 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/usb/umct.c,v 1.2 2003/07/04 01:50:39 jmg Exp $ + * $FreeBSD: src/sys/dev/usb/umct.c,v 1.3 2003/07/07 18:01:23 wpaul Exp $ */ /* @@ -241,7 +241,10 @@ if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_OUT) { ucom->sc_bulkout_no = ed->bEndpointAddress; - ucom->sc_obufsize = UGETW(ed->wMaxPacketSize); + if (uaa->product == USB_PRODUCT_MCT_SITECOM_USB232) + ucom->sc_obufsize = 16; /* device is broken */ + else + ucom->sc_obufsize = UGETW(ed->wMaxPacketSize); continue; } ==== //depot/projects/uart/dev/wi/if_wi_pccard.c#2 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi_pccard.c,v 1.28 2003/06/28 06:17:26 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi_pccard.c,v 1.29 2003/07/07 07:57:35 imp Exp $"); #include "opt_wi.h" @@ -137,6 +137,7 @@ PCMCIA_CARD(COREGA, WIRELESS_LAN_PCC_11, 0), PCMCIA_CARD(COREGA, WIRELESS_LAN_PCCA_11, 0), PCMCIA_CARD(COREGA, WIRELESS_LAN_PCCB_11, 0), + PCMCIA_CARD(COREGA, WIRELESS_LAN_PCCL_11, 0), PCMCIA_CARD(DLINK, DWL650H, 0), PCMCIA_CARD(ELSA, XI300_IEEE, 0), PCMCIA_CARD(ELSA, XI325_IEEE, 0), ==== //depot/projects/uart/geom/geom_dump.c#2 (text+ko) ==== @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/geom/geom_dump.c,v 1.28 2003/06/11 06:49:15 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/geom/geom_dump.c,v 1.29 2003/07/08 21:12:40 phk Exp $"); #include <sys/param.h> #include <sys/sbuf.h> @@ -114,6 +114,8 @@ struct g_provider *pp; struct g_consumer *cp; + if (gp->flags & G_GEOM_WITHER) + return; LIST_FOREACH(pp, &gp->provider, provider) { sbuf_printf(sb, "%d %s %s %ju %u", level, gp->class->name, pp->name, (uintmax_t)pp->mediasize, pp->sectorsize); @@ -162,7 +164,9 @@ sbuf_printf(sb, "\t <provider ref=\"%p\"/>\n", cp->provider); sbuf_printf(sb, "\t <mode>r%dw%de%d</mode>\n", cp->acr, cp->acw, cp->ace); - if (cp->geom->dumpconf != NULL) { + if (cp->geom->flags & G_GEOM_WITHER) + ; + else if (cp->geom->dumpconf != NULL) { sbuf_printf(sb, "\t <config>\n"); cp->geom->dumpconf(sb, "\t ", cp->geom, cp, NULL); sbuf_printf(sb, "\t </config>\n"); @@ -182,7 +186,9 @@ sbuf_printf(sb, "\t <mediasize>%jd</mediasize>\n", (intmax_t)pp->mediasize); sbuf_printf(sb, "\t <sectorsize>%u</sectorsize>\n", pp->sectorsize); - if (pp->geom->dumpconf != NULL) { + if (pp->geom->flags & G_GEOM_WITHER) + ; + else if (pp->geom->dumpconf != NULL) { sbuf_printf(sb, "\t <config>\n"); pp->geom->dumpconf(sb, "\t ", pp->geom, NULL, pp); sbuf_printf(sb, "\t </config>\n"); @@ -201,7 +207,9 @@ sbuf_printf(sb, " <class ref=\"%p\"/>\n", gp->class); sbuf_printf(sb, " <name>%s</name>\n", gp->name); sbuf_printf(sb, " <rank>%d</rank>\n", gp->rank); - if (gp->dumpconf != NULL) { + if (gp->flags & G_GEOM_WITHER) + sbuf_printf(sb, " <wither/>\n"); + else if (gp->dumpconf != NULL) { sbuf_printf(sb, " <config>\n"); gp->dumpconf(sb, "\t", gp, NULL, NULL); sbuf_printf(sb, " </config>\n"); ==== //depot/projects/uart/i386/i386/pmap.c#4 (text+ko) ==== @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.416 2003/07/04 22:13:39 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.417 2003/07/08 19:40:35 alc Exp $"); /*- * Copyright (c) 2003 Networks Associates Technology, Inc. * All rights reserved. @@ -2264,7 +2264,7 @@ ptepa += NBPDR; ptepindex += 1; } - pmap_invalidate_all(kernel_pmap); + pmap_invalidate_all(pmap); } } ==== //depot/projects/uart/i386/i386/sys_machdep.c#2 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/sys_machdep.c,v 1.83 2003/06/15 00:31:23 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/sys_machdep.c,v 1.84 2003/07/08 00:14:30 davidxu Exp $"); #include "opt_kstack_pages.h" #include "opt_mac.h" @@ -289,9 +289,7 @@ if (td->td_proc != curthread->td_proc) return; - mtx_lock_spin(&sched_lock); set_user_ldt(&td->td_proc->p_md); - mtx_unlock_spin(&sched_lock); } #endif @@ -462,9 +460,6 @@ #endif } else { mdp->md_ldt = pldt = new_ldt; -#ifdef SMP - mtx_unlock_spin(&sched_lock); -#endif } #ifdef SMP /* signal other cpus to reload ldt */ @@ -472,8 +467,8 @@ NULL, td); #else set_user_ldt(mdp); +#endif mtx_unlock_spin(&sched_lock); -#endif } descs_size = uap->num * sizeof(union descriptor); ==== //depot/projects/uart/isa/isa_common.c#2 (text+ko) ==== @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/isa/isa_common.c,v 1.35 2003/06/11 00:32:45 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/isa/isa_common.c,v 1.36 2003/07/08 18:56:58 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1117,3 +1117,20 @@ DRIVER_MODULE(isa, legacy, isa_driver, isa_devclass, 0, 0); #endif MODULE_VERSION(isa, 1); + +/* + * Code common to ISA bridges. + */ + +devclass_t isab_devclass; + +int +isab_attach(device_t dev) +{ + device_t child; + + child = device_add_child(dev, "isa", 0); + if (child != NULL) + return (bus_generic_attach(dev)); + return (ENXIO); +} ==== //depot/projects/uart/isa/isavar.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/isa/isavar.h,v 1.24 2002/10/15 00:02:51 jhb Exp $ + * $FreeBSD: src/sys/isa/isavar.h,v 1.25 2003/07/08 18:56:58 jhb Exp $ */ #ifndef _ISA_ISAVAR_H_ @@ -152,6 +152,9 @@ ISA_ACCESSOR(compatid, COMPATID, int) ISA_ACCESSOR(configattr, CONFIGATTR, int) +/* Device class for ISA bridges. */ +extern devclass_t isab_devclass; + extern intrmask_t isa_irq_pending(void); extern void isa_probe_children(device_t dev); @@ -164,6 +167,8 @@ extern int isa_dmastatus(int chan); extern int isa_dmastop(int chan); +int isab_attach(device_t dev); + #ifdef PC98 #include <machine/bus.h> ==== //depot/projects/uart/isa/psm.c#3 (text+ko) ==== @@ -59,7 +59,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/isa/psm.c,v 1.59 2003/07/01 14:41:16 mikeh Exp $"); +__FBSDID("$FreeBSD: src/sys/isa/psm.c,v 1.60 2003/07/07 05:40:13 mikeh Exp $"); #include "opt_psm.h" @@ -1040,6 +1040,10 @@ /* * NOTE: some controllers appears to hang the `keyboard' when the aux * port doesn't exist and `PSMC_RESET_DEV' is issued. + * + * Attempt to reset the controller twice -- this helps + * pierce through some KVM switches. The second reset + * is non-fatal. */ if (!reset_aux_dev(sc->kbdc)) { recover_from_error(sc->kbdc); @@ -1047,6 +1051,11 @@ if (verbose) printf("psm%d: failed to reset the aux device.\n", unit); endprobe(ENXIO); + } else if (!reset_aux_dev(sc->kbdc)) { + recover_from_error(sc->kbdc); + if (verbose >= 2) + printf("psm%d: failed to reset the aux device (2).\n", + unit); } } ==== //depot/projects/uart/kern/sched_ule.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/sched_ule.c,v 1.51 2003/07/04 19:59:00 jeff Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/sched_ule.c,v 1.53 2003/07/08 06:19:40 jeff Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -237,7 +237,7 @@ int sched_pickcpu(void); /* Operations on per processor queues */ -static struct kse * kseq_choose(struct kseq *kseq); +static struct kse * kseq_choose(struct kseq *kseq, int steal); static void kseq_setup(struct kseq *kseq); static void kseq_add(struct kseq *kseq, struct kse *ke); static void kseq_rem(struct kseq *kseq, struct kse *ke); @@ -455,7 +455,7 @@ { struct kse *ke; - ke = kseq_choose(from); + ke = kseq_choose(from, 1); runq_remove(ke->ke_runq, ke); ke->ke_state = KES_THREAD; kseq_rem(from, ke); @@ -465,8 +465,14 @@ } #endif +/* + * Pick the highest priority task we have and return it. If steal is 1 we + * will return kses that have been denied slices due to their nice being too + * low. In the future we should prohibit stealing interrupt threads as well. + */ + struct kse * -kseq_choose(struct kseq *kseq) +kseq_choose(struct kseq *kseq, int steal) { struct kse *ke; struct runq *swap; @@ -492,7 +498,7 @@ * TIMESHARE kse group and its nice was too far out * of the range that receives slices. */ - if (ke->ke_slice == 0) { + if (ke->ke_slice == 0 && steal == 0) { runq_remove(ke->ke_runq, ke); sched_slice(ke); ke->ke_runq = kseq->ksq_next; @@ -528,7 +534,9 @@ static void sched_setup(void *dummy) { +#ifdef SMP int i; +#endif slice_min = (hz/100); /* 10ms */ slice_max = (hz/7); /* ~140ms */ @@ -1060,7 +1068,7 @@ */ kseq = KSEQ_SELF(); #if 0 - if (kseq->ksq_load > 1 && (nke = kseq_choose(kseq)) != NULL) { + if (kseq->ksq_load > 1 && (nke = kseq_choose(kseq, 0)) != NULL) { if (sched_strict && nke->ke_thread->td_priority < td->td_priority) td->td_flags |= TDF_NEEDRESCHED; @@ -1157,7 +1165,7 @@ #else kseq->ksq_load > 1 && #endif - (ke = kseq_choose(kseq)) != NULL && + (ke = kseq_choose(kseq, 0)) != NULL && ke->ke_thread->td_priority < td->td_priority) curthread->td_flags |= TDF_NEEDRESCHED; mtx_unlock_spin(&sched_lock); @@ -1175,7 +1183,7 @@ retry: #endif kseq = KSEQ_SELF(); - ke = kseq_choose(kseq); + ke = kseq_choose(kseq, 0); if (ke) { runq_remove(ke->ke_runq, ke); ke->ke_state = KES_THREAD; ==== //depot/projects/uart/kern/subr_param.c#2 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/subr_param.c,v 1.56 2003/06/11 00:56:57 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/subr_param.c,v 1.58 2003/07/08 18:59:21 silby Exp $"); #include "opt_param.h" #include "opt_maxusers.h" @@ -77,6 +77,9 @@ int nswbuf; int maxswzone; /* max swmeta KVA storage */ int maxbcache; /* max buffer cache KVA storage */ +int maxpipes; /* Limit on # of pipes */ +int maxpipekva; /* Limit on pipe KVA */ +int maxpipekvawired; /* Limit on wired pipe KVA */ u_quad_t maxtsiz; /* max text size */ u_quad_t dfldsiz; /* initial data size limit */ u_quad_t maxdsiz; /* max data size */ @@ -132,6 +135,23 @@ init_param2(long physpages) { + /* Kernel map size */ + int kmempages, kmemtunable; + kmempages = VM_KMEM_SIZE / PAGE_SIZE; +#if defined(VM_KMEM_SIZE_SCALE) + if ((physpages / VM_KMEM_SIZE_SCALE) > kmempages) + kmempages = (physpages / VM_KMEM_SIZE_SCALE); +#endif + +#if defined(VM_KMEM_SIZE_MAX) + if (kmempages * PAGE_SIZE >= VM_KMEM_SIZE_MAX) + kmempages = VM_KMEM_SIZE_MAX / PAGE_SIZE; +#endif + kmemtunable = 0; + TUNABLE_INT_FETCH("kern.vm.kmem.size", &kmemtunable); + if (kmemtunable != 0) + kmempages = kmemtunable / PAGE_SIZE; + kmempages = min(physpages, kmempages); /* Base parameters */ maxusers = MAXUSERS; TUNABLE_INT_FETCH("kern.maxusers", &maxusers); @@ -161,6 +181,23 @@ maxfilesperproc = (maxfiles * 9) / 10; /* + * Limit number of pipes to a reasonable fraction of kmap entries, + * pageable pipe memory usage to 2.5% of the kernel map, and wired + * pipe memory usage to 1% of the same. Ensure that all have + * reasonable floors. (See sys_pipe.c for more info.) + */ + maxpipes = kmempages / 5; + maxpipekva = (kmempages / 40) * PAGE_SIZE; + maxpipekvawired = (kmempages / 100) * PAGE_SIZE; + + if (maxpipes < 128) + maxpipes = 128; + if (maxpipekva < 512 * 1024) + maxpipekva = 512 * 1024; + if (maxpipekvawired < 512 * 1024) + maxpipekvawired = 512 * 1024; + + /* * Cannot be changed after boot. */ nbuf = NBUF; ==== //depot/projects/uart/kern/sys_pipe.c#2 (text+ko) ==== @@ -45,10 +45,32 @@ * happen for small transfers so that the system will not spend all of * its time context switching. PIPE_SIZE is constrained by the * amount of kernel virtual memory. + * + * In order to limit the resource use of pipes, three sysctls exist: + * + * kern.ipc.maxpipes - A limit on the total number of pipes in the system. + * Note that since pipes are bidirectional, the effective value is this + * number divided by two. + * + * kern.ipc.maxpipekva - This value limits the amount of pageable memory that + * can be used by pipes. Whenever the amount in use exceeds this value, + * all new pipes will be SMALL_PIPE_SIZE in size, rather than PIPE_SIZE. + * Big pipe creation will be limited as well. + * + * kern.ipc.maxpipekvawired - This value limits the amount of memory that may + * be wired in order to facilitate direct copies using page flipping. + * Whenever this value is exceeded, pipes will fall back to using regular + * copies. + * + * These values are autotuned in subr_param.c. + * + * Memory usage may be monitored through the sysctls + * kern.ipc.pipes, kern.ipc.pipekva and kern.ipc.pipekvawired. + * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/sys_pipe.c,v 1.137 2003/06/18 18:16:39 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/sys_pipe.c,v 1.138 2003/07/08 04:02:31 silby Exp $"); #include "opt_mac.h" @@ -68,6 +90,7 @@ #include <sys/poll.h> #include <sys/selinfo.h> #include <sys/signalvar.h> +#include <sys/sysctl.h> #include <sys/sysproto.h> #include <sys/pipe.h> #include <sys/proc.h> @@ -148,25 +171,30 @@ #define MAXPIPESIZE (2*PIPE_SIZE/3) /* - * Maximum amount of kva for pipes -- this is kind-of a soft limit, but - * is there so that on large systems, we don't exhaust it. - */ -#define MAXPIPEKVA (8*1024*1024) - -/* - * Limit for direct transfers, we cannot, of course limit - * the amount of kva for pipes in general though. - */ -#define LIMITPIPEKVA (16*1024*1024) - -/* * Limit the number of "big" pipes */ #define LIMITBIGPIPES 32 static int nbigpipe; +static int amountpipes; static int amountpipekva; +static int amountpipekvawired; +SYSCTL_DECL(_kern_ipc); + +SYSCTL_INT(_kern_ipc, OID_AUTO, maxpipes, CTLFLAG_RW, + &maxpipes, 0, ""); +SYSCTL_INT(_kern_ipc, OID_AUTO, maxpipekva, CTLFLAG_RW, + &maxpipekva, 0, "Pipe KVA limit"); +SYSCTL_INT(_kern_ipc, OID_AUTO, maxpipekvawired, CTLFLAG_RW, + &maxpipekvawired, 0, "Pipe KVA wired limit"); +SYSCTL_INT(_kern_ipc, OID_AUTO, pipes, CTLFLAG_RD, + &amountpipes, 0, ""); +SYSCTL_INT(_kern_ipc, OID_AUTO, pipekva, CTLFLAG_RD, + &amountpipekva, 0, "Pipe KVA usage"); +SYSCTL_INT(_kern_ipc, OID_AUTO, pipekvawired, CTLFLAG_RD, + &amountpipekvawired, 0, "Pipe wired KVA usage"); + static void pipeinit(void *dummy __unused); static void pipeclose(struct pipe *cpipe); static void pipe_free_kmem(struct pipe *cpipe); @@ -303,11 +331,19 @@ struct vm_object *object; caddr_t buffer; int npages, error; + static int curfail = 0; + static struct timeval lastfail; GIANT_REQUIRED; KASSERT(cpipe->pipe_mtxp == NULL || !mtx_owned(PIPE_MTX(cpipe)), ("pipespace: pipe mutex locked")); + if (amountpipes > maxpipes) { + if (ppsratecheck(&lastfail, &curfail, 1)) + printf("kern.maxpipes exceeded, please see tuning(7).\n"); + return (ENOMEM); + } + npages = round_page(size)/PAGE_SIZE; /* * Create an object, I don't like the idea of paging to/from @@ -339,6 +375,7 @@ cpipe->pipe_buffer.in = 0; cpipe->pipe_buffer.out = 0; cpipe->pipe_buffer.cnt = 0; + atomic_add_int(&amountpipes, 1); atomic_add_int(&amountpipekva, cpipe->pipe_buffer.size); return (0); } @@ -385,7 +422,13 @@ #endif cpipe->pipe_mtxp = NULL; /* avoid pipespace assertion */ - error = pipespace(cpipe, PIPE_SIZE); + /* + * Reduce to 1/4th pipe size if we're over our global max. + */ + if (amountpipekva > maxpipekva) + error = pipespace(cpipe, SMALL_PIPE_SIZE); + else + error = pipespace(cpipe, PIPE_SIZE); if (error) return (error); @@ -654,8 +697,11 @@ int j; vm_page_lock_queues(); - for (j = 0; j < i; j++) + for (j = 0; j < i; j++) { vm_page_unwire(wpipe->pipe_map.ms[j], 1); + atomic_subtract_int(&amountpipekvawired, + PAGE_SIZE); + } vm_page_unlock_queues(); return (EFAULT); } @@ -663,6 +709,7 @@ m = PHYS_TO_VM_PAGE(paddr); vm_page_lock_queues(); vm_page_wire(m); + atomic_add_int(&amountpipekvawired, PAGE_SIZE); vm_page_unlock_queues(); wpipe->pipe_map.ms[i] = m; } @@ -719,7 +766,7 @@ if (wpipe->pipe_map.kva) { pmap_qremove(wpipe->pipe_map.kva, wpipe->pipe_map.npages); - if (amountpipekva > MAXPIPEKVA) { + if (amountpipekva > maxpipekva) { vm_offset_t kva = wpipe->pipe_map.kva; wpipe->pipe_map.kva = 0; kmem_free(kernel_map, kva, @@ -729,8 +776,10 @@ } } vm_page_lock_queues(); - for (i = 0; i < wpipe->pipe_map.npages; i++) + for (i = 0; i < wpipe->pipe_map.npages; i++) { vm_page_unwire(wpipe->pipe_map.ms[i], 1); + atomic_subtract_int(&amountpipekvawired, PAGE_SIZE); + } vm_page_unlock_queues(); wpipe->pipe_map.npages = 0; } @@ -904,6 +953,7 @@ * so. */ if ((uio->uio_resid > PIPE_SIZE) && + (amountpipekva < maxpipekva) && (nbigpipe < LIMITBIGPIPES) && (wpipe->pipe_state & PIPE_DIRECTW) == 0 && (wpipe->pipe_buffer.size <= PIPE_SIZE) && @@ -950,7 +1000,7 @@ >>> TRUNCATED FOR MAIL (1000 lines) <<<help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200307090708.h6978BWQ003481>
