Date: Thu, 29 Jun 2006 14:05:35 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 100286 for review Message-ID: <200606291405.k5TE5ZkR067605@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=100286 Change 100286 by jhb@jhb_mutex on 2006/06/29 14:04:43 IFC @100284. Affected files ... .. //depot/projects/smpng/sys/compat/linprocfs/linprocfs.c#48 integrate .. //depot/projects/smpng/sys/dev/ata/ata-all.h#48 integrate .. //depot/projects/smpng/sys/dev/ata/ata-chipset.c#68 integrate .. //depot/projects/smpng/sys/dev/ata/atapi-cd.c#63 integrate .. //depot/projects/smpng/sys/dev/bge/if_bge.c#77 integrate .. //depot/projects/smpng/sys/dev/bge/if_bgereg.h#43 integrate .. //depot/projects/smpng/sys/dev/re/if_re.c#41 integrate .. //depot/projects/smpng/sys/dev/usb/uplcom.c#25 integrate .. //depot/projects/smpng/sys/dev/usb/usbdevs#91 integrate .. //depot/projects/smpng/sys/fs/pseudofs/pseudofs_vnops.c#46 integrate .. //depot/projects/smpng/sys/i386/conf/XBOX#6 integrate .. //depot/projects/smpng/sys/kern/sched_core.c#3 integrate .. //depot/projects/smpng/sys/net/if_enc.c#2 integrate .. //depot/projects/smpng/sys/net/if_gif.c#34 integrate .. //depot/projects/smpng/sys/net/if_vlan.c#49 integrate .. //depot/projects/smpng/sys/netinet/in_pcb.c#65 integrate .. //depot/projects/smpng/sys/netinet/ip_fw2.c#73 integrate .. //depot/projects/smpng/sys/netinet/ip_output.c#85 integrate .. //depot/projects/smpng/sys/netinet/tcp_input.c#88 integrate .. //depot/projects/smpng/sys/netinet6/in6_pcb.c#44 integrate .. //depot/projects/smpng/sys/pci/if_rlreg.h#31 integrate Differences ... ==== //depot/projects/smpng/sys/compat/linprocfs/linprocfs.c#48 (text+ko) ==== @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.95 2006/06/12 18:14:49 des Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.96 2006/06/27 20:11:58 netchild Exp $"); #include <sys/param.h> #include <sys/queue.h> @@ -63,6 +63,7 @@ #include <sys/socket.h> #include <sys/sysctl.h> #include <sys/systm.h> +#include <sys/time.h> #include <sys/tty.h> #include <sys/user.h> #include <sys/vmmeter.h> @@ -106,6 +107,22 @@ #define P2B(x) ((x) << PAGE_SHIFT) /* pages to bytes */ #define P2K(x) ((x) << (PAGE_SHIFT - 10)) /* pages to kbytes */ +/** + * @brief Mapping of ki_stat in struct kinfo_proc to the linux state + * + * The linux procfs state field displays one of the characters RSDZTW to + * denote running, sleeping in an interruptible wait, waiting in an + * uninteruptible disk sleep, a zombie process, process is being traced + * or stopped, or process is paging respectively. + * + * Our struct kinfo_proc contains the variable ki_stat which contains a + * value out of SIDL, SRUN, SSLEEP, SSTOP, SZOMB, SWAIT and SLOCK. + * + * This character array is used with ki_stati-1 as an index and tries to + * map our states to suitable linux states. + */ +static char *linux_state = "RRSTZDD"; + /* * Filler function for proc/meminfo */ @@ -451,44 +468,51 @@ sbuf_printf(sb, "%d", p->p_pid); #define PS_ADD(name, fmt, arg) sbuf_printf(sb, " " fmt, arg) PS_ADD("comm", "(%s)", p->p_comm); - PS_ADD("statr", "%c", '0'); /* XXX */ + KASSERT(kp.ki_stat <= sizeof(linux_state), + ("linprocfs: don't know how to handle unknown FreeBSD state")); + PS_ADD("state", "%c", linux_state[kp.ki_stat - 1]); PS_ADD("ppid", "%d", p->p_pptr ? p->p_pptr->p_pid : 0); PS_ADD("pgrp", "%d", p->p_pgid); PS_ADD("session", "%d", p->p_session->s_sid); PROC_UNLOCK(p); PS_ADD("tty", "%d", 0); /* XXX */ - PS_ADD("tpgid", "%d", 0); /* XXX */ + PS_ADD("tpgid", "%d", kp.ki_tpgid); PS_ADD("flags", "%u", 0); /* XXX */ - PS_ADD("minflt", "%u", 0); /* XXX */ - PS_ADD("cminflt", "%u", 0); /* XXX */ - PS_ADD("majflt", "%u", 0); /* XXX */ - PS_ADD("cminflt", "%u", 0); /* XXX */ - PS_ADD("utime", "%d", 0); /* XXX */ - PS_ADD("stime", "%d", 0); /* XXX */ - PS_ADD("cutime", "%d", 0); /* XXX */ - PS_ADD("cstime", "%d", 0); /* XXX */ - PS_ADD("counter", "%d", 0); /* XXX */ - PS_ADD("priority", "%d", 0); /* XXX */ - PS_ADD("timeout", "%u", 0); /* XXX */ - PS_ADD("itrealvalue", "%u", 0); /* XXX */ - PS_ADD("starttime", "%d", 0); /* XXX */ - PS_ADD("vsize", "%ju", (uintmax_t)kp.ki_size); - PS_ADD("rss", "%ju", P2K((uintmax_t)kp.ki_rssize)); - PS_ADD("rlim", "%u", 0); /* XXX */ + PS_ADD("minflt", "%lu", kp.ki_rusage.ru_minflt); + PS_ADD("cminflt", "%lu", kp.ki_rusage_ch.ru_minflt); + PS_ADD("majflt", "%lu", kp.ki_rusage.ru_majflt); + PS_ADD("cmajflt", "%lu", kp.ki_rusage_ch.ru_majflt); + PS_ADD("utime", "%ld", T2J(tvtohz(&kp.ki_rusage.ru_utime))); + PS_ADD("stime", "%ld", T2J(tvtohz(&kp.ki_rusage.ru_stime))); + PS_ADD("cutime", "%ld", T2J(tvtohz(&kp.ki_rusage_ch.ru_utime))); + PS_ADD("cstime", "%ld", T2J(tvtohz(&kp.ki_rusage_ch.ru_stime))); + PS_ADD("priority", "%d", kp.ki_pri.pri_user); + PS_ADD("nice", "%d", kp.ki_nice); /* 19 (nicest) to -19 */ + PS_ADD("0", "%d", 0); /* removed field */ + PS_ADD("itrealvalue", "%d", 0); /* XXX */ + /* XXX: starttime is not right, it is the _same_ for _every_ process. + It should be the number of jiffies between system boot and process + start. */ + PS_ADD("starttime", "%lu", T2J(tvtohz(&kp.ki_start))); + PS_ADD("vsize", "%ju", P2K((uintmax_t)kp.ki_size)); + PS_ADD("rss", "%ju", (uintmax_t)kp.ki_rssize); + PS_ADD("rlim", "%lu", kp.ki_rusage.ru_maxrss); PS_ADD("startcode", "%u", (unsigned)0); PS_ADD("endcode", "%u", 0); /* XXX */ PS_ADD("startstack", "%u", 0); /* XXX */ - PS_ADD("esp", "%u", 0); /* XXX */ - PS_ADD("eip", "%u", 0); /* XXX */ - PS_ADD("signal", "%d", 0); /* XXX */ - PS_ADD("blocked", "%d", 0); /* XXX */ - PS_ADD("sigignore", "%d", 0); /* XXX */ - PS_ADD("sigcatch", "%d", 0); /* XXX */ + PS_ADD("kstkesp", "%u", 0); /* XXX */ + PS_ADD("kstkeip", "%u", 0); /* XXX */ + PS_ADD("signal", "%u", 0); /* XXX */ + PS_ADD("blocked", "%u", 0); /* XXX */ + PS_ADD("sigignore", "%u", 0); /* XXX */ + PS_ADD("sigcatch", "%u", 0); /* XXX */ PS_ADD("wchan", "%u", 0); /* XXX */ - PS_ADD("nswap", "%lu", (long unsigned)0); /* XXX */ - PS_ADD("cnswap", "%lu", (long unsigned)0); /* XXX */ + PS_ADD("nswap", "%lu", kp.ki_rusage.ru_nswap); + PS_ADD("cnswap", "%lu", kp.ki_rusage_ch.ru_nswap); PS_ADD("exitsignal", "%d", 0); /* XXX */ - PS_ADD("processor", "%d", 0); /* XXX */ + PS_ADD("processor", "%u", kp.ki_lastcpu); + PS_ADD("rt_priority", "%u", 0); /* XXX */ /* >= 2.5.19 */ + PS_ADD("policy", "%u", kp.ki_pri.pri_class); /* >= 2.5.19 */ #undef PS_ADD sbuf_putc(sb, '\n'); ==== //depot/projects/smpng/sys/dev/ata/ata-all.h#48 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.117 2006/03/31 08:09:04 sos Exp $ + * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.118 2006/06/28 09:59:09 sos Exp $ */ /* ATA register defines */ @@ -149,6 +149,8 @@ /* SATA AHCI v1.0 register defines */ #define ATA_AHCI_CAP 0x00 #define ATA_AHCI_NPMASK 0x1f +#define ATA_AHCI_CAP_CLO 0x01000000 +#define ATA_AHCI_CAP_64BIT 0x80000000 #define ATA_AHCI_GHC 0x04 #define ATA_AHCI_GHC_AE 0x80000000 ==== //depot/projects/smpng/sys/dev/ata/ata-chipset.c#68 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.163 2006/06/19 11:47:57 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.164 2006/06/28 09:59:09 sos Exp $"); #include "opt_ata.h" #include <sys/param.h> @@ -59,6 +59,7 @@ static void ata_sata_phy_event(void *context, int dummy); static int ata_sata_connect(struct ata_channel *ch); static void ata_sata_setmode(device_t dev, int mode); +static int ata_ahci_chipinit(device_t dev); static int ata_ahci_allocate(device_t dev); static int ata_ahci_status(device_t dev); static int ata_ahci_begin_transaction(struct ata_request *request); @@ -394,6 +395,54 @@ static int +ata_ahci_chipinit(device_t dev) +{ + struct ata_pci_controller *ctlr = device_get_softc(dev); + u_int32_t version; + + /* reset AHCI controller */ + ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, + ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_HR); + DELAY(1000000); + if (ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) & ATA_AHCI_GHC_HR) { + bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2, ctlr->r_res2); + device_printf(dev, "AHCI controller reset failure\n"); + return ENXIO; + } + + /* enable AHCI mode */ + ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, + ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_AE); + + /* get the number of HW channels */ + ctlr->channels = (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_NPMASK)+1; + + /* clear interrupts */ + ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, ATA_INL(ctlr->r_res2, ATA_AHCI_IS)); + + /* enable AHCI interrupts */ + ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, + ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_IE); + + ctlr->reset = ata_ahci_reset; + ctlr->dmainit = ata_ahci_dmainit; + ctlr->allocate = ata_ahci_allocate; + ctlr->setmode = ata_sata_setmode; + + /* enable PCI interrupt */ + pci_write_config(dev, PCIR_COMMAND, + pci_read_config(dev, PCIR_COMMAND, 2) & ~0x0400, 2); + + /* announce we support the HW */ + version = ATA_INL(ctlr->r_res2, ATA_AHCI_VS); + device_printf(dev, + "AHCI Version %x%x.%x%x controller with %d ports detected\n", + (version >> 24) & 0xff, (version >> 16) & 0xff, + (version >> 8) & 0xff, version & 0xff, ctlr->channels); + return 0; +} + +static int ata_ahci_allocate(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); @@ -459,7 +508,8 @@ int offset = (ch->unit << 7); int tag = 0; - if ((action = ATA_INL(ctlr->r_res2, ATA_AHCI_IS)) & (1 << ch->unit)) { + action = ATA_INL(ctlr->r_res2, ATA_AHCI_IS); + if (action & (1 << ch->unit)) { istatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_IS + offset); issued = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CI + offset); sstatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_SSTS + offset); @@ -472,7 +522,7 @@ /* do we have cold connect surprise */ if (istatus & ATA_AHCI_P_IX_CPD) { - printf("ata_ahci_intr status=%08x sstatus=%08x error=%08x\n", + printf("ata_ahci_status status=%08x sstatus=%08x error=%08x\n", istatus, sstatus, error); } @@ -521,8 +571,8 @@ struct ata_channel *ch = device_get_softc(device_get_parent(request->dev)); struct ata_ahci_cmd_tab *ctp; struct ata_ahci_cmd_list *clp; - int fis_size, entries; - int tag = 0; + int tag = 0, entries = 0; + int fis_size; /* get a piece of the workspace for this request */ ctp = (struct ata_ahci_cmd_tab *) @@ -608,15 +658,37 @@ struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); u_int32_t cmd; - int offset = (ch->unit << 7); + int timeout, offset = (ch->unit << 7); /* kill off all activity on this channel */ cmd = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset); ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, - cmd & ~(ATA_AHCI_P_CMD_CR | ATA_AHCI_P_CMD_FR | - ATA_AHCI_P_CMD_FRE | ATA_AHCI_P_CMD_ST)); + cmd & ~(ATA_AHCI_P_CMD_FRE | ATA_AHCI_P_CMD_ST)); + + /* XXX SOS this is not entirely wrong */ + timeout = 0; + do { + DELAY(1000); + if (timeout++ > 500) + device_printf(dev, "stopping AHCI engine failed\n"); + break; + } + while (ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset) & ATA_AHCI_P_CMD_CR); - DELAY(500000); /* XXX SOS this is not entirely wrong */ + /* issue Command List Override if supported */ + if (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_CAP_CLO) { + cmd = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset); + cmd |= ATA_AHCI_P_CMD_CLO; + ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, cmd); + timeout = 0; + do { + DELAY(1000); + if (timeout++ > 500) + device_printf(dev, "executing CLO failed\n"); + break; + } + while (ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD+offset)&ATA_AHCI_P_CMD_CLO); + } /* spin up device */ ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, ATA_AHCI_P_CMD_SUD); @@ -1653,43 +1725,18 @@ ctlr->allocate = ata_intel_allocate; ctlr->reset = ata_intel_reset; - /* if we have AHCI capability and BAR(5) as a memory resource */ - if (ctlr->chip->cfg1 == AHCI) { + /* + * if we have AHCI capability and BAR(5) as a memory resource + * and AHCI or RAID mode enabled in BIOS we go for AHCI mode + */ + if ((ctlr->chip->cfg1 == AHCI) && + (pci_read_config(dev, 0x90, 1) & 0xc0)) { ctlr->r_type2 = SYS_RES_MEMORY; ctlr->r_rid2 = PCIR_BAR(5); if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, &ctlr->r_rid2, - RF_ACTIVE))) { - /* is AHCI or RAID mode enabled in BIOS ? */ - if (pci_read_config(dev, 0x90, 1) & 0xc0) { - - /* reset AHCI controller */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, - ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_HR); - DELAY(1000000); - if (ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) & ATA_AHCI_GHC_HR) { - bus_release_resource(dev, ctlr->r_type2, - ctlr->r_rid2, ctlr->r_res2); - device_printf(dev, "AHCI controller reset failure\n"); - return ENXIO; - } - - /* enable AHCI mode */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_AE); - - /* get the number of HW channels */ - ctlr->channels = (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & - ATA_AHCI_NPMASK) + 1; - - /* enable AHCI interrupts */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, - ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | - ATA_AHCI_GHC_IE); - ctlr->allocate = ata_ahci_allocate; - ctlr->reset = ata_ahci_reset; - ctlr->dmainit = ata_ahci_dmainit; - } - } + RF_ACTIVE))) + return ata_ahci_chipinit(dev); } ctlr->setmode = ata_sata_setmode; @@ -2091,6 +2138,7 @@ ata_jmicron_chipinit(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(dev); + int error; if (ata_setup_interrupt(dev)) return ENXIO; @@ -2108,30 +2156,8 @@ ctlr->r_rid2 = PCIR_BAR(5); if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, &ctlr->r_rid2, RF_ACTIVE))) { - /* reset AHCI controller */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, - ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_HR); - DELAY(1000000); - if (ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) & ATA_AHCI_GHC_HR) { - bus_release_resource(dev, ctlr->r_type2, ctlr->r_rid2,ctlr->r_res2); - device_printf(dev, "AHCI controller reset failure\n"); - return ENXIO; - } - - /* enable AHCI mode */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, - ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_AE); - - /* clear interrupts */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, ATA_INL(ctlr->r_res2, ATA_AHCI_IS)); - - /* enable AHCI interrupts */ - ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, - ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_IE); - - /* enable PCI interrupt */ - pci_write_config(dev, PCIR_COMMAND, - pci_read_config(dev, PCIR_COMMAND, 2) & ~0x0400, 2); + if ((error = ata_ahci_chipinit(dev))) + return error; } /* set the number of HW channels */ @@ -4612,7 +4638,7 @@ {{ ATA_VIA6410, 0x00, 0, 0x00, ATA_UDMA6, "6410" }, { ATA_VIA6420, 0x00, 7, 0x00, ATA_SA150, "6420" }, { ATA_VIA6421, 0x00, 6, VIABAR, ATA_SA150, "6421" }, - { ATA_VIA8251, 0x00, 0, VIAAHCI, ATA_SA150, "8251" }, + { ATA_VIA8251, 0x00, 0, VIAAHCI, ATA_SA300, "8251" }, { 0, 0, 0, 0, 0, 0 }}; char buffer[64]; @@ -4642,6 +4668,15 @@ return ENXIO; if (ctlr->chip->max_dma >= ATA_SA150) { + if (ctlr->chip->cfg2 == VIAAHCI) { + ctlr->r_type2 = SYS_RES_MEMORY; + ctlr->r_rid2 = PCIR_BAR(5); + if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, + &ctlr->r_rid2, + RF_ACTIVE))) { + return ata_ahci_chipinit(dev); + } + } ctlr->r_type2 = SYS_RES_IOPORT; ctlr->r_rid2 = PCIR_BAR(5); if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, ==== //depot/projects/smpng/sys/dev/ata/atapi-cd.c#63 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.188 2006/03/31 08:09:05 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.189 2006/06/28 15:04:10 sos Exp $"); #include "opt_ata.h" #include <sys/param.h> @@ -1335,7 +1335,8 @@ error = ata_atapicmd(dev, ccb, (caddr_t)d, length, ai->format == DVD_INVALIDATE_AGID ? 0 : ATA_R_READ,10); if (error) { - free(d, M_ACD); + if (length) + free(d, M_ACD); return error; } @@ -1377,7 +1378,8 @@ default: error = EINVAL; } - free(d, M_ACD); + if (length) + free(d, M_ACD); return error; } ==== //depot/projects/smpng/sys/dev/bge/if_bge.c#77 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.133 2006/06/15 14:35:31 glebius Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.135 2006/06/29 06:38:21 glebius Exp $"); /* * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. @@ -171,10 +171,17 @@ { BCOM_VENDORID, BCOM_DEVICEID_BCM5753 }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5753F }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5753M }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5754 }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5754M }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5755 }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5755M }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5780 }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5780S }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5781 }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5782 }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5786 }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5787 }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5787M }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5788 }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5789 }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5901 }, @@ -223,6 +230,7 @@ { BGE_CHIPID_BCM5703_A1, "BCM5703 A1" }, { BGE_CHIPID_BCM5703_A2, "BCM5703 A2" }, { BGE_CHIPID_BCM5703_A3, "BCM5703 A3" }, + { BGE_CHIPID_BCM5703_B0, "BCM5703 B0" }, { BGE_CHIPID_BCM5704_A0, "BCM5704 A0" }, { BGE_CHIPID_BCM5704_A1, "BCM5704 A1" }, { BGE_CHIPID_BCM5704_A2, "BCM5704 A2" }, @@ -256,36 +264,19 @@ * that we don't know about have a shot at working. */ static const struct bge_revision bge_majorrevs[] = { - { BGE_ASICREV_BCM5700, - "unknown BCM5700" }, + { BGE_ASICREV_BCM5700, "unknown BCM5700" }, + { BGE_ASICREV_BCM5701, "unknown BCM5701" }, + { BGE_ASICREV_BCM5703, "unknown BCM5703" }, + { BGE_ASICREV_BCM5704, "unknown BCM5704" }, + { BGE_ASICREV_BCM5705, "unknown BCM5705" }, + { BGE_ASICREV_BCM5750, "unknown BCM5750" }, + { BGE_ASICREV_BCM5714_A0, "unknown BCM5714" }, + { BGE_ASICREV_BCM5752, "unknown BCM5752" }, + { BGE_ASICREV_BCM5780, "unknown BCM5780" }, + { BGE_ASICREV_BCM5714, "unknown BCM5714" }, + { BGE_ASICREV_BCM5755, "unknown BCM5755" }, + { BGE_ASICREV_BCM5787, "unknown BCM5787" }, - { BGE_ASICREV_BCM5701, - "unknown BCM5701" }, - - { BGE_ASICREV_BCM5703, - "unknown BCM5703" }, - - { BGE_ASICREV_BCM5704, - "unknown BCM5704" }, - - { BGE_ASICREV_BCM5705, - "unknown BCM5705" }, - - { BGE_ASICREV_BCM5750, - "unknown BCM5750" }, - - { BGE_ASICREV_BCM5714_A0, - "unknown BCM5714" }, - - { BGE_ASICREV_BCM5752, - "unknown BCM5752" }, - - { BGE_ASICREV_BCM5780, - "unknown BCM5780" }, - - { BGE_ASICREV_BCM5714, - "unknown BCM5714" }, - { 0, NULL } }; @@ -295,23 +286,29 @@ (sc)->bge_asicrev == BGE_ASICREV_BCM5714_A0 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5780 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5714 || \ - (sc)->bge_asicrev == BGE_ASICREV_BCM5752) + (sc)->bge_asicrev == BGE_ASICREV_BCM5752 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5755 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5787) #define BGE_IS_575X_PLUS(sc) \ ((sc)->bge_asicrev == BGE_ASICREV_BCM5750 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5714_A0 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5780 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5714 || \ - (sc)->bge_asicrev == BGE_ASICREV_BCM5752) + (sc)->bge_asicrev == BGE_ASICREV_BCM5752 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5755 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5787) #define BGE_IS_5714_FAMILY(sc) \ ((sc)->bge_asicrev == BGE_ASICREV_BCM5714_A0 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5780 || \ (sc)->bge_asicrev == BGE_ASICREV_BCM5714) -#define BGE_IS_JUMBO_CAPABLE(sc) \ - ((sc)->bge_asicrev != BGE_ASICREV_BCM5705 && \ - (sc)->bge_asicrev != BGE_ASICREV_BCM5750) +#define BGE_IS_JUMBO_CAPABLE(sc) \ + ((sc)->bge_asicrev == BGE_ASICREV_BCM5700 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5701 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5703 || \ + (sc)->bge_asicrev == BGE_ASICREV_BCM5704) const struct bge_revision * bge_lookup_rev(uint32_t); const struct bge_vendor * bge_lookup_vendor(uint16_t); ==== //depot/projects/smpng/sys/dev/bge/if_bgereg.h#43 (text+ko) ==== @@ -30,7 +30,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.49 2006/06/15 14:31:49 glebius Exp $ + * $FreeBSD: src/sys/dev/bge/if_bgereg.h,v 1.50 2006/06/28 09:12:29 glebius Exp $ */ /* @@ -240,6 +240,7 @@ #define BGE_CHIPID_BCM5703_A1 0x10010000 #define BGE_CHIPID_BCM5703_A2 0x10020000 #define BGE_CHIPID_BCM5703_A3 0x10030000 +#define BGE_CHIPID_BCM5703_B0 0x11000000 #define BGE_CHIPID_BCM5704_A0 0x20000000 #define BGE_CHIPID_BCM5704_A1 0x20010000 #define BGE_CHIPID_BCM5704_A2 0x20020000 @@ -277,6 +278,8 @@ #define BGE_ASICREV_BCM5700 0x07 #define BGE_ASICREV_BCM5780 0x08 #define BGE_ASICREV_BCM5714 0x09 +#define BGE_ASICREV_BCM5755 0x0a +#define BGE_ASICREV_BCM5787 0x0b /* chip revisions */ #define BGE_CHIPREV(x) ((x) >> 24) @@ -1989,10 +1992,17 @@ #define BCOM_DEVICEID_BCM5753 0x16F7 #define BCOM_DEVICEID_BCM5753F 0x16FE #define BCOM_DEVICEID_BCM5753M 0x16FD +#define BCOM_DEVICEID_BCM5754 0x167A +#define BCOM_DEVICEID_BCM5754M 0x1672 +#define BCOM_DEVICEID_BCM5755 0x167B +#define BCOM_DEVICEID_BCM5755M 0x1673 #define BCOM_DEVICEID_BCM5780 0x166A #define BCOM_DEVICEID_BCM5780S 0x166B #define BCOM_DEVICEID_BCM5781 0x16DD #define BCOM_DEVICEID_BCM5782 0x1696 +#define BCOM_DEVICEID_BCM5786 0x169A +#define BCOM_DEVICEID_BCM5787 0x169B +#define BCOM_DEVICEID_BCM5787M 0x1693 #define BCOM_DEVICEID_BCM5788 0x169C #define BCOM_DEVICEID_BCM5789 0x169D #define BCOM_DEVICEID_BCM5901 0x170D ==== //depot/projects/smpng/sys/dev/re/if_re.c#41 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.68 2006/06/26 20:31:31 wpaul Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.69 2006/06/28 16:04:54 wpaul Exp $"); /* * RealTek 8139C+/8169/8169S/8110S/8168/8111/8101E PCI NIC driver @@ -173,7 +173,9 @@ { RT_VENDORID, RT_DEVICEID_8101E, RL_HWREV_8101E, "RealTek 8101E PCIe 10/100baseTX" }, { RT_VENDORID, RT_DEVICEID_8168, RL_HWREV_8168, - "RealTek 8168B/8111B PCIe Gigabit Ethernet" }, + "RealTek 8168B PCIe Gigabit Ethernet" }, + { RT_VENDORID, RT_DEVICEID_8168, RL_HWREV_8111, + "RealTek 8111B PCIe Gigabit Ethernet" }, { RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169, "RealTek 8169 Gigabit Ethernet" }, { RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169S, @@ -210,6 +212,7 @@ { RL_HWREV_8101, RL_8139, "8101"}, { RL_HWREV_8100E, RL_8169, "8100E"}, { RL_HWREV_8101E, RL_8169, "8101E"}, + { RL_HWREV_8111, RL_8169, "8111"}, { 0, 0, NULL } }; ==== //depot/projects/smpng/sys/dev/usb/uplcom.c#25 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/usb/uplcom.c,v 1.34 2006/06/19 16:31:58 matteo Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/usb/uplcom.c,v 1.36 2006/06/29 06:31:13 takawata Exp $"); /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -236,6 +236,8 @@ { USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2, -1, TYPE_PL2303 }, /* I/O DATA USB-RSAQ3 */ { USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ3, -1, TYPE_PL2303X }, + /* Willcom W-SIM*/ + { USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_WSIM, -1, TYPE_PL2303X}, /* PLANEX USB-RS232 URS-03 */ { USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A, -1, TYPE_PL2303 }, /* ST Lab USB-SERIAL-4 */ ==== //depot/projects/smpng/sys/dev/usb/usbdevs#91 (text+ko) ==== @@ -1,4 +1,4 @@ -$FreeBSD: src/sys/dev/usb/usbdevs,v 1.261 2006/06/18 17:55:29 netchild Exp $ +$FreeBSD: src/sys/dev/usb/usbdevs,v 1.262 2006/06/29 06:17:48 takawata Exp $ /* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */ /*- @@ -499,6 +499,7 @@ vendor SERVERWORKS 0x1166 ServerWorks vendor ACERCM 0x1189 Acer Communications & Multimedia vendor SIERRA 0x1199 Sierra Wireless +vendor PROLIFIC2 0x11f6 Prolific vendor TWINMOS 0x126f TwinMOS vendor TSUNAMI 0x1241 Tsunami vendor CREATIVE2 0x1292 Creative Labs @@ -1403,7 +1404,7 @@ product PROLIFIC ATAPI4 0x2307 ATAPI-4 Controller product PROLIFIC PL2501 0x2501 PL2501 Host-Host interface product PROLIFIC RSAQ3 0xaaa2 PL2303 Serial adapter (IODATA USB-RSAQ3) - +product PROLIFIC2 WSIM 0x2001 Willcom WSIM /* Putercom products */ product PUTERCOM UPA100 0x047e USB-1284 BRIDGE ==== //depot/projects/smpng/sys/fs/pseudofs/pseudofs_vnops.c#46 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/fs/pseudofs/pseudofs_vnops.c,v 1.59 2006/02/22 18:57:49 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/fs/pseudofs/pseudofs_vnops.c,v 1.60 2006/06/27 20:21:38 netchild Exp $"); #include "opt_pseudofs.h" @@ -515,7 +515,7 @@ if (uio->uio_offset < 0 || uio->uio_resid < 0 || (offset = uio->uio_offset) != uio->uio_offset || (resid = uio->uio_resid) != uio->uio_resid || - (buflen = offset + resid) < offset || buflen > INT_MAX) { + (buflen = offset + resid + 1) < offset || buflen > INT_MAX) { if (proc != NULL) PRELE(proc); PFS_RETURN (EINVAL); ==== //depot/projects/smpng/sys/i386/conf/XBOX#6 (text+ko) ==== @@ -1,7 +1,7 @@ # # XBOX -- kernel for an XBOX # -# $FreeBSD: src/sys/i386/conf/XBOX,v 1.5 2006/06/15 19:58:50 netchild Exp $ +# $FreeBSD: src/sys/i386/conf/XBOX,v 1.6 2006/06/27 20:22:32 rink Exp $ cpu I686_CPU # Celeron ident XBOX @@ -103,4 +103,4 @@ device sound device snd_ich # nForce audio -device nve # nVidia nForce MCP on-board Ethernet Networking +device nfe # nVidia nForce MCP on-board Ethernet Networking ==== //depot/projects/smpng/sys/kern/sched_core.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/sched_core.c,v 1.5 2006/06/15 06:37:39 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/sched_core.c,v 1.9 2006/06/29 12:29:20 davidxu Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_sched.h" @@ -185,24 +185,26 @@ * have several of these. */ struct kse { + struct thread *ke_thread; /* (*) Active associated thread. */ TAILQ_ENTRY(kse) ke_procq; /* (j/z) Run queue. */ int ke_flags; /* (j) KEF_* flags. */ - struct thread *ke_thread; /* (*) Active associated thread. */ fixpt_t ke_pctcpu; /* (j) %cpu during p_swtime. */ u_char ke_rqindex; /* (j) Run queue index. */ enum { KES_THREAD = 0x0, /* slaved to thread state */ KES_ONRUNQ } ke_state; /* (j) thread sched specific status. */ - int ke_slice; - struct krunq *ke_runq; + int ke_slice; /* Time slice in ticks */ + struct kseq *ke_kseq; /* Kseq the thread belongs to */ + struct krunq *ke_runq; /* Assiociated runqueue */ +#ifdef SMP int ke_cpu; /* CPU that we have affinity for. */ - int ke_activated; - uint64_t ke_timestamp; - uint64_t ke_lastran; -#ifdef SMP - int ke_tocpu; + int ke_wakeup_cpu; /* CPU that has activated us. */ #endif + int ke_activated; /* How is the thread activated. */ + uint64_t ke_timestamp; /* Last timestamp dependent on state.*/ + unsigned ke_lastran; /* Last timestamp the thread ran. */ + /* The following variables are only used for pctcpu calculation */ int ke_ltick; /* Last tick that we were running on */ int ke_ftick; /* First tick that we were running on */ @@ -214,19 +216,14 @@ #define ke_ksegrp ke_thread->td_ksegrp /* flags kept in ke_flags */ -#define KEF_ASSIGNED 0x0001 /* Thread is being migrated. */ -#define KEF_BOUND 0x0002 /* Thread can not migrate. */ -#define KEF_XFERABLE 0x0004 /* Thread was added as transferable. */ -#define KEF_HOLD 0x0008 /* Thread is temporarily bound. */ -#define KEF_REMOVED 0x0010 /* Thread was removed while ASSIGNED */ -#define KEF_INTERNAL 0x0020 /* Thread added due to migration. */ -#define KEF_PREEMPTED 0x0040 /* Thread was preempted. */ -#define KEF_MIGRATING 0x0080 /* Thread is migrating. */ -#define KEF_SLEEP 0x0100 /* Thread did sleep. */ -#define KEF_DIDRUN 0x2000 /* Thread actually ran. */ -#define KEF_EXIT 0x4000 /* Thread is being killed. */ -#define KEF_NEXTRQ 0x8000 /* Thread should be in next queue. */ -#define KEF_FIRST_SLICE 0x10000 /* Thread has first time slice left. */ +#define KEF_BOUND 0x0001 /* Thread can not migrate. */ +#define KEF_PREEMPTED 0x0002 /* Thread was preempted. */ +#define KEF_MIGRATING 0x0004 /* Thread is migrating. */ +#define KEF_SLEEP 0x0008 /* Thread did sleep. */ +#define KEF_DIDRUN 0x0010 /* Thread actually ran. */ +#define KEF_EXIT 0x0020 /* Thread is being killed. */ +#define KEF_NEXTRQ 0x0400 /* Thread should be in next queue. */ +#define KEF_FIRST_SLICE 0x0800 /* Thread has first time slice left. */ struct kg_sched { struct thread *skg_last_assigned; /* (j) Last thread assigned to */ @@ -259,47 +256,16 @@ * kseq - per processor runqs and statistics. */ struct kseq { + struct krunq *ksq_curr; /* Current queue. */ + struct krunq *ksq_next; /* Next timeshare queue. */ + struct krunq ksq_timeshare[2]; /* Run queues for !IDLE. */ struct krunq ksq_idle; /* Queue of IDLE threads. */ - struct krunq ksq_timeshare[2]; /* Run queues for !IDLE. */ - struct krunq *ksq_next; /* Next timeshare queue. */ - struct krunq *ksq_curr; /* Current queue. */ - int ksq_load_timeshare; /* Load for timeshare. */ - int ksq_load_idle; - int ksq_load; /* Aggregate load. */ - int ksq_sysload; /* For loadavg, !P_NOLOAD */ - uint64_t ksq_expired_timestamp; - uint64_t ksq_last_timestamp; - signed char ksq_best_expired_nice; -#ifdef SMP - int ksq_transferable; - LIST_ENTRY(kseq) ksq_siblings; /* Next in kseq group. */ - struct kseq_group *ksq_group; /* Our processor group. */ - struct thread *ksq_migrated; - TAILQ_HEAD(,kse) ksq_migrateq; - int ksq_avgload; -#endif + int ksq_load; + uint64_t ksq_last_timestamp; /* Per-cpu last clock tick */ + unsigned ksq_expired_tick; /* First expired tick */ + signed char ksq_expired_nice; /* Lowest nice in nextq */ }; -#ifdef SMP -/* - * kseq groups are groups of processors which can cheaply share threads. When - * one processor in the group goes idle it will check the runqs of the other - * processors in its group prior to halting and waiting for an interrupt. - * These groups are suitable for SMT (Symetric Multi-Threading) and not NUMA. - * In a NUMA environment we'd want an idle bitmap per group and a two tiered - * load balancer. - */ -struct kseq_group { - int ksg_cpus; /* Count of CPUs in this kseq group. */ - cpumask_t ksg_cpumask; /* Mask of cpus in this group. */ - cpumask_t ksg_idlemask; /* Idle cpus in this group. */ - cpumask_t ksg_mask; /* Bit mask for first cpu. */ - int ksg_transferable; /* Transferable load of this group. */ - LIST_HEAD(, kseq) ksg_members; /* Linked list of all members. */ - int ksg_balance_tick; -}; -#endif - static struct kse kse0; static struct kg_sched kg_sched0; @@ -307,33 +273,25 @@ static int def_timeslice = 100; static int granularity = 10; static int realstathz; +static int sched_tdcnt; +static struct kseq kseq_global; /* * One kse queue per processor. */ #ifdef SMP -static cpumask_t kseq_idle; -static int ksg_maxid; -static struct kseq kseq_cpu[MAXCPU]; -static struct kseq_group kseq_groups[MAXCPU]; -static int balance_tick; -static int balance_interval = 1; -static int balance_interval_max = 32; -static int balance_interval_min = 8; -static int balance_busy_factor = 32; -static int imbalance_pct = 25; -static int imbalance_pct2 = 50; -static int ignore_topology = 1; +static struct kseq kseq_cpu[MAXCPU]; #define KSEQ_SELF() (&kseq_cpu[PCPU_GET(cpuid)]) #define KSEQ_CPU(x) (&kseq_cpu[(x)]) #define KSEQ_ID(x) ((x) - kseq_cpu) -#define KSEQ_GROUP(x) (&kseq_groups[(x)]) + +static cpumask_t cpu_sibling[MAXCPU]; + #else /* !SMP */ -static struct kseq kseq_cpu; -#define KSEQ_SELF() (&kseq_cpu) -#define KSEQ_CPU(x) (&kseq_cpu) +#define KSEQ_SELF() (&kseq_global) +#define KSEQ_CPU(x) (&kseq_global) #endif /* decay 95% of `p_pctcpu' in 60 seconds; see CCPU_SHIFT before changing */ @@ -348,46 +306,72 @@ static SYSCTL_NODE(_kern, OID_AUTO, sched, CTLFLAG_RW, 0, "Scheduler"); -SYSCTL_STRING(_kern_sched, OID_AUTO, name, CTLFLAG_RD, "core", 0, +SYSCTL_STRING(_kern_sched, OID_AUTO, name, CTLFLAG_RD, "CORE", 0, "Scheduler name"); #ifdef SMP -SYSCTL_INT(_kern_sched, OID_AUTO, imbalance_pct, CTLFLAG_RW, - &imbalance_pct, 0, ""); +/* Enable forwarding of wakeups to all other cpus */ +SYSCTL_NODE(_kern_sched, OID_AUTO, ipiwakeup, CTLFLAG_RD, NULL, "Kernel SMP"); + +static int runq_fuzz = 0; +SYSCTL_INT(_kern_sched, OID_AUTO, runq_fuzz, CTLFLAG_RW, &runq_fuzz, 0, ""); + +static int forward_wakeup_enabled = 1; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, enabled, CTLFLAG_RW, + &forward_wakeup_enabled, 0, + "Forwarding of wakeup to idle CPUs"); + +static int forward_wakeups_requested = 0; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, requested, CTLFLAG_RD, + &forward_wakeups_requested, 0, + "Requests for Forwarding of wakeup to idle CPUs"); + +static int forward_wakeups_delivered = 0; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, delivered, CTLFLAG_RD, + &forward_wakeups_delivered, 0, + "Completed Forwarding of wakeup to idle CPUs"); + +static int forward_wakeup_use_mask = 1; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, usemask, CTLFLAG_RW, + &forward_wakeup_use_mask, 0, + "Use the mask of idle cpus"); -SYSCTL_INT(_kern_sched, OID_AUTO, imbalance_pct2, CTLFLAG_RW, - &imbalance_pct2, 0, ""); +static int forward_wakeup_use_loop = 0; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, useloop, CTLFLAG_RW, + &forward_wakeup_use_loop, 0, + "Use a loop to find idle cpus"); -SYSCTL_INT(_kern_sched, OID_AUTO, balance_interval_min, CTLFLAG_RW, - &balance_interval_min, 0, ""); +static int forward_wakeup_use_single = 0; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, onecpu, CTLFLAG_RW, + &forward_wakeup_use_single, 0, + "Only signal one idle cpu"); -SYSCTL_INT(_kern_sched, OID_AUTO, balance_interval_max, CTLFLAG_RW, - &balance_interval_max, 0, ""); +static int forward_wakeup_use_htt = 0; +SYSCTL_INT(_kern_sched_ipiwakeup, OID_AUTO, htt2, CTLFLAG_RW, + &forward_wakeup_use_htt, 0, + "account for htt"); #endif static void slot_fill(struct ksegrp *); -static void krunq_add(struct krunq *, struct kse *, int flags); +static void krunq_add(struct krunq *, struct kse *); static struct kse *krunq_choose(struct krunq *); static void krunq_clrbit(struct krunq *rq, int pri); static int krunq_findbit(struct krunq *rq); static void krunq_init(struct krunq *); static void krunq_remove(struct krunq *, struct kse *); -#ifdef SMP -static struct kse *krunq_steal(struct krunq *rq, int my_cpu); -#endif static struct kse * kseq_choose(struct kseq *); >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606291405.k5TE5ZkR067605>