svn commit: r208872 - in projects/ppc64: lib/libpmc sys/arm/arm sys/dev/ata sys/dev/ata/chipsets sys/dev/bge sys/dev/hwpmc sys/dev/isp sys/mips/mips sys/netinet sys/powerpc/aim sys/powerpc/booke sy...

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sun Jun 6 14:31:42 UTC 2010


Author: nwhitehorn
Date: Sun Jun  6 14:31:41 2010
New Revision: 208872
URL: http://svn.freebsd.org/changeset/base/208872

Log:
  IFC once more @ 208871

Modified:
  projects/ppc64/lib/libpmc/pmclog.c
  projects/ppc64/sys/arm/arm/pmap.c
  projects/ppc64/sys/dev/ata/ata-all.h
  projects/ppc64/sys/dev/ata/ata-lowlevel.c
  projects/ppc64/sys/dev/ata/chipsets/ata-serverworks.c
  projects/ppc64/sys/dev/bge/if_bge.c
  projects/ppc64/sys/dev/bge/if_bgereg.h
  projects/ppc64/sys/dev/hwpmc/hwpmc_mod.c
  projects/ppc64/sys/dev/isp/isp.c
  projects/ppc64/sys/mips/mips/pmap.c
  projects/ppc64/sys/netinet/sctp_auth.c
  projects/ppc64/sys/netinet/sctp_bsd_addr.c
  projects/ppc64/sys/netinet/sctp_indata.c
  projects/ppc64/sys/netinet/sctp_input.c
  projects/ppc64/sys/netinet/sctp_output.c
  projects/ppc64/sys/netinet/sctp_pcb.c
  projects/ppc64/sys/netinet/sctp_pcb.h
  projects/ppc64/sys/netinet/sctp_usrreq.c
  projects/ppc64/sys/netinet/sctputil.c
  projects/ppc64/sys/powerpc/aim/mmu_oea.c
  projects/ppc64/sys/powerpc/booke/pmap.c
  projects/ppc64/sys/powerpc/powermac/macgpio.c
  projects/ppc64/sys/powerpc/powermac/uninorth.c
  projects/ppc64/sys/sparc64/sparc64/pmap.c
  projects/ppc64/sys/sys/pmc.h
  projects/ppc64/tools/tools/netrate/tcpp/README
  projects/ppc64/tools/tools/netrate/tcpp/tcpp.c
  projects/ppc64/tools/tools/netrate/tcpp/tcpp.h
  projects/ppc64/tools/tools/netrate/tcpp/tcpp_client.c
  projects/ppc64/tools/tools/netrate/tcpp/tcpp_server.c
  projects/ppc64/usr.bin/bc/scan.l
  projects/ppc64/usr.bin/dc/bcode.c
  projects/ppc64/usr.bin/dc/dc.c
  projects/ppc64/usr.sbin/pmcstat/pmcpl_calltree.c
  projects/ppc64/usr.sbin/pmcstat/pmcstat.c
  projects/ppc64/usr.sbin/pmcstat/pmcstat_log.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/sys/   (props changed)
  projects/ppc64/sys/amd64/include/xen/   (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/lib/libpmc/pmclog.c
==============================================================================
--- projects/ppc64/lib/libpmc/pmclog.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/lib/libpmc/pmclog.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -549,8 +549,10 @@ pmclog_open(int fd)
 
 	/* allocate space for a work area */
 	if (ps->ps_fd != PMCLOG_FD_NONE) {
-		if ((ps->ps_buffer = malloc(PMCLOG_BUFFER_SIZE)) == NULL)
+		if ((ps->ps_buffer = malloc(PMCLOG_BUFFER_SIZE)) == NULL) {
+			free(ps);
 			return NULL;
+		}
 	}
 
 	return ps;

Modified: projects/ppc64/sys/arm/arm/pmap.c
==============================================================================
--- projects/ppc64/sys/arm/arm/pmap.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/arm/arm/pmap.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -3412,7 +3412,8 @@ do_l2b_alloc:
 	
 	if (prot & VM_PROT_WRITE) {
 		npte |= L2_S_PROT_W;
-		if (m != NULL)
+		if (m != NULL &&
+		    (m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
 			vm_page_flag_set(m, PG_WRITEABLE);
 	}
 	npte |= pte_l2_s_cache_mode;

Modified: projects/ppc64/sys/dev/ata/ata-all.h
==============================================================================
--- projects/ppc64/sys/dev/ata/ata-all.h	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/ata/ata-all.h	Sun Jun  6 14:31:41 2010	(r208872)
@@ -564,6 +564,7 @@ struct ata_channel {
 #define         ATA_CHECKS_CABLE	0x20
 #define         ATA_NO_ATAPI_DMA	0x40
 #define         ATA_SATA		0x80
+#define         ATA_DMA_BEFORE_CMD	0x100
 
     int				pm_level;	/* power management level */
     int                         devices;        /* what is present */

Modified: projects/ppc64/sys/dev/ata/ata-lowlevel.c
==============================================================================
--- projects/ppc64/sys/dev/ata/ata-lowlevel.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/ata/ata-lowlevel.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -141,6 +141,14 @@ ata_begin_transaction(struct ata_request
 	    goto begin_finished;
 	}
 
+	/* start DMA engine if necessary */
+	if ((ch->flags & ATA_DMA_BEFORE_CMD) &&
+	   ch->dma.start && ch->dma.start(request)) {
+	    device_printf(request->parent, "error starting DMA\n");
+	    request->result = EIO;
+	    goto begin_finished;
+	}
+
 	/* issue command */
 	if (ch->hw.command(request)) {
 	    device_printf(request->parent, "error issuing %s command\n",
@@ -150,7 +158,8 @@ ata_begin_transaction(struct ata_request
 	}
 
 	/* start DMA engine */
-	if (ch->dma.start && ch->dma.start(request)) {
+	if (!(ch->flags & ATA_DMA_BEFORE_CMD) &&
+	   ch->dma.start && ch->dma.start(request)) {
 	    device_printf(request->parent, "error starting DMA\n");
 	    request->result = EIO;
 	    goto begin_finished;

Modified: projects/ppc64/sys/dev/ata/chipsets/ata-serverworks.c
==============================================================================
--- projects/ppc64/sys/dev/ata/chipsets/ata-serverworks.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/ata/chipsets/ata-serverworks.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -241,6 +241,16 @@ ata_serverworks_ch_attach(device_t dev)
 	ATA_OUTL(ctlr->r_res2, ch_offset + 0x88, 0);
 	ATA_OUTL(ctlr->r_res2, ch_offset + 0x80,
 	    ATA_INL(ctlr->r_res2, ch_offset + 0x80) & ~0x00040000);
+
+	/*
+	 * Some controllers have a bug where they will send the command
+	 * to the drive before seeing a DMA start, and then can begin
+	 * receiving data before the DMA start arrives. The controller
+	 * will then become confused and either corrupt the data or crash.
+	 * Remedy this by starting DMA before sending the drive command.
+	 */
+
+	ch->flags |= ATA_DMA_BEFORE_CMD;
     }
 
     /* chip does not reliably do 64K DMA transfers */

Modified: projects/ppc64/sys/dev/bge/if_bge.c
==============================================================================
--- projects/ppc64/sys/dev/bge/if_bge.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/bge/if_bge.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -400,6 +400,8 @@ static void bge_setpromisc(struct bge_so
 static void bge_setmulti(struct bge_softc *);
 static void bge_setvlan(struct bge_softc *);
 
+static __inline void bge_rxreuse_std(struct bge_softc *, int);
+static __inline void bge_rxreuse_jumbo(struct bge_softc *, int);
 static int bge_newbuf_std(struct bge_softc *, int);
 static int bge_newbuf_jumbo(struct bge_softc *, int);
 static int bge_init_rx_ring_std(struct bge_softc *);
@@ -922,6 +924,7 @@ bge_newbuf_std(struct bge_softc *sc, int
 	sc->bge_cdata.bge_rx_std_dmamap[i] = sc->bge_cdata.bge_rx_std_sparemap;
 	sc->bge_cdata.bge_rx_std_sparemap = map;
 	sc->bge_cdata.bge_rx_std_chain[i] = m;
+	sc->bge_cdata.bge_rx_std_seglen[i] = segs[0].ds_len;
 	r = &sc->bge_ldata.bge_rx_std_ring[sc->bge_std];
 	r->bge_addr.bge_addr_lo = BGE_ADDR_LO(segs[0].ds_addr);
 	r->bge_addr.bge_addr_hi = BGE_ADDR_HI(segs[0].ds_addr);
@@ -979,6 +982,11 @@ bge_newbuf_jumbo(struct bge_softc *sc, i
 	    sc->bge_cdata.bge_rx_jumbo_sparemap;
 	sc->bge_cdata.bge_rx_jumbo_sparemap = map;
 	sc->bge_cdata.bge_rx_jumbo_chain[i] = m;
+	sc->bge_cdata.bge_rx_jumbo_seglen[i][0] = 0;
+	sc->bge_cdata.bge_rx_jumbo_seglen[i][1] = 0;
+	sc->bge_cdata.bge_rx_jumbo_seglen[i][2] = 0;
+	sc->bge_cdata.bge_rx_jumbo_seglen[i][3] = 0;
+
 	/*
 	 * Fill in the extended RX buffer descriptor.
 	 */
@@ -991,18 +999,22 @@ bge_newbuf_jumbo(struct bge_softc *sc, i
 		r->bge_addr3.bge_addr_lo = BGE_ADDR_LO(segs[3].ds_addr);
 		r->bge_addr3.bge_addr_hi = BGE_ADDR_HI(segs[3].ds_addr);
 		r->bge_len3 = segs[3].ds_len;
+		sc->bge_cdata.bge_rx_jumbo_seglen[i][3] = segs[3].ds_len;
 	case 3:
 		r->bge_addr2.bge_addr_lo = BGE_ADDR_LO(segs[2].ds_addr);
 		r->bge_addr2.bge_addr_hi = BGE_ADDR_HI(segs[2].ds_addr);
 		r->bge_len2 = segs[2].ds_len;
+		sc->bge_cdata.bge_rx_jumbo_seglen[i][2] = segs[2].ds_len;
 	case 2:
 		r->bge_addr1.bge_addr_lo = BGE_ADDR_LO(segs[1].ds_addr);
 		r->bge_addr1.bge_addr_hi = BGE_ADDR_HI(segs[1].ds_addr);
 		r->bge_len1 = segs[1].ds_len;
+		sc->bge_cdata.bge_rx_jumbo_seglen[i][1] = segs[1].ds_len;
 	case 1:
 		r->bge_addr0.bge_addr_lo = BGE_ADDR_LO(segs[0].ds_addr);
 		r->bge_addr0.bge_addr_hi = BGE_ADDR_HI(segs[0].ds_addr);
 		r->bge_len0 = segs[0].ds_len;
+		sc->bge_cdata.bge_rx_jumbo_seglen[i][0] = segs[0].ds_len;
 		break;
 	default:
 		panic("%s: %d segments\n", __func__, nsegs);
@@ -1014,12 +1026,6 @@ bge_newbuf_jumbo(struct bge_softc *sc, i
 	return (0);
 }
 
-/*
- * The standard receive ring has 512 entries in it. At 2K per mbuf cluster,
- * that's 1MB or memory, which is a lot. For now, we fill only the first
- * 256 ring entries and hope that our CPU is fast enough to keep up with
- * the NIC.
- */
 static int
 bge_init_rx_ring_std(struct bge_softc *sc)
 {
@@ -1027,7 +1033,7 @@ bge_init_rx_ring_std(struct bge_softc *s
 
 	bzero(sc->bge_ldata.bge_rx_std_ring, BGE_STD_RX_RING_SZ);
 	sc->bge_std = 0;
-	for (i = 0; i < BGE_SSLOTS; i++) {
+	for (i = 0; i < BGE_STD_RX_RING_CNT; i++) {
 		if ((error = bge_newbuf_std(sc, i)) != 0)
 			return (error);
 		BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
@@ -1036,8 +1042,8 @@ bge_init_rx_ring_std(struct bge_softc *s
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_std_ring_tag,
 	    sc->bge_cdata.bge_rx_std_ring_map, BUS_DMASYNC_PREWRITE);
 
-	sc->bge_std = i - 1;
-	bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, sc->bge_std);
+	sc->bge_std = 0;
+	bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, BGE_STD_RX_RING_CNT - 1);
 
 	return (0);
 }
@@ -1079,14 +1085,14 @@ bge_init_rx_ring_jumbo(struct bge_softc 
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_jumbo_ring_tag,
 	    sc->bge_cdata.bge_rx_jumbo_ring_map, BUS_DMASYNC_PREWRITE);
 
-	sc->bge_jumbo = i - 1;
+	sc->bge_jumbo = 0;
 
 	rcb = &sc->bge_ldata.bge_info.bge_jumbo_rx_rcb;
 	rcb->bge_maxlen_flags = BGE_RCB_MAXLEN_FLAGS(0,
 				    BGE_RCB_FLAG_USE_EXT_RX_BD);
 	CSR_WRITE_4(sc, BGE_RX_JUMBO_RCB_MAXLEN_FLAGS, rcb->bge_maxlen_flags);
 
-	bge_writembx(sc, BGE_MBX_RX_JUMBO_PROD_LO, sc->bge_jumbo);
+	bge_writembx(sc, BGE_MBX_RX_JUMBO_PROD_LO, BGE_JUMBO_RX_RING_CNT - 1);
 
 	return (0);
 }
@@ -3273,6 +3279,33 @@ bge_reset(struct bge_softc *sc)
 	return(0);
 }
 
+static __inline void
+bge_rxreuse_std(struct bge_softc *sc, int i)
+{
+	struct bge_rx_bd *r;
+
+	r = &sc->bge_ldata.bge_rx_std_ring[sc->bge_std];
+	r->bge_flags = BGE_RXBDFLAG_END;
+	r->bge_len = sc->bge_cdata.bge_rx_std_seglen[i];
+	r->bge_idx = i;
+	BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
+}
+
+static __inline void
+bge_rxreuse_jumbo(struct bge_softc *sc, int i)
+{
+	struct bge_extrx_bd *r;
+
+	r = &sc->bge_ldata.bge_rx_jumbo_ring[sc->bge_jumbo];
+	r->bge_flags = BGE_RXBDFLAG_JUMBO_RING | BGE_RXBDFLAG_END;
+	r->bge_len0 = sc->bge_cdata.bge_rx_jumbo_seglen[i][0];
+	r->bge_len1 = sc->bge_cdata.bge_rx_jumbo_seglen[i][1];
+	r->bge_len2 = sc->bge_cdata.bge_rx_jumbo_seglen[i][2];
+	r->bge_len3 = sc->bge_cdata.bge_rx_jumbo_seglen[i][3];
+	r->bge_idx = i;
+	BGE_INC(sc->bge_jumbo, BGE_JUMBO_RX_RING_CNT);
+}
+
 /*
  * Frame reception handling. This is called if there's a frame
  * on the receive return list.
@@ -3336,24 +3369,24 @@ bge_rxeof(struct bge_softc *sc, uint16_t
 			jumbocnt++;
 			m = sc->bge_cdata.bge_rx_jumbo_chain[rxidx];
 			if (cur_rx->bge_flags & BGE_RXBDFLAG_ERROR) {
-				BGE_INC(sc->bge_jumbo, BGE_JUMBO_RX_RING_CNT);
+				bge_rxreuse_jumbo(sc, rxidx);
 				continue;
 			}
 			if (bge_newbuf_jumbo(sc, rxidx) != 0) {
-				BGE_INC(sc->bge_jumbo, BGE_JUMBO_RX_RING_CNT);
+				bge_rxreuse_jumbo(sc, rxidx);
 				ifp->if_iqdrops++;
 				continue;
 			}
 			BGE_INC(sc->bge_jumbo, BGE_JUMBO_RX_RING_CNT);
 		} else {
 			stdcnt++;
+			m = sc->bge_cdata.bge_rx_std_chain[rxidx];
 			if (cur_rx->bge_flags & BGE_RXBDFLAG_ERROR) {
-				BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
+				bge_rxreuse_std(sc, rxidx);
 				continue;
 			}
-			m = sc->bge_cdata.bge_rx_std_chain[rxidx];
 			if (bge_newbuf_std(sc, rxidx) != 0) {
-				BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT);
+				bge_rxreuse_std(sc, rxidx);
 				ifp->if_iqdrops++;
 				continue;
 			}

Modified: projects/ppc64/sys/dev/bge/if_bgereg.h
==============================================================================
--- projects/ppc64/sys/dev/bge/if_bgereg.h	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/bge/if_bgereg.h	Sun Jun  6 14:31:41 2010	(r208872)
@@ -2561,6 +2561,8 @@ struct bge_chain_data {
 	struct mbuf		*bge_tx_chain[BGE_TX_RING_CNT];
 	struct mbuf		*bge_rx_std_chain[BGE_STD_RX_RING_CNT];
 	struct mbuf		*bge_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
+	int			bge_rx_std_seglen[BGE_STD_RX_RING_CNT];
+	int			bge_rx_jumbo_seglen[BGE_JUMBO_RX_RING_CNT][4];
 };
 
 struct bge_dmamap_arg {

Modified: projects/ppc64/sys/dev/hwpmc/hwpmc_mod.c
==============================================================================
--- projects/ppc64/sys/dev/hwpmc/hwpmc_mod.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/hwpmc/hwpmc_mod.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -1248,7 +1248,7 @@ pmc_process_csw_in(struct thread *td)
 			continue;
 
 		/* increment PMC runcount */
-		atomic_add_rel_32(&pm->pm_runcount, 1);
+		atomic_add_rel_int(&pm->pm_runcount, 1);
 
 		/* configure the HWPMC we are going to use. */
 		pcd = pmc_ri_to_classdep(md, ri, &adjri);
@@ -1387,7 +1387,7 @@ pmc_process_csw_out(struct thread *td)
 			pcd->pcd_stop_pmc(cpu, adjri);
 
 		/* reduce this PMC's runcount */
-		atomic_subtract_rel_32(&pm->pm_runcount, 1);
+		atomic_subtract_rel_int(&pm->pm_runcount, 1);
 
 		/*
 		 * If this PMC is associated with this process,
@@ -3252,9 +3252,6 @@ pmc_syscall_handler(struct thread *td, v
 			}
 		}
 
-		if (error)
-			break;
-
 		/*
 		 * Look for valid values for 'pm_flags'
 		 */
@@ -4045,7 +4042,7 @@ pmc_process_interrupt(int cpu, struct pm
 	    ("[pmc,%d] pm=%p runcount %d", __LINE__, (void *) pm,
 		pm->pm_runcount));
 
-	atomic_add_rel_32(&pm->pm_runcount, 1);	/* hold onto PMC */
+	atomic_add_rel_int(&pm->pm_runcount, 1);	/* hold onto PMC */
 	ps->ps_pmc = pm;
 	if ((td = curthread) && td->td_proc)
 		ps->ps_pid = td->td_proc->p_pid;
@@ -4246,7 +4243,7 @@ pmc_process_samples(int cpu)
 
 	entrydone:
 		ps->ps_nsamples = 0;	/* mark entry as free */
-		atomic_subtract_rel_32(&pm->pm_runcount, 1);
+		atomic_subtract_rel_int(&pm->pm_runcount, 1);
 
 		/* increment read pointer, modulo sample size */
 		if (++ps == psb->ps_fence)
@@ -4418,7 +4415,7 @@ pmc_process_exit(void *arg __unused, str
 				mtx_pool_unlock_spin(pmc_mtxpool, pm);
 			}
 
-			atomic_subtract_rel_32(&pm->pm_runcount,1);
+			atomic_subtract_rel_int(&pm->pm_runcount,1);
 
 			KASSERT((int) pm->pm_runcount >= 0,
 			    ("[pmc,%d] runcount is %d", __LINE__, ri));

Modified: projects/ppc64/sys/dev/isp/isp.c
==============================================================================
--- projects/ppc64/sys/dev/isp/isp.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/dev/isp/isp.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -4184,7 +4184,7 @@ int
 isp_start(XS_T *xs)
 {
 	ispsoftc_t *isp;
-	uint32_t handle;
+	uint32_t handle, cdblen;
 	uint8_t local[QENTRY_LEN];
 	ispreq_t *reqp;
 	void *cdbp, *qep;
@@ -4369,11 +4369,17 @@ isp_start(XS_T *xs)
 
 	tptr = &reqp->req_time;
 
+	/*
+	 * NB: we do not support long CDBs
+	 */
+	cdblen = XS_CDBLEN(xs);
+
 	if (IS_SCSI(isp)) {
 		reqp->req_target = target | (XS_CHANNEL(xs) << 7);
 		reqp->req_lun_trn = XS_LUN(xs);
-		reqp->req_cdblen = XS_CDBLEN(xs);
+		cdblen = MIN(cdblen, sizeof (reqp->req_cdb));
 		cdbp = reqp->req_cdb;
+		reqp->req_cdblen = cdblen;
 	} else if (IS_24XX(isp)) {
 		ispreqt7_t *t7 = (ispreqt7_t *)local;
 		fcportdb_t *lp;
@@ -4388,25 +4394,29 @@ isp_start(XS_T *xs)
 			t7->req_lun[0] |= 0x40;
 		}
 		t7->req_lun[1] = XS_LUN(xs);
-		cdbp = t7->req_cdb;
 		tptr = &t7->req_time;
+		cdbp = t7->req_cdb;
+		cdblen = MIN(cdblen, sizeof (t7->req_cdb));
 	} else if (ISP_CAP_2KLOGIN(isp)) {
 		ispreqt2e_t *t2e = (ispreqt2e_t *)local;
 		t2e->req_target = target;
 		t2e->req_scclun = XS_LUN(xs);
 		cdbp = t2e->req_cdb;
+		cdblen = MIN(cdblen, sizeof (t2e->req_cdb));
 	} else if (ISP_CAP_SCCFW(isp)) {
 		ispreqt2_t *t2 = (ispreqt2_t *)local;
 		t2->req_target = target;
 		t2->req_scclun = XS_LUN(xs);
 		cdbp = t2->req_cdb;
+		cdblen = MIN(cdblen, sizeof (t2->req_cdb));
 	} else {
 		ispreqt2_t *t2 = (ispreqt2_t *)local;
 		t2->req_target = target;
 		t2->req_lun_trn = XS_LUN(xs);
 		cdbp = t2->req_cdb;
+		cdblen = MIN(cdblen, sizeof (t2->req_cdb));
 	}
-	ISP_MEMCPY(cdbp, XS_CDBP(xs), XS_CDBLEN(xs));
+	ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen);
 
 	*tptr = XS_TIME(xs) / 1000;
 	if (*tptr == 0 && XS_TIME(xs)) {

Modified: projects/ppc64/sys/mips/mips/pmap.c
==============================================================================
--- projects/ppc64/sys/mips/mips/pmap.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/mips/mips/pmap.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -3072,26 +3072,20 @@ page_is_managed(vm_offset_t pa)
 static int
 init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot)
 {
-	int rw = 0;
+	int rw;
 
 	if (!(prot & VM_PROT_WRITE))
 		rw = PTE_ROPAGE;
-	else {
-		if (va >= VM_MIN_KERNEL_ADDRESS) {
-			/*
-			 * Don't bother to trap on kernel writes, just
-			 * record page as dirty.
-			 */
-			rw = PTE_RWPAGE;
-			vm_page_dirty(m);
-		} else if ((m->md.pv_flags & PV_TABLE_MOD) ||
-		    m->dirty == VM_PAGE_BITS_ALL)
+	else if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
+		if ((m->md.pv_flags & PV_TABLE_MOD) != 0)
 			rw = PTE_RWPAGE;
 		else
 			rw = PTE_CWPAGE;
 		vm_page_flag_set(m, PG_WRITEABLE);
-	}
-	return rw;
+	} else
+		/* Needn't emulate a modified bit for unmanaged pages. */
+		rw = PTE_RWPAGE;
+	return (rw);
 }
 
 /*

Modified: projects/ppc64/sys/netinet/sctp_auth.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_auth.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_auth.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -895,9 +895,9 @@ static inline int
 sctp_get_hmac_block_len(uint16_t hmac_algo)
 {
 	switch (hmac_algo) {
-		case SCTP_AUTH_HMAC_ID_SHA1:
+	case SCTP_AUTH_HMAC_ID_SHA1:
 #ifdef HAVE_SHA224
-		case SCTP_AUTH_HMAC_ID_SHA224:
+	case SCTP_AUTH_HMAC_ID_SHA224:
 #endif
 		return (64);
 #ifdef HAVE_SHA2
@@ -918,7 +918,7 @@ static void
 sctp_hmac_init(uint16_t hmac_algo, sctp_hash_context_t * ctx)
 {
 	switch (hmac_algo) {
-		case SCTP_AUTH_HMAC_ID_SHA1:
+	case SCTP_AUTH_HMAC_ID_SHA1:
 		SHA1_Init(&ctx->sha1);
 		break;
 #ifdef HAVE_SHA224
@@ -948,7 +948,7 @@ sctp_hmac_update(uint16_t hmac_algo, sct
     uint8_t * text, uint32_t textlen)
 {
 	switch (hmac_algo) {
-		case SCTP_AUTH_HMAC_ID_SHA1:
+	case SCTP_AUTH_HMAC_ID_SHA1:
 		SHA1_Update(&ctx->sha1, text, textlen);
 		break;
 #ifdef HAVE_SHA224
@@ -978,7 +978,7 @@ sctp_hmac_final(uint16_t hmac_algo, sctp
     uint8_t * digest)
 {
 	switch (hmac_algo) {
-		case SCTP_AUTH_HMAC_ID_SHA1:
+	case SCTP_AUTH_HMAC_ID_SHA1:
 		SHA1_Final(digest, &ctx->sha1);
 		break;
 #ifdef HAVE_SHA224

Modified: projects/ppc64/sys/netinet/sctp_bsd_addr.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_bsd_addr.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_bsd_addr.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -140,7 +140,6 @@ sctp_startup_iterator(void)
 	    SCTP_KTRHEAD_NAME);
 }
 
-
 #ifdef INET6
 
 void

Modified: projects/ppc64/sys/netinet/sctp_indata.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_indata.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_indata.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -3849,7 +3849,8 @@ sctp_window_probe_recovery(struct sctp_t
 	sctp_total_flight_decrease(stcb, tp1);
 	/* Now mark for resend */
 	tp1->sent = SCTP_DATAGRAM_RESEND;
-	asoc->sent_queue_retran_cnt++;
+	sctp_ucount_incr(asoc->sent_queue_retran_cnt);
+
 	if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FLIGHT_LOGGING_ENABLE) {
 		sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_WP,
 		    tp1->whoTo->flight_size,
@@ -4262,7 +4263,7 @@ again:
 					sctp_flight_size_increase(tp1);
 					sctp_total_flight_increase(stcb, tp1);
 				} else if (tp1->sent == SCTP_DATAGRAM_RESEND) {
-					asoc->sent_queue_retran_cnt++;
+					sctp_ucount_incr(asoc->sent_queue_retran_cnt);
 				}
 			}
 		}
@@ -5263,7 +5264,7 @@ again:
 					sctp_flight_size_increase(tp1);
 					sctp_total_flight_increase(stcb, tp1);
 				} else if (tp1->sent == SCTP_DATAGRAM_RESEND) {
-					asoc->sent_queue_retran_cnt++;
+					sctp_ucount_incr(asoc->sent_queue_retran_cnt);
 				}
 			}
 		}

Modified: projects/ppc64/sys/netinet/sctp_input.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_input.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_input.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -3067,7 +3067,7 @@ process_chunk_drop(struct sctp_tcb *stcb
     struct sctp_nets *net, uint8_t flg)
 {
 	switch (desc->chunk_type) {
-		case SCTP_DATA:
+	case SCTP_DATA:
 		/* find the tsn to resend (possibly */
 		{
 			uint32_t tsn;
@@ -4861,6 +4861,9 @@ process_control_chunks:
 			} else {
 				if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
 					/* We are not interested anymore */
+					if (stcb) {
+						SCTP_TCB_UNLOCK(stcb);
+					}
 					*offset = length;
 					return (NULL);
 				}
@@ -5408,13 +5411,16 @@ sctp_process_ecn_marked_b(struct sctp_tc
 }
 
 #ifdef INVARIANTS
-static void
-sctp_validate_no_locks(struct sctp_inpcb *inp)
+#ifdef __GNUC__
+__attribute__((noinline))
+#endif
+	void
+	     sctp_validate_no_locks(struct sctp_inpcb *inp)
 {
-	struct sctp_tcb *stcb;
+	struct sctp_tcb *lstcb;
 
-	LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) {
-		if (mtx_owned(&stcb->tcb_mtx)) {
+	LIST_FOREACH(lstcb, &inp->sctp_asoc_list, sctp_tcblist) {
+		if (mtx_owned(&lstcb->tcb_mtx)) {
 			panic("Own lock on stcb at return from input");
 		}
 	}

Modified: projects/ppc64/sys/netinet/sctp_output.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_output.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_output.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -3053,32 +3053,32 @@ sctp_source_address_selection(struct sct
 	 * it out
 	 * zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
 	 * For V4
-         *------------------------------------------
+	 * ------------------------------------------
 	 *      source     *      dest  *  result
 	 * -----------------------------------------
 	 * <a>  Private    *    Global  *  NAT
 	 * -----------------------------------------
 	 * <b>  Private    *    Private *  No problem
 	 * -----------------------------------------
-         * <c>  Global     *    Private *  Huh, How will this work?
+	 * <c>  Global     *    Private *  Huh, How will this work?
 	 * -----------------------------------------
-         * <d>  Global     *    Global  *  No Problem
-         *------------------------------------------
+	 * <d>  Global     *    Global  *  No Problem
+	 *------------------------------------------
 	 * zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
 	 * For V6
-         *------------------------------------------
+	 *------------------------------------------
 	 *      source     *      dest  *  result
 	 * -----------------------------------------
 	 * <a>  Linklocal  *    Global  *
 	 * -----------------------------------------
 	 * <b>  Linklocal  * Linklocal  *  No problem
 	 * -----------------------------------------
-         * <c>  Global     * Linklocal  *  Huh, How will this work?
+	 * <c>  Global     * Linklocal  *  Huh, How will this work?
 	 * -----------------------------------------
-         * <d>  Global     *    Global  *  No Problem
-         *------------------------------------------
+	 * <d>  Global     *    Global  *  No Problem
+	 *------------------------------------------
 	 * zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
-         *
+	 *
 	 * And then we add to that what happens if there are multiple addresses
 	 * assigned to an interface. Remember the ifa on a ifn is a linked
 	 * list of addresses. So one interface can have more than one IP
@@ -3091,13 +3091,13 @@ sctp_source_address_selection(struct sct
 	 * Decisions:
 	 *
 	 * - count the number of addresses on the interface.
-         * - if it is one, no problem except case <c>.
-         *   For <a> we will assume a NAT out there.
+	 * - if it is one, no problem except case <c>.
+	 *   For <a> we will assume a NAT out there.
 	 * - if there are more than one, then we need to worry about scope P
 	 *   or G. We should prefer G -> G and P -> P if possible.
 	 *   Then as a secondary fall back to mixed types G->P being a last
 	 *   ditch one.
-         * - The above all works for bound all, but bound specific we need to
+	 * - The above all works for bound all, but bound specific we need to
 	 *   use the same concept but instead only consider the bound
 	 *   addresses. If the bound set is NOT assigned to the interface then
 	 *   we must use rotation amongst the bound addresses..
@@ -8913,6 +8913,9 @@ sctp_chunk_retransmission(struct sctp_in
 		if ((chk->rec.chunk_id.id == SCTP_COOKIE_ECHO) ||
 		    (chk->rec.chunk_id.id == SCTP_STREAM_RESET) ||
 		    (chk->rec.chunk_id.id == SCTP_FORWARD_CUM_TSN)) {
+			if (chk->sent != SCTP_DATAGRAM_RESEND) {
+				continue;
+			}
 			if (chk->rec.chunk_id.id == SCTP_STREAM_RESET) {
 				if (chk != asoc->str_reset) {
 					/*
@@ -8973,7 +8976,7 @@ sctp_chunk_retransmission(struct sctp_in
 		/* (void)SCTP_GETTIME_TIMEVAL(&chk->whoTo->last_sent_time); */
 		*cnt_out += 1;
 		chk->sent = SCTP_DATAGRAM_SENT;
-		/* sctp_ucount_decr(asoc->sent_queue_retran_cnt); */
+		sctp_ucount_decr(stcb->asoc.sent_queue_retran_cnt);
 		if (fwd_tsn == 0) {
 			return (0);
 		} else {
@@ -13427,6 +13430,13 @@ out_unlocked:
 		}
 	}
 #endif
+#ifdef INVARIANTS
+	if (inp) {
+		sctp_validate_no_locks(inp);
+	} else {
+		printf("Warning - inp is NULL so cant validate locks\n");
+	}
+#endif
 	if (top) {
 		sctp_m_freem(top);
 	}

Modified: projects/ppc64/sys/netinet/sctp_pcb.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_pcb.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_pcb.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -2296,7 +2296,7 @@ sctp_inpcb_alloc(struct socket *so, uint
 	if (inp->sctp_asocidhash == NULL) {
 		SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_ep), inp);
 		SCTP_INP_INFO_WUNLOCK();
-		return error;
+		return (ENOBUFS);
 	}
 #ifdef IPSEC
 	{
@@ -3107,29 +3107,13 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 #ifdef SCTP_LOG_CLOSING
 	sctp_log_closing(inp, NULL, 0);
 #endif
-	SCTP_ITERATOR_LOCK();
-
-	so = inp->sctp_socket;
-	if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) {
-		/* been here before.. eeks.. get out of here */
-		SCTP_PRINTF("This conflict in free SHOULD not be happening! from %d, imm %d\n", from, immediate);
-		SCTP_ITERATOR_UNLOCK();
-#ifdef SCTP_LOG_CLOSING
-		sctp_log_closing(inp, NULL, 1);
-#endif
-		return;
-	}
-	SCTP_ASOC_CREATE_LOCK(inp);
-	SCTP_INP_INFO_WLOCK();
-
-	SCTP_INP_WLOCK(inp);
-	/* First time through we have the socket lock, after that no more. */
 	if (from == SCTP_CALLED_AFTER_CMPSET_OFCLOSE) {
 		/*
 		 * Once we are in we can remove the flag from = 1 is only
 		 * passed from the actual closing routines that are called
 		 * via the sockets layer.
 		 */
+		SCTP_ITERATOR_LOCK();
 		inp->sctp_flags &= ~SCTP_PCB_FLAGS_CLOSE_IP;
 		/* socket is gone, so no more wakeups allowed */
 		inp->sctp_flags |= SCTP_PCB_FLAGS_DONT_WAKE;
@@ -3138,7 +3122,22 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 
 		/* mark any iterators on the list or being processed */
 		sctp_iterator_inp_being_freed(inp);
+		SCTP_ITERATOR_UNLOCK();
 	}
+	so = inp->sctp_socket;
+	if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) {
+		/* been here before.. eeks.. get out of here */
+		SCTP_PRINTF("This conflict in free SHOULD not be happening! from %d, imm %d\n", from, immediate);
+#ifdef SCTP_LOG_CLOSING
+		sctp_log_closing(inp, NULL, 1);
+#endif
+		return;
+	}
+	SCTP_ASOC_CREATE_LOCK(inp);
+	SCTP_INP_INFO_WLOCK();
+
+	SCTP_INP_WLOCK(inp);
+	/* First time through we have the socket lock, after that no more. */
 	sctp_timer_stop(SCTP_TIMER_TYPE_NEWCOOKIE, inp, NULL, NULL,
 	    SCTP_FROM_SCTP_PCB + SCTP_LOC_1);
 
@@ -3164,8 +3163,17 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 			nasoc = LIST_NEXT(asoc, sctp_tcblist);
 			if (asoc->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) {
 				/* Skip guys being freed */
-				/* asoc->sctp_socket = NULL; FIXME MT */
 				cnt_in_sd++;
+				if (asoc->asoc.state & SCTP_STATE_IN_ACCEPT_QUEUE) {
+					/*
+					 * Special case - we did not start a
+					 * kill timer on the asoc due to it
+					 * was not closed. So go ahead and
+					 * start it now.
+					 */
+					asoc->asoc.state &= ~SCTP_STATE_IN_ACCEPT_QUEUE;
+					sctp_timer_start(SCTP_TIMER_TYPE_ASOCKILL, inp, asoc, NULL);
+				}
 				SCTP_TCB_UNLOCK(asoc);
 				continue;
 			}
@@ -3329,7 +3337,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 			SCTP_INP_WUNLOCK(inp);
 			SCTP_ASOC_CREATE_UNLOCK(inp);
 			SCTP_INP_INFO_WUNLOCK();
-			SCTP_ITERATOR_UNLOCK();
 #ifdef SCTP_LOG_CLOSING
 			sctp_log_closing(inp, NULL, 2);
 #endif
@@ -3407,7 +3414,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 		SCTP_INP_WUNLOCK(inp);
 		SCTP_ASOC_CREATE_UNLOCK(inp);
 		SCTP_INP_INFO_WUNLOCK();
-		SCTP_ITERATOR_UNLOCK();
 #ifdef SCTP_LOG_CLOSING
 		sctp_log_closing(inp, NULL, 3);
 #endif
@@ -3419,7 +3425,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 		SCTP_INP_WUNLOCK(inp);
 		SCTP_ASOC_CREATE_UNLOCK(inp);
 		SCTP_INP_INFO_WUNLOCK();
-		SCTP_ITERATOR_UNLOCK();
 #ifdef SCTP_LOG_CLOSING
 		sctp_log_closing(inp, NULL, 4);
 #endif
@@ -3541,7 +3546,6 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 	SCTP_INP_READ_DESTROY(inp);
 	SCTP_ASOC_CREATE_LOCK_DESTROY(inp);
 	SCTP_INP_INFO_WUNLOCK();
-	SCTP_ITERATOR_UNLOCK();
 	SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_ep), inp);
 	SCTP_DECR_EP_COUNT();
 }
@@ -4590,8 +4594,12 @@ sctp_free_assoc(struct sctp_inpcb *inp, 
 		 * Someone holds a reference OR the socket is unaccepted
 		 * yet.
 		 */
-		if (stcb->asoc.refcnt)
+		if ((stcb->asoc.refcnt) ||
+		    (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) ||
+		    (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE)) {
+			stcb->asoc.state &= ~SCTP_STATE_IN_ACCEPT_QUEUE;
 			sctp_timer_start(SCTP_TIMER_TYPE_ASOCKILL, inp, stcb, NULL);
+		}
 		SCTP_TCB_UNLOCK(stcb);
 		if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) ||
 		    (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE))

Modified: projects/ppc64/sys/netinet/sctp_pcb.h
==============================================================================
--- projects/ppc64/sys/netinet/sctp_pcb.h	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_pcb.h	Sun Jun  6 14:31:41 2010	(r208872)
@@ -621,5 +621,11 @@ sctp_initiate_iterator(inp_func inpf,
     struct sctp_inpcb *,
     uint8_t co_off);
 
+#ifdef INVARIANTS
+void
+     sctp_validate_no_locks(struct sctp_inpcb *inp);
+
+#endif
+
 #endif				/* _KERNEL */
 #endif				/* !__sctp_pcb_h__ */

Modified: projects/ppc64/sys/netinet/sctp_usrreq.c
==============================================================================
--- projects/ppc64/sys/netinet/sctp_usrreq.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctp_usrreq.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -4678,6 +4678,8 @@ sctp_accept(struct socket *so, struct so
 			struct sockaddr_in *sin;
 
 			SCTP_MALLOC_SONAME(sin, struct sockaddr_in *, sizeof *sin);
+			if (sin == NULL)
+				return (ENOMEM);
 			sin->sin_family = AF_INET;
 			sin->sin_len = sizeof(*sin);
 			sin->sin_port = ((struct sockaddr_in *)&store)->sin_port;
@@ -4691,6 +4693,8 @@ sctp_accept(struct socket *so, struct so
 			struct sockaddr_in6 *sin6;
 
 			SCTP_MALLOC_SONAME(sin6, struct sockaddr_in6 *, sizeof *sin6);
+			if (sin6 == NULL)
+				return (ENOMEM);
 			sin6->sin6_family = AF_INET6;
 			sin6->sin6_len = sizeof(*sin6);
 			sin6->sin6_port = ((struct sockaddr_in6 *)&store)->sin6_port;
@@ -4756,6 +4760,8 @@ sctp_ingetaddr(struct socket *so, struct
 	 * Do the malloc first in case it blocks.
 	 */
 	SCTP_MALLOC_SONAME(sin, struct sockaddr_in *, sizeof *sin);
+	if (sin == NULL)
+		return (ENOMEM);
 	sin->sin_family = AF_INET;
 	sin->sin_len = sizeof(*sin);
 	inp = (struct sctp_inpcb *)so->so_pcb;
@@ -4858,6 +4864,8 @@ sctp_peeraddr(struct socket *so, struct 
 		return (ENOTCONN);
 	}
 	SCTP_MALLOC_SONAME(sin, struct sockaddr_in *, sizeof *sin);
+	if (sin == NULL)
+		return (ENOMEM);
 	sin->sin_family = AF_INET;
 	sin->sin_len = sizeof(*sin);
 

Modified: projects/ppc64/sys/netinet/sctputil.c
==============================================================================
--- projects/ppc64/sys/netinet/sctputil.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/netinet/sctputil.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -53,15 +53,9 @@ __FBSDID("$FreeBSD$");
 #define NUMBER_OF_MTU_SIZES 18
 
 
-#if defined(__Windows__) && !defined(SCTP_LOCAL_TRACE_BUF)
-#include "eventrace_netinet.h"
-#include "sctputil.tmh"		/* this is the file that will be auto
-				 * generated */
-#else
 #ifndef KTR_SCTP
 #define KTR_SCTP KTR_SUBSYS
 #endif
-#endif
 
 void
 sctp_sblog(struct sockbuf *sb,
@@ -4207,7 +4201,7 @@ void
 sctp_print_address_pkt(struct ip *iph, struct sctphdr *sh)
 {
 	switch (iph->ip_v) {
-		case IPVERSION:
+	case IPVERSION:
 		{
 			struct sockaddr_in lsa, fsa;
 

Modified: projects/ppc64/sys/powerpc/aim/mmu_oea.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/mmu_oea.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/powerpc/aim/mmu_oea.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -1786,7 +1786,7 @@ moea_remove_all(mmu_t mmu, vm_page_t m)
 		PMAP_UNLOCK(pmap);
 	}
 	if ((m->flags & PG_WRITEABLE) && moea_is_modified(mmu, m)) {
-		moea_attr_clear(m, LPTE_CHG);
+		moea_attr_clear(m, PTE_CHG);
 		vm_page_dirty(m);
 	}
 	vm_page_flag_clear(m, PG_WRITEABLE);

Modified: projects/ppc64/sys/powerpc/booke/pmap.c
==============================================================================
--- projects/ppc64/sys/powerpc/booke/pmap.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/powerpc/booke/pmap.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -1596,7 +1596,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
 			if (!su)
 				flags |= PTE_UW;
 
-			vm_page_flag_set(m, PG_WRITEABLE);
+			if ((flags & PTE_MANAGED) != 0)
+				vm_page_flag_set(m, PG_WRITEABLE);
 		} else {
 			/* Handle modified pages, sense modify status. */
 
@@ -1662,7 +1663,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
 			if (!su)
 				flags |= PTE_UW;
 
-			vm_page_flag_set(m, PG_WRITEABLE);
+			if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+				vm_page_flag_set(m, PG_WRITEABLE);
 		}
 
 		if (prot & VM_PROT_EXECUTE) {

Modified: projects/ppc64/sys/powerpc/powermac/macgpio.c
==============================================================================
--- projects/ppc64/sys/powerpc/powermac/macgpio.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/powerpc/powermac/macgpio.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -98,6 +98,8 @@ static device_method_t macgpio_methods[]
         DEVMETHOD(bus_deactivate_resource, macgpio_deactivate_resource),
         DEVMETHOD(bus_release_resource, bus_generic_release_resource),
 
+	DEVMETHOD(bus_child_pnpinfo_str, ofw_bus_gen_child_pnpinfo_str),
+
 	/* ofw_bus interface */
 	DEVMETHOD(ofw_bus_get_devinfo,	macgpio_get_devinfo),
 	DEVMETHOD(ofw_bus_get_compat,	ofw_bus_gen_get_compat),

Modified: projects/ppc64/sys/powerpc/powermac/uninorth.c
==============================================================================
--- projects/ppc64/sys/powerpc/powermac/uninorth.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/powerpc/powermac/uninorth.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -115,6 +115,8 @@ static device_method_t unin_chip_methods
 	DEVMETHOD(bus_deactivate_resource, unin_chip_deactivate_resource),
 	DEVMETHOD(bus_get_resource_list, unin_chip_get_resource_list),
 
+	DEVMETHOD(bus_child_pnpinfo_str, ofw_bus_gen_child_pnpinfo_str),
+
         /* ofw_bus interface */
 	DEVMETHOD(ofw_bus_get_devinfo,	unin_chip_get_devinfo),
 	DEVMETHOD(ofw_bus_get_compat,	ofw_bus_gen_get_compat),

Modified: projects/ppc64/sys/sparc64/sparc64/pmap.c
==============================================================================
--- projects/ppc64/sys/sparc64/sparc64/pmap.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/sparc64/sparc64/pmap.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -1409,7 +1409,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
 			tp->tte_data |= TD_SW;
 			if (wired)
 				tp->tte_data |= TD_W;
-			vm_page_flag_set(m, PG_WRITEABLE);
+			if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+				vm_page_flag_set(m, PG_WRITEABLE);
 		} else if ((data & TD_W) != 0)
 			vm_page_dirty(m);
 
@@ -1429,7 +1430,7 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
 	} else {
 		/*
 		 * If there is an existing mapping, but its for a different
-		 * phsyical address, delete the old mapping.
+		 * physical address, delete the old mapping.
 		 */
 		if (tp != NULL) {
 			CTR0(KTR_PMAP, "pmap_enter_locked: replace");
@@ -1449,7 +1450,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
 			data |= TD_P;
 		if ((prot & VM_PROT_WRITE) != 0) {
 			data |= TD_SW;
-			vm_page_flag_set(m, PG_WRITEABLE);
+			if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+				vm_page_flag_set(m, PG_WRITEABLE);
 		}
 		if (prot & VM_PROT_EXECUTE) {
 			data |= TD_EXEC;

Modified: projects/ppc64/sys/sys/pmc.h
==============================================================================
--- projects/ppc64/sys/sys/pmc.h	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/sys/sys/pmc.h	Sun Jun  6 14:31:41 2010	(r208872)
@@ -680,7 +680,7 @@ struct pmc {
 	enum pmc_event	pm_event;	/* event being measured */
 	uint32_t	pm_flags;	/* additional flags PMC_F_... */
 	struct pmc_owner *pm_owner;	/* owner thread state */
-	uint32_t	pm_runcount;	/* #cpus currently on */
+	int		pm_runcount;	/* #cpus currently on */
 	enum pmc_state	pm_state;	/* current PMC state */
 
 	/*

Modified: projects/ppc64/tools/tools/netrate/tcpp/README
==============================================================================
--- projects/ppc64/tools/tools/netrate/tcpp/README	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/tools/tools/netrate/tcpp/README	Sun Jun  6 14:31:41 2010	(r208872)
@@ -39,6 +39,7 @@ The client has more to configure, with t
 
   -c <remoteIP>                Select client mode, and specific dest IP
   -C                           Print connections/second instead of GBps
+  -P                           Pin each worker to a CPU
   -M <localIPcount>            Number of sequential local IPs to use; req. -l
   -T                           Include CPU use summary in stats at end of run
   -b <bytespertcp>             Data bytes per connection

Modified: projects/ppc64/tools/tools/netrate/tcpp/tcpp.c
==============================================================================
--- projects/ppc64/tools/tools/netrate/tcpp/tcpp.c	Sun Jun  6 14:29:06 2010	(r208871)
+++ projects/ppc64/tools/tools/netrate/tcpp/tcpp.c	Sun Jun  6 14:31:41 2010	(r208872)
@@ -51,7 +51,7 @@
 
 struct sockaddr_in remoteip; 		/* Base target address. */
 struct sockaddr_in localipbase;		/* Base local address, if -l. */
-int cflag, lflag, mflag, pflag, sflag, tflag, Cflag, Mflag, Tflag;
+int cflag, lflag, mflag, pflag, sflag, tflag, Cflag, Mflag, Pflag, Tflag;
 uint64_t bflag;
 u_short rflag;
 
@@ -61,24 +61,27 @@ usage(void)
 
 	fprintf(stderr, "client: tcpp"
 	    " -c remoteIP"
-	    " [-CT]"
+	    " [-CPT]"
 	    " [-M localIPcount]"
 	    " [-l localIPbase]"
+	    "\n\t"
 	    " [-b bytespertcp]"
 	    " [-m maxtcpsatonce]"
-	    "\n"
-	    "\t"
 	    " [-p procs]"
 	    " [-t tcpsperproc]"
+	    "\n"
+	    "\t"
 	    " [-r baseport]"
 	    "\n");
 
 	fprintf(stderr, "server: tcpp"
 	    " -s"
-	    " [-T]"
+	    " [-PT]"
 	    " [-l localIPbase]"
 	    " [-m maxtcpsatonce]"
 	    " [-p procs]"
+	    "\n"
+	    "\t"
 	    " [-r baseport]"
 	    "\n");
 	exit(EX_USAGE);
@@ -109,7 +112,7 @@ main(int argc, char *argv[])
 	rflag = BASEPORT_DEFAULT;
 	tflag = TCPS_DEFAULT;
 	Mflag = 1;
-	while ((ch = getopt(argc, argv, "b:c:l:m:p:r:st:CM:T")) != -1) {
+	while ((ch = getopt(argc, argv, "b:c:l:m:p:r:st:CM:PT")) != -1) {
 		switch (ch) {

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-projects mailing list