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 ...

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sat Jul 10 22:29:07 UTC 2010


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);


More information about the svn-src-projects mailing list