From owner-svn-src-projects@FreeBSD.ORG Sat Jul 10 22:29:07 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 28E1C106564A; Sat, 10 Jul 2010 22:29:07 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 146428FC0A; Sat, 10 Jul 2010 22:29:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o6AMT5UR086416; Sat, 10 Jul 2010 22:29:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o6AMT5Nx086384; Sat, 10 Jul 2010 22:29:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201007102229.o6AMT5Nx086384@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 10 Jul 2010 22:29:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r209891 - in projects/ppc64: gnu/usr.bin/cc/cc_tools lib/bind lib/libc/sys share/mk sys/amd64/amd64 sys/amd64/include sys/arm/conf sys/conf sys/dev/ata sys/dev/ata/chipsets sys/dev/bwn ... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Jul 2010 22:29:07 -0000 Author: nwhitehorn Date: Sat Jul 10 22:29:05 2010 New Revision: 209891 URL: http://svn.freebsd.org/changeset/base/209891 Log: IFC @ 209890 The first transport is away! Import from HEAD after merging most of the powerpc64 userland. Modified: projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile projects/ppc64/lib/bind/config.mk projects/ppc64/lib/libc/sys/ptrace.2 projects/ppc64/sys/amd64/amd64/pmap.c projects/ppc64/sys/amd64/include/pmap.h projects/ppc64/sys/conf/kmod.mk projects/ppc64/sys/dev/ata/ata-all.c projects/ppc64/sys/dev/ata/chipsets/ata-acerlabs.c projects/ppc64/sys/dev/ata/chipsets/ata-amd.c projects/ppc64/sys/dev/ata/chipsets/ata-highpoint.c projects/ppc64/sys/dev/ata/chipsets/ata-intel.c projects/ppc64/sys/dev/ata/chipsets/ata-ite.c projects/ppc64/sys/dev/ata/chipsets/ata-jmicron.c projects/ppc64/sys/dev/ata/chipsets/ata-marvell.c projects/ppc64/sys/dev/ata/chipsets/ata-nvidia.c projects/ppc64/sys/dev/ata/chipsets/ata-promise.c projects/ppc64/sys/dev/ata/chipsets/ata-siliconimage.c projects/ppc64/sys/dev/ata/chipsets/ata-sis.c projects/ppc64/sys/dev/ata/chipsets/ata-via.c projects/ppc64/sys/dev/bwn/if_bwn.c projects/ppc64/sys/dev/e1000/if_igb.c projects/ppc64/sys/dev/sk/if_sk.c projects/ppc64/sys/dev/twa/tw_cl.h projects/ppc64/sys/dev/twa/tw_cl_share.h projects/ppc64/sys/i386/i386/pmap.c projects/ppc64/sys/i386/include/pmap.h projects/ppc64/sys/kern/vfs_bio.c projects/ppc64/sys/vm/vm_page.c projects/ppc64/sys/vm/vm_page.h projects/ppc64/usr.sbin/fifolog/lib/fifolog_reader.c Directory Properties: projects/ppc64/ (props changed) projects/ppc64/cddl/contrib/opensolaris/ (props changed) projects/ppc64/contrib/ee/ (props changed) projects/ppc64/contrib/expat/ (props changed) projects/ppc64/contrib/file/ (props changed) projects/ppc64/contrib/gdb/ (props changed) projects/ppc64/contrib/gnu-sort/ (props changed) projects/ppc64/contrib/groff/ (props changed) projects/ppc64/contrib/less/ (props changed) projects/ppc64/contrib/libpcap/ (props changed) projects/ppc64/contrib/ncurses/ (props changed) projects/ppc64/contrib/one-true-awk/ (props changed) projects/ppc64/contrib/openbsm/ (props changed) projects/ppc64/contrib/openpam/ (props changed) projects/ppc64/contrib/pf/ (props changed) projects/ppc64/contrib/tcpdump/ (props changed) projects/ppc64/contrib/tcsh/ (props changed) projects/ppc64/contrib/tzcode/stdtime/ (props changed) projects/ppc64/contrib/tzcode/zic/ (props changed) projects/ppc64/contrib/tzdata/ (props changed) projects/ppc64/contrib/wpa/ (props changed) projects/ppc64/lib/libutil/ (props changed) projects/ppc64/lib/libz/ (props changed) projects/ppc64/sbin/ (props changed) projects/ppc64/sbin/ipfw/ (props changed) projects/ppc64/share/mk/bsd.arch.inc.mk (props changed) projects/ppc64/sys/ (props changed) projects/ppc64/sys/amd64/include/xen/ (props changed) projects/ppc64/sys/arm/conf/SHEEVAPLUG (props changed) projects/ppc64/sys/cddl/contrib/opensolaris/ (props changed) projects/ppc64/sys/contrib/dev/acpica/ (props changed) projects/ppc64/sys/contrib/x86emu/ (props changed) projects/ppc64/sys/dev/xen/xenpci/ (props changed) projects/ppc64/usr.bin/csup/ (props changed) projects/ppc64/usr.bin/procstat/ (props changed) Modified: projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile ============================================================================== --- projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile Sat Jul 10 22:29:05 2010 (r209891) @@ -307,7 +307,7 @@ GENSRCS+= gcov-iov.h # Multilib config file multilib.h: -.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64" +.if ${TARGET_ARCH} == "powerpc64" echo 'static const char *const multilib_raw[] = { \ ". !m64 !m32;", \ "64:../lib m64 !m32;", \ Modified: projects/ppc64/lib/bind/config.mk ============================================================================== --- projects/ppc64/lib/bind/config.mk Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/lib/bind/config.mk Sat Jul 10 22:29:05 2010 (r209891) @@ -45,7 +45,7 @@ CFLAGS+= -DOPENSSL CFLAGS+= -DUSE_MD5 # Endianness -.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" || ${MACHINE_ARCH} == "sparc64" +.if ${MACHINE_CPUARCH} == "powerpc" || ${MACHINE_CPUARCH} == "sparc64" CFLAGS+= -DWORDS_BIGENDIAN .endif @@ -66,10 +66,8 @@ CFLAGS+= -I${LIB_BIND_DIR} # Use the right version of the atomic.h file from lib/isc .if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" ISC_ATOMIC_ARCH= x86_32 -.elif ${MACHINE_ARCH} == "powerpc64" -ISC_ATOMIC_ARCH= powerpc .else -ISC_ATOMIC_ARCH= ${MACHINE_ARCH} +ISC_ATOMIC_ARCH= ${MACHINE_CPUARCH} .endif # Optional features Modified: projects/ppc64/lib/libc/sys/ptrace.2 ============================================================================== --- projects/ppc64/lib/libc/sys/ptrace.2 Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/lib/libc/sys/ptrace.2 Sat Jul 10 22:29:05 2010 (r209891) @@ -2,7 +2,7 @@ .\" $NetBSD: ptrace.2,v 1.2 1995/02/27 12:35:37 cgd Exp $ .\" .\" This file is in the public domain. -.Dd May 24, 2010 +.Dd July 10, 2010 .Dt PTRACE 2 .Os .Sh NAME @@ -294,6 +294,7 @@ struct ptrace_lwpinfo { int pl_flags; sigset_t pl_sigmask; sigset_t pl_siglist; + siginfo_t pl_siginfo; }; .Ed .Pp @@ -338,13 +339,28 @@ program being executed by debuggee proce execution of a system call from the .Fn execve 2 family. +.It PL_FLAG_SI +Indicates that +.Va pl_siginfo +member of +.Vt "struct ptrace_lwpinfo" +contains valid information. .El .It pl_sigmask The current signal mask of the LWP .It pl_siglist -The current pending set of signals for the LWP. Note that signals that -are delivered to the process would not appear on an LWP siglist until -the thread is selected for delivery. +The current pending set of signals for the LWP. +Note that signals that are delivered to the process would not appear +on an LWP siglist until the thread is selected for delivery. +.It pl_siginfo +The siginfo that accompanies the signal pending. +Only valid for +.Dv PL_EVENT_SIGNAL +kind of stop, when +.Va pl_flags +has +.Dv PL_FLAG_SI +set. .El .It PT_GETNUMLWPS This request returns the number of kernel threads associated with the Modified: projects/ppc64/sys/amd64/amd64/pmap.c ============================================================================== --- projects/ppc64/sys/amd64/amd64/pmap.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/amd64/amd64/pmap.c Sat Jul 10 22:29:05 2010 (r209891) @@ -1331,19 +1331,22 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s void pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) { - pt_entry_t *endpte, oldpte, *pte; + pt_entry_t *endpte, oldpte, pa, *pte; + vm_page_t m; oldpte = 0; pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { - oldpte |= *pte; - pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | - pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); + m = *ma++; + pa = VM_PAGE_TO_PHYS(m) | pmap_cache_bits(m->md.pat_mode, 0); + if ((*pte & (PG_FRAME | PG_PTE_CACHE)) != pa) { + oldpte |= *pte; + pte_store(pte, pa | PG_G | PG_RW | PG_V); + } pte++; - ma++; } - if ((oldpte & PG_V) != 0) + if (__predict_false((oldpte & PG_V) != 0)) pmap_invalidate_range(kernel_pmap, sva, sva + count * PAGE_SIZE); } @@ -4018,7 +4021,7 @@ pmap_remove_pages(pmap_t pmap) uint64_t inuse, bitmask; int allfree; - if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) { + if (pmap != PCPU_GET(curpmap)) { printf("warning: pmap_remove_pages called with non-current pmap\n"); return; } @@ -4998,11 +5001,9 @@ pmap_activate(struct thread *td) pmap = vmspace_pmap(td->td_proc->p_vmspace); oldpmap = PCPU_GET(curpmap); #ifdef SMP -if (oldpmap) /* XXX FIXME */ atomic_clear_int(&oldpmap->pm_active, PCPU_GET(cpumask)); atomic_set_int(&pmap->pm_active, PCPU_GET(cpumask)); #else -if (oldpmap) /* XXX FIXME */ oldpmap->pm_active &= ~PCPU_GET(cpumask); pmap->pm_active |= PCPU_GET(cpumask); #endif Modified: projects/ppc64/sys/amd64/include/pmap.h ============================================================================== --- projects/ppc64/sys/amd64/include/pmap.h Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/amd64/include/pmap.h Sat Jul 10 22:29:05 2010 (r209891) @@ -244,7 +244,7 @@ struct pmap { struct mtx pm_mtx; pml4_entry_t *pm_pml4; /* KVA of level 4 page table */ TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ - u_int pm_active; /* active on cpus */ + cpumask_t pm_active; /* active on cpus */ uint32_t pm_gen_count; /* generation count (pmap lock dropped) */ u_int pm_retries; /* spare u_int here due to padding */ Modified: projects/ppc64/sys/conf/kmod.mk ============================================================================== --- projects/ppc64/sys/conf/kmod.mk Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/conf/kmod.mk Sat Jul 10 22:29:05 2010 (r209891) @@ -129,7 +129,7 @@ CFLAGS+= ${DEBUG_FLAGS} CFLAGS+= -fno-omit-frame-pointer .endif -.if ${MACHINE_CPUARCH} == "powerpc" +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" CFLAGS+= -mlongcall -fno-omit-frame-pointer .endif Modified: projects/ppc64/sys/dev/ata/ata-all.c ============================================================================== --- projects/ppc64/sys/dev/ata/ata-all.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/ata-all.c Sat Jul 10 22:29:05 2010 (r209891) @@ -105,7 +105,7 @@ SYSCTL_INT(_hw_ata, OID_AUTO, ata_dma, C "ATA disk DMA mode control"); TUNABLE_INT("hw.ata.ata_dma_check_80pin", &ata_dma_check_80pin); SYSCTL_INT(_hw_ata, OID_AUTO, ata_dma_check_80pin, - CTLFLAG_RDTUN, &ata_dma_check_80pin, 1, + CTLFLAG_RW, &ata_dma_check_80pin, 1, "Check for 80pin cable before setting ATA DMA mode"); TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma); SYSCTL_INT(_hw_ata, OID_AUTO, atapi_dma, CTLFLAG_RDTUN, &atapi_dma, 0, @@ -185,27 +185,29 @@ ata_attach(device_t dev) if (ch->dma.alloc) ch->dma.alloc(dev); + mtx_lock(&ch->state_mtx); /* setup interrupt delivery */ rid = ATA_IRQ_RID; ch->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE); if (!ch->r_irq) { device_printf(dev, "unable to allocate interrupt\n"); + mtx_unlock(&ch->state_mtx); return ENXIO; } if ((error = bus_setup_intr(dev, ch->r_irq, ATA_INTR_FLAGS, NULL, ata_interrupt, ch, &ch->ih))) { device_printf(dev, "unable to setup interrupt\n"); - return error; + goto err1; } #ifndef ATA_CAM + mtx_unlock(&ch->state_mtx); /* probe and attach devices on this channel unless we are in early boot */ if (!ata_delayed_attach) ata_identify(dev); return (0); #else - mtx_lock(&ch->state_mtx); /* Create the device queue for our SIM. */ devq = cam_simq_alloc(1); if (devq == NULL) { @@ -239,11 +241,11 @@ err3: xpt_bus_deregister(cam_sim_path(ch->sim)); err2: cam_sim_free(ch->sim, /*free_devq*/TRUE); +#endif err1: bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq); mtx_unlock(&ch->state_mtx); return (error); -#endif } int Modified: projects/ppc64/sys/dev/ata/chipsets/ata-acerlabs.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-acerlabs.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-acerlabs.c Sat Jul 10 22:29:05 2010 (r209891) @@ -286,7 +286,7 @@ ata_ali_setmode(device_t dev, int target mode = min(mode, ctlr->chip->max_dma); if (ctlr->chip->cfg2 & ALI_NEW && ctlr->chip->chiprev < 0xc7) { - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && pci_read_config(parent, 0x4a, 1) & (1 << ch->unit)) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; Modified: projects/ppc64/sys/dev/ata/chipsets/ata-amd.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-amd.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-amd.c Sat Jul 10 22:29:05 2010 (r209891) @@ -119,7 +119,7 @@ ata_amd_setmode(device_t dev, int target mode = min(mode, ctlr->chip->max_dma); if (ctlr->chip->cfg1 & AMD_CABLE) { - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && !(pci_read_config(parent, 0x42, 1) & (1 << devno))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; Modified: projects/ppc64/sys/dev/ata/chipsets/ata-highpoint.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-highpoint.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-highpoint.c Sat Jul 10 22:29:05 2010 (r209891) @@ -216,7 +216,7 @@ ata_highpoint_check_80pin(device_t dev, res = pci_read_config(parent, 0x5a, 1) & (ch->unit ? 0x1:0x2); pci_write_config(parent, reg, val, 1); - if (mode > ATA_UDMA2 && res) { + if (ata_dma_check_80pin && mode > ATA_UDMA2 && res) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } Modified: projects/ppc64/sys/dev/ata/chipsets/ata-intel.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-intel.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-intel.c Sat Jul 10 22:29:05 2010 (r209891) @@ -336,7 +336,8 @@ ata_intel_new_setmode(device_t dev, int u_int8_t utimings[] = { 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02 }; mode = min(mode, ctlr->chip->max_dma); - if (mode > ATA_UDMA2 && !(reg54 & (0x10 << devno))) { + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + !(reg54 & (0x10 << devno))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } @@ -553,8 +554,12 @@ ata_intel_31244_tf_write(struct ata_requ static void ata_intel_31244_reset(device_t dev) { + struct ata_channel *ch = device_get_softc(dev); + if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; } ATA_DECLARE_DRIVER(ata_intel); Modified: projects/ppc64/sys/dev/ata/chipsets/ata-ite.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-ite.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-ite.c Sat Jul 10 22:29:05 2010 (r209891) @@ -139,7 +139,8 @@ ata_ite_821x_setmode(device_t dev, int t mode = min(mode, ctlr->chip->max_dma); /* check the CBLID bits for 80 conductor cable detection */ - if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x40, 2) & + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + (pci_read_config(parent, 0x40, 2) & (ch->unit ? (1<<3) : (1<<2)))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; @@ -186,7 +187,8 @@ ata_ite_8213_setmode(device_t dev, int t mode = min(mode, ctlr->chip->max_dma); - if (mode > ATA_UDMA2 && !(reg54 & (0x10 << target))) { + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + !(reg54 & (0x10 << target))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } Modified: projects/ppc64/sys/dev/ata/chipsets/ata-jmicron.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-jmicron.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-jmicron.c Sat Jul 10 22:29:05 2010 (r209891) @@ -149,7 +149,8 @@ ata_jmicron_setmode(device_t dev, int ta mode = min(mode, ctlr->chip->max_dma); /* check for 80pin cable present */ - if (mode > ATA_UDMA2 && pci_read_config(dev, 0x40, 1) & 0x08) { + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + pci_read_config(dev, 0x40, 1) & 0x08) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } Modified: projects/ppc64/sys/dev/ata/chipsets/ata-marvell.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-marvell.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-marvell.c Sat Jul 10 22:29:05 2010 (r209891) @@ -188,7 +188,8 @@ ata_marvell_setmode(device_t dev, int ta mode = min(mode, ctlr->chip->max_dma); /* Check for 80pin cable present. */ - if (mode > ATA_UDMA2 && ATA_IDX_INB(ch, ATA_BMDEVSPEC_0) & 0x01) { + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + ATA_IDX_INB(ch, ATA_BMDEVSPEC_0) & 0x01) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } @@ -578,6 +579,8 @@ ata_marvell_edma_reset(device_t dev) /* enable channel and test for devices */ if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; /* enable EDMA machinery */ ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000001); Modified: projects/ppc64/sys/dev/ata/chipsets/ata-nvidia.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-nvidia.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-nvidia.c Sat Jul 10 22:29:05 2010 (r209891) @@ -296,8 +296,12 @@ ata_nvidia_status(device_t dev) static void ata_nvidia_reset(device_t dev) { + struct ata_channel *ch = device_get_softc(dev); + if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; } static int Modified: projects/ppc64/sys/dev/ata/chipsets/ata-promise.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-promise.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-promise.c Sat Jul 10 22:29:05 2010 (r209891) @@ -470,7 +470,8 @@ ata_promise_setmode(device_t dev, int ta switch (ctlr->chip->cfg1) { case PR_OLD: case PR_NEW: - if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x50, 2) & + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + (pci_read_config(parent, 0x50, 2) & (ch->unit ? 1 << 11 : 1 << 10))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; @@ -479,7 +480,7 @@ ata_promise_setmode(device_t dev, int ta case PR_TX: ATA_IDX_OUTB(ch, ATA_BMDEVSPEC_0, 0x0b); - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && ATA_IDX_INB(ch, ATA_BMDEVSPEC_1) & 0x04) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; @@ -487,7 +488,7 @@ ata_promise_setmode(device_t dev, int ta break; case PR_MIO: - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && (ATA_INL(ctlr->r_res2, (ctlr->chip->cfg2 & PR_SX4X ? 0x000c0260 : 0x0260) + (ch->unit << 7)) & 0x01000000)) { @@ -743,6 +744,8 @@ ata_promise_mio_reset(device_t dev) if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; /* reset and enable plug/unplug intr */ ATA_OUTL(ctlr->r_res2, 0x06c, (0x00000011 << ch->unit)); Modified: projects/ppc64/sys/dev/ata/chipsets/ata-siliconimage.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-siliconimage.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-siliconimage.c Sat Jul 10 22:29:05 2010 (r209891) @@ -364,8 +364,12 @@ ata_sii_status(device_t dev) static void ata_sii_reset(device_t dev) { + struct ata_channel *ch = device_get_softc(dev); + if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; } static int @@ -389,7 +393,8 @@ ata_sii_setmode(device_t dev, int target mode = min(mode, ctlr->chip->max_dma); if (ctlr->chip->cfg2 & SII_SETCLK) { - if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x79, 1) & + if (ata_dma_check_80pin && mode > ATA_UDMA2 && + (pci_read_config(parent, 0x79, 1) & (ch->unit ? 0x02 : 0x01))) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; Modified: projects/ppc64/sys/dev/ata/chipsets/ata-sis.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-sis.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-sis.c Sat Jul 10 22:29:05 2010 (r209891) @@ -228,8 +228,12 @@ ata_sis_ch_attach(device_t dev) static void ata_sis_reset(device_t dev) { + struct ata_channel *ch = device_get_softc(dev); + if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; } static int @@ -243,13 +247,13 @@ ata_sis_setmode(device_t dev, int target mode = min(mode, ctlr->chip->max_dma); if (ctlr->chip->cfg1 == SIS_133NEW) { - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && pci_read_config(parent, ch->unit ? 0x52 : 0x50,2) & 0x8000) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; } } else { - if (mode > ATA_UDMA2 && + if (ata_dma_check_80pin && mode > ATA_UDMA2 && pci_read_config(parent, 0x48, 1)&(ch->unit ? 0x20 : 0x10)) { ata_print_cable(dev, "controller"); mode = ATA_UDMA2; Modified: projects/ppc64/sys/dev/ata/chipsets/ata-via.c ============================================================================== --- projects/ppc64/sys/dev/ata/chipsets/ata-via.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/ata/chipsets/ata-via.c Sat Jul 10 22:29:05 2010 (r209891) @@ -290,9 +290,12 @@ ata_via_reset(device_t dev) if ((ctlr->chip->cfg2 & VIABAR) && (ch->unit > 1)) ata_generic_reset(dev); - else + else { if (ata_sata_phy_reset(dev, -1, 1)) ata_generic_reset(dev); + else + ch->devices = 0; + } } static int Modified: projects/ppc64/sys/dev/bwn/if_bwn.c ============================================================================== --- projects/ppc64/sys/dev/bwn/if_bwn.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/bwn/if_bwn.c Sat Jul 10 22:29:05 2010 (r209891) @@ -9072,7 +9072,7 @@ bwn_pio_rxeof(struct bwn_pio_rxqueue *pr struct mbuf *m; uint32_t ctl32, macstat, v32; unsigned int i, padding; - uint16_t ctl16, len, v16; + uint16_t ctl16, len, totlen, v16; unsigned char *mp; char *data; @@ -9131,7 +9131,8 @@ ready: } padding = (macstat & BWN_RX_MAC_PADDING) ? 2 : 0; - KASSERT(len + padding <= MCLBYTES, ("too big..\n")); + totlen = len + padding; + KASSERT(totlen <= MCLBYTES, ("too big..\n")); m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) { device_printf(sc->sc_dev, "%s: out of memory", __func__); @@ -9139,12 +9140,12 @@ ready: } mp = mtod(m, unsigned char *); if (prq->prq_rev >= 8) { - siba_read_multi_4(sc->sc_dev, mp + padding, (len & ~3), + siba_read_multi_4(sc->sc_dev, mp, (totlen & ~3), prq->prq_base + BWN_PIO8_RXDATA); - if (len & 3) { + if (totlen & 3) { v32 = bwn_pio_rx_read_4(prq, BWN_PIO8_RXDATA); - data = &(mp[len + padding - 1]); - switch (len & 3) { + data = &(mp[totlen - 1]); + switch (totlen & 3) { case 3: *data = (v32 >> 16); data--; @@ -9156,16 +9157,16 @@ ready: } } } else { - siba_read_multi_2(sc->sc_dev, mp + padding, (len & ~1), + siba_read_multi_2(sc->sc_dev, mp, (totlen & ~1), prq->prq_base + BWN_PIO_RXDATA); - if (len & 1) { + if (totlen & 1) { v16 = bwn_pio_rx_read_2(prq, BWN_PIO_RXDATA); - mp[len + padding - 1] = v16; + mp[totlen - 1] = v16; } } m->m_pkthdr.rcvif = ifp; - m->m_len = m->m_pkthdr.len = len + padding; + m->m_len = m->m_pkthdr.len = totlen; bwn_rxeof(prq->prq_mac, m, &rxhdr); Modified: projects/ppc64/sys/dev/e1000/if_igb.c ============================================================================== --- projects/ppc64/sys/dev/e1000/if_igb.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/e1000/if_igb.c Sat Jul 10 22:29:05 2010 (r209891) @@ -2679,7 +2679,7 @@ igb_setup_interface(device_t dev, struct ifp->if_capabilities = ifp->if_capenable = 0; - ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_MTU; + ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM; ifp->if_capabilities |= IFCAP_TSO4; ifp->if_capabilities |= IFCAP_JUMBO_MTU; if (igb_header_split) Modified: projects/ppc64/sys/dev/sk/if_sk.c ============================================================================== --- projects/ppc64/sys/dev/sk/if_sk.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/sk/if_sk.c Sat Jul 10 22:29:05 2010 (r209891) @@ -1169,14 +1169,17 @@ sk_ioctl(ifp, command, data) break; } mask = ifr->ifr_reqcap ^ ifp->if_capenable; - if (mask & IFCAP_HWCSUM) { - ifp->if_capenable ^= IFCAP_HWCSUM; - if (IFCAP_HWCSUM & ifp->if_capenable && - IFCAP_HWCSUM & ifp->if_capabilities) - ifp->if_hwassist = SK_CSUM_FEATURES; + if ((mask & IFCAP_TXCSUM) != 0 && + (IFCAP_TXCSUM & ifp->if_capabilities) != 0) { + ifp->if_capenable ^= IFCAP_TXCSUM; + if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) + ifp->if_hwassist |= SK_CSUM_FEATURES; else - ifp->if_hwassist = 0; + ifp->if_hwassist &= ~SK_CSUM_FEATURES; } + if ((mask & IFCAP_RXCSUM) != 0 && + (IFCAP_RXCSUM & ifp->if_capabilities) != 0) + ifp->if_capenable ^= IFCAP_RXCSUM; SK_IF_UNLOCK(sc_if); break; default: @@ -1363,13 +1366,23 @@ sk_attach(dev) * SK_GENESIS has a bug in checksum offload - From linux. */ if (sc_if->sk_softc->sk_type != SK_GENESIS) { - ifp->if_capabilities = IFCAP_HWCSUM; - ifp->if_hwassist = SK_CSUM_FEATURES; + ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_RXCSUM; + ifp->if_hwassist = 0; } else { ifp->if_capabilities = 0; ifp->if_hwassist = 0; } ifp->if_capenable = ifp->if_capabilities; + /* + * Some revision of Yukon controller generates corrupted + * frame when TX checksum offloading is enabled. The + * frame has a valid checksum value so payload might be + * modified during TX checksum calculation. Disable TX + * checksum offloading but give users chance to enable it + * when they know their controller works without problems + * with TX checksum offloading. + */ + ifp->if_capenable &= ~IFCAP_TXCSUM; ifp->if_ioctl = sk_ioctl; ifp->if_start = sk_start; ifp->if_init = sk_init; Modified: projects/ppc64/sys/dev/twa/tw_cl.h ============================================================================== --- projects/ppc64/sys/dev/twa/tw_cl.h Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/twa/tw_cl.h Sat Jul 10 22:29:05 2010 (r209891) @@ -74,7 +74,6 @@ #define TW_CLI_PCI_CONFIG_STATUS_OFFSET 0x6 /* status register offset */ #endif /* TW_OSL_PCI_CONFIG_ACCESSIBLE */ -#pragma pack(1) #ifdef TW_OSL_DEBUG struct tw_cli_q_stats { @@ -206,7 +205,6 @@ struct tw_cli_ctlr_context { #endif /* TW_OSL_DEBUG */ }; -#pragma pack() /* Modified: projects/ppc64/sys/dev/twa/tw_cl_share.h ============================================================================== --- projects/ppc64/sys/dev/twa/tw_cl_share.h Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/dev/twa/tw_cl_share.h Sat Jul 10 22:29:05 2010 (r209891) @@ -125,7 +125,6 @@ #define TW_CL_SEVERITY_DEBUG_STRING "DEBUG" -#pragma pack(1) /* * Structure, a pointer to which is used as the controller handle in @@ -190,6 +189,7 @@ struct tw_cl_req_packet { }; +#pragma pack(1) /* * Packet that describes an AEN/error generated by the controller, * Common Layer, or even the OS Layer. @@ -206,6 +206,7 @@ struct tw_cl_event_packet { TW_UINT32 event_src; TW_UINT8 severity_str[20]; }; +#pragma pack() /* Structure to link 2 adjacent elements in a list. */ @@ -215,6 +216,7 @@ struct tw_cl_link { }; +#pragma pack(1) /* Scatter/Gather list entry with 32 bit addresses. */ struct tw_cl_sg_desc32 { TW_UINT32 address; Modified: projects/ppc64/sys/i386/i386/pmap.c ============================================================================== --- projects/ppc64/sys/i386/i386/pmap.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/i386/i386/pmap.c Sat Jul 10 22:29:05 2010 (r209891) @@ -1461,19 +1461,22 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s void pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) { - pt_entry_t *endpte, oldpte, *pte; + pt_entry_t *endpte, oldpte, pa, *pte; + vm_page_t m; oldpte = 0; pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { - oldpte |= *pte; - pte_store(pte, VM_PAGE_TO_PHYS(*ma) | pgeflag | - pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); + m = *ma++; + pa = VM_PAGE_TO_PHYS(m) | pmap_cache_bits(m->md.pat_mode, 0); + if ((*pte & (PG_FRAME | PG_PTE_CACHE)) != pa) { + oldpte |= *pte; + pte_store(pte, pa | pgeflag | PG_RW | PG_V); + } pte++; - ma++; } - if ((oldpte & PG_V) != 0) + if (__predict_false((oldpte & PG_V) != 0)) pmap_invalidate_range(kernel_pmap, sva, sva + count * PAGE_SIZE); } @@ -4180,7 +4183,7 @@ pmap_remove_pages(pmap_t pmap) uint32_t inuse, bitmask; int allfree; - if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) { + if (pmap != PCPU_GET(curpmap)) { printf("warning: pmap_remove_pages called with non-current pmap\n"); return; } Modified: projects/ppc64/sys/i386/include/pmap.h ============================================================================== --- projects/ppc64/sys/i386/include/pmap.h Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/i386/include/pmap.h Sat Jul 10 22:29:05 2010 (r209891) @@ -417,7 +417,7 @@ struct pmap { struct mtx pm_mtx; pd_entry_t *pm_pdir; /* KVA of page directory */ TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ - u_int pm_active; /* active on cpus */ + cpumask_t pm_active; /* active on cpus */ struct pmap_statistics pm_stats; /* pmap statistics */ LIST_ENTRY(pmap) pm_list; /* List of all pmaps */ uint32_t pm_gen_count; /* generation count (pmap lock dropped) */ Modified: projects/ppc64/sys/kern/vfs_bio.c ============================================================================== --- projects/ppc64/sys/kern/vfs_bio.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/kern/vfs_bio.c Sat Jul 10 22:29:05 2010 (r209891) @@ -3752,10 +3752,9 @@ tryagain: * process we are. */ p = vm_page_alloc(NULL, pg >> PAGE_SHIFT, VM_ALLOC_NOOBJ | - VM_ALLOC_SYSTEM | VM_ALLOC_WIRED); + VM_ALLOC_SYSTEM | VM_ALLOC_WIRED | + VM_ALLOC_COUNT((to - pg) >> PAGE_SHIFT)); if (!p) { - atomic_add_int(&vm_pageout_deficit, - (to - pg) >> PAGE_SHIFT); VM_WAIT; goto tryagain; } Modified: projects/ppc64/sys/vm/vm_page.c ============================================================================== --- projects/ppc64/sys/vm/vm_page.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/vm/vm_page.c Sat Jul 10 22:29:05 2010 (r209891) @@ -1264,7 +1264,8 @@ vm_page_alloc(vm_object_t object, vm_pin * Not allocatable, give up. */ mtx_unlock(&vm_page_queue_free_mtx); - atomic_add_int(&vm_pageout_deficit, 1); + atomic_add_int(&vm_pageout_deficit, + MAX((u_int)req >> VM_ALLOC_COUNT_SHIFT, 1)); pagedaemon_wakeup(); return (NULL); } @@ -2041,7 +2042,6 @@ vm_page_t vm_page_grab(vm_object_t object, vm_pindex_t pindex, int allocflags) { vm_page_t m; - u_int count; VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); KASSERT((allocflags & VM_ALLOC_RETRY) != 0, @@ -2071,12 +2071,9 @@ retrylookup: } } m = vm_page_alloc(object, pindex, allocflags & ~(VM_ALLOC_RETRY | - VM_ALLOC_IGN_SBUSY | VM_ALLOC_COUNT_MASK)); + VM_ALLOC_IGN_SBUSY)); if (m == NULL) { VM_OBJECT_UNLOCK(object); - count = (u_int)allocflags >> VM_ALLOC_COUNT_SHIFT; - if (count > 0) - atomic_add_int(&vm_pageout_deficit, count); VM_WAIT; VM_OBJECT_LOCK(object); goto retrylookup; Modified: projects/ppc64/sys/vm/vm_page.h ============================================================================== --- projects/ppc64/sys/vm/vm_page.h Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/sys/vm/vm_page.h Sat Jul 10 22:29:05 2010 (r209891) @@ -321,7 +321,6 @@ extern struct vpglocks vm_page_queue_loc #define VM_ALLOC_COUNT_SHIFT 16 #define VM_ALLOC_COUNT(count) ((count) << VM_ALLOC_COUNT_SHIFT) -#define VM_ALLOC_COUNT_MASK VM_ALLOC_COUNT(0xffff) void vm_page_flag_set(vm_page_t m, unsigned short bits); void vm_page_flag_clear(vm_page_t m, unsigned short bits); Modified: projects/ppc64/usr.sbin/fifolog/lib/fifolog_reader.c ============================================================================== --- projects/ppc64/usr.sbin/fifolog/lib/fifolog_reader.c Sat Jul 10 22:07:48 2010 (r209890) +++ projects/ppc64/usr.sbin/fifolog/lib/fifolog_reader.c Sat Jul 10 22:29:05 2010 (r209891) @@ -304,8 +304,10 @@ fifolog_reader_process(struct fifolog_re if (i == Z_STREAM_END) { i = inflateReset(zs); } - if (i != Z_OK) + if (i != Z_OK) { fprintf(stderr, "inflate = %d\n", i); + exit (250); + } assert(i == Z_OK); if (zs->avail_out != fr->olen) { q = fr->obuf + (fr->olen - zs->avail_out);