Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Nov 2015 16:16:19 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r290991 - in projects/powernv: arm/arm arm/freescale/imx arm/include arm/samsung/exynos arm/ti/am335x conf dev/ata/chipsets dev/hwpmc dev/isp dev/re dev/vmware/vmxnet3 dev/wpi fs/nfscli...
Message-ID:  <201511171616.tAHGGJP6073798@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Tue Nov 17 16:16:18 2015
New Revision: 290991
URL: https://svnweb.freebsd.org/changeset/base/290991

Log:
  Bring up to date with HEAD.

Added:
  projects/powernv/mips/atheros/qca953x_chip.c
     - copied unchanged from r290990, head/sys/mips/atheros/qca953x_chip.c
  projects/powernv/mips/atheros/qca953x_chip.h
     - copied unchanged from r290990, head/sys/mips/atheros/qca953x_chip.h
  projects/powernv/mips/atheros/qca953xreg.h
     - copied unchanged from r290990, head/sys/mips/atheros/qca953xreg.h
Modified:
  projects/powernv/arm/arm/hdmi_if.m
  projects/powernv/arm/arm/pl310.c
  projects/powernv/arm/freescale/imx/imx6_ccm.c
  projects/powernv/arm/freescale/imx/imx6_ccmreg.h
  projects/powernv/arm/include/pcb.h
  projects/powernv/arm/include/pl310.h
  projects/powernv/arm/samsung/exynos/exynos5_ehci.c
  projects/powernv/arm/ti/am335x/am335x_lcd.c
  projects/powernv/arm/ti/am335x/tda19988.c
  projects/powernv/conf/kern.pre.mk
  projects/powernv/dev/ata/chipsets/ata-intel.c
  projects/powernv/dev/hwpmc/hwpmc_mod.c
  projects/powernv/dev/isp/isp.c
  projects/powernv/dev/isp/isp_freebsd.c
  projects/powernv/dev/isp/isp_freebsd.h
  projects/powernv/dev/isp/isp_library.c
  projects/powernv/dev/isp/ispmbox.h
  projects/powernv/dev/re/if_re.c
  projects/powernv/dev/vmware/vmxnet3/if_vmx.c
  projects/powernv/dev/wpi/if_wpi.c
  projects/powernv/fs/nfsclient/nfs_clvfsops.c
  projects/powernv/kern/kern_dump.c
  projects/powernv/kern/kern_jail.c
  projects/powernv/kern/kern_loginclass.c
  projects/powernv/kern/kern_racct.c
  projects/powernv/kern/kern_rctl.c
  projects/powernv/kern/kern_resource.c
  projects/powernv/mips/atheros/apb.c
  projects/powernv/mips/atheros/ar71xx_ehci.c
  projects/powernv/mips/atheros/ar71xx_gpio.c
  projects/powernv/mips/atheros/ar71xx_setup.c
  projects/powernv/mips/atheros/ar71xx_setup.h
  projects/powernv/mips/atheros/files.ar71xx
  projects/powernv/mips/atheros/if_arge.c
  projects/powernv/net/pfkeyv2.h
  projects/powernv/netinet6/ip6_forward.c
  projects/powernv/netinet6/ip6_output.c
  projects/powernv/netinet6/nd6.c
  projects/powernv/netinet6/nd6.h
  projects/powernv/netipsec/ipsec.h
  projects/powernv/netipsec/key.c
  projects/powernv/netipsec/xform_esp.c
  projects/powernv/netpfil/pf/pf.c
  projects/powernv/netsmb/smb_iod.c
  projects/powernv/opencrypto/xform.c
  projects/powernv/powerpc/aim/mmu_oea64.c
  projects/powernv/powerpc/aim/moea64_native.c
  projects/powernv/powerpc/ofw/ofw_machdep.c
  projects/powernv/powerpc/ofw/ofw_pci.c
  projects/powernv/powerpc/ofw/ofw_pcibus.c
  projects/powernv/powerpc/ofw/openpic_ofw.c
  projects/powernv/powerpc/powermac/cpcht.c
  projects/powernv/powerpc/powermac/kiic.c
  projects/powernv/powerpc/powermac/macgpio.c
  projects/powernv/powerpc/pseries/mmu_phyp.c
  projects/powernv/powerpc/pseries/phyp_console.c
  projects/powernv/powerpc/pseries/phyp_llan.c
  projects/powernv/powerpc/pseries/phyp_vscsi.c
  projects/powernv/powerpc/pseries/platform_chrp.c
  projects/powernv/powerpc/pseries/plpar_iommu.c
  projects/powernv/powerpc/pseries/rtas_pci.c
  projects/powernv/sparc64/include/dump.h
  projects/powernv/sparc64/sparc64/dump_machdep.c
  projects/powernv/sys/jail.h
  projects/powernv/sys/loginclass.h
  projects/powernv/sys/pmc.h
  projects/powernv/sys/resourcevar.h
  projects/powernv/vm/vm_page.h
  projects/powernv/vm/vm_pageout.c
Directory Properties:
  projects/powernv/   (props changed)
  projects/powernv/conf/   (props changed)

Modified: projects/powernv/arm/arm/hdmi_if.m
==============================================================================
--- projects/powernv/arm/arm/hdmi_if.m	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/arm/hdmi_if.m	Tue Nov 17 16:16:18 2015	(r290991)
@@ -35,8 +35,10 @@ INTERFACE hdmi;
 HEADER {
 	#include <sys/eventhandler.h>
 
-	typedef void (*hdmi_event_hook)(void *, int);
+	typedef void (*hdmi_event_hook)(void *, device_t, int);
 	EVENTHANDLER_DECLARE(hdmi_event, hdmi_event_hook);
+
+	#define HDMI_EVENT_CONNECTED	0
 }
 
 #

Modified: projects/powernv/arm/arm/pl310.c
==============================================================================
--- projects/powernv/arm/arm/pl310.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/arm/pl310.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -90,7 +90,7 @@ static struct ofw_compat_data compat_dat
 	{NULL,			false}
 };
 
-void
+static void
 pl310_print_config(struct pl310_softc *sc)
 {
 	uint32_t aux, prefetch;

Modified: projects/powernv/arm/freescale/imx/imx6_ccm.c
==============================================================================
--- projects/powernv/arm/freescale/imx/imx6_ccm.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/freescale/imx/imx6_ccm.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -88,14 +88,42 @@ WR4(struct ccm_softc *sc, bus_size_t off
 static void
 ccm_init_gates(struct ccm_softc *sc)
 {
-                                        /* Turns on... */
-	WR4(sc, CCM_CCGR0, 0x0000003f); /* ahpbdma, aipstz 1 & 2 busses */
-	WR4(sc, CCM_CCGR1, 0x00300c00); /* gpt, enet */
-	WR4(sc, CCM_CCGR2, 0x0fffffc0); /* ipmux & ipsync (bridges), iomux, i2c */
-	WR4(sc, CCM_CCGR3, 0x3ff00000); /* DDR memory controller */
-	WR4(sc, CCM_CCGR4, 0x0000f300); /* pl301 bus crossbar */
-	WR4(sc, CCM_CCGR5, 0x0ffc00c0); /* uarts, ssi, sdma */
-	WR4(sc, CCM_CCGR6, 0x000003ff); /* usdhc 1-4, usboh3 */
+	uint32_t reg;
+
+ 	/* ahpbdma, aipstz 1 & 2 busses */
+	reg = CCGR0_AIPS_TZ1 | CCGR0_AIPS_TZ2 | CCGR0_ABPHDMA;
+	WR4(sc, CCM_CCGR0, reg);
+
+	/* gpt, enet */
+	reg = CCGR1_ENET | CCGR1_GPT;
+	WR4(sc, CCM_CCGR1, reg);
+
+	/* ipmux & ipsync (bridges), iomux, i2c */
+	reg = CCGR2_I2C1 | CCGR2_I2C2 | CCGR2_I2C3 | CCGR2_IIM |
+	    CCGR2_IOMUX_IPT | CCGR2_IPMUX1 | CCGR2_IPMUX2 | CCGR2_IPMUX3 |
+	    CCGR2_IPSYNC_IP2APB_TZASC1 | CCGR2_IPSYNC_IP2APB_TZASC2 |
+	    CCGR2_IPSYNC_VDOA;
+	WR4(sc, CCM_CCGR2, reg);
+
+	/* DDR memory controller */
+	reg = CCGR3_OCRAM | CCGR3_MMDC_CORE_IPG |
+	    CCGR3_MMDC_CORE_ACLK_FAST | CCGR3_CG11 | CCGR3_CG13;
+	WR4(sc, CCM_CCGR3, reg);
+
+	/* pl301 bus crossbar */
+	reg = CCGR4_PL301_MX6QFAST1_S133 |
+	    CCGR4_PL301_MX6QPER1_BCH | CCGR4_PL301_MX6QPER2_MAIN;
+	WR4(sc, CCM_CCGR4, reg);
+
+	/* uarts, ssi, sdma */
+	reg = CCGR5_SDMA | CCGR5_SSI1 | CCGR5_SSI2 | CCGR5_SSI3 |
+	    CCGR5_UART | CCGR5_UART_SERIAL;
+	WR4(sc, CCM_CCGR5, reg);
+
+	/* usdhc 1-4, usboh3 */
+	reg = CCGR6_USBOH3 | CCGR6_USDHC1 | CCGR6_USDHC2 |
+	    CCGR6_USDHC3 | CCGR6_USDHC4;
+	WR4(sc, CCM_CCGR6, reg);
 }
 
 static int

Modified: projects/powernv/arm/freescale/imx/imx6_ccmreg.h
==============================================================================
--- projects/powernv/arm/freescale/imx/imx6_ccmreg.h	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/freescale/imx/imx6_ccmreg.h	Tue Nov 17 16:16:18 2015	(r290991)
@@ -58,12 +58,57 @@
 #define	CCM_CGPR			0x064
 #define	  CCM_CGPR_INT_MEM_CLK_LPM	  (1 << 17)
 #define	CCM_CCGR0			0x068
+#define		CCGR0_AIPS_TZ1			(0x3 << 0)
+#define		CCGR0_AIPS_TZ2			(0x3 << 2)
+#define		CCGR0_ABPHDMA			(0x3 << 4)
 #define	CCM_CCGR1			0x06C
+#define		CCGR1_ENET			(0x3 << 10)
+#define		CCGR1_GPT			(0x3 << 20)
 #define	CCM_CCGR2			0x070
+#define		CCGR2_HDMI_TX			(0x3 << 0)
+#define		CCGR2_HDMI_TX_ISFR		(0x3 << 4)
+#define		CCGR2_I2C1			(0x3 << 6)
+#define		CCGR2_I2C2			(0x3 << 8)
+#define		CCGR2_I2C3			(0x3 << 10)
+#define		CCGR2_IIM			(0x3 << 12)
+#define		CCGR2_IOMUX_IPT			(0x3 << 14)
+#define		CCGR2_IPMUX1			(0x3 << 16)
+#define		CCGR2_IPMUX2			(0x3 << 18)
+#define		CCGR2_IPMUX3			(0x3 << 20)
+#define		CCGR2_IPSYNC_IP2APB_TZASC1	(0x3 << 22)
+#define		CCGR2_IPSYNC_IP2APB_TZASC2	(0x3 << 24)
+#define		CCGR2_IPSYNC_VDOA		(0x3 << 26)
 #define	CCM_CCGR3			0x074
+#define		CCGR3_IPU1_IPU			(0x3 << 0)
+#define		CCGR3_IPU1_DI0			(0x3 << 2)
+#define		CCGR3_IPU1_DI1			(0x3 << 4)
+#define		CCGR3_IPU2_IPU			(0x3 << 6)
+#define		CCGR3_IPU2_DI0			(0x3 << 8)
+#define		CCGR3_IPU2_DI1			(0x3 << 10)
+#define		CCGR3_LDB_DI0			(0x3 << 12)
+#define		CCGR3_LDB_DI1			(0x3 << 14)
+#define		CCGR3_MMDC_CORE_ACLK_FAST	(0x3 << 20)
+#define		CCGR3_CG11			(0x3 << 22)
+#define		CCGR3_MMDC_CORE_IPG		(0x3 << 24)
+#define		CCGR3_CG13			(0x3 << 26)
+#define		CCGR3_OCRAM			(0x3 << 28)
 #define	CCM_CCGR4			0x078
+#define		CCGR4_PL301_MX6QFAST1_S133	(0x3 << 8)
+#define		CCGR4_PL301_MX6QPER1_BCH	(0x3 << 12)
+#define		CCGR4_PL301_MX6QPER2_MAIN	(0x3 << 14)
 #define	CCM_CCGR5			0x07C
+#define		CCGR5_SDMA			(0x3 << 6)
+#define		CCGR5_SSI1			(0x3 << 18)
+#define		CCGR5_SSI2			(0x3 << 20)
+#define		CCGR5_SSI3			(0x3 << 22)
+#define		CCGR5_UART			(0x3 << 24)
+#define		CCGR5_UART_SERIAL		(0x3 << 26)
 #define	CCM_CCGR6			0x080
+#define		CCGR6_USBOH3			(0x3 << 0)
+#define		CCGR6_USDHC1			(0x3 << 2)
+#define		CCGR6_USDHC2			(0x3 << 4)
+#define		CCGR6_USDHC3			(0x3 << 6)
+#define		CCGR6_USDHC4			(0x3 << 8)
 #define	CCM_CMEOR			0x088
 
 #endif

Modified: projects/powernv/arm/include/pcb.h
==============================================================================
--- projects/powernv/arm/include/pcb.h	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/include/pcb.h	Tue Nov 17 16:16:18 2015	(r290991)
@@ -52,14 +52,17 @@ struct pcb {
 #define	PCB_OWNFPU	0x00000001
 #define PCB_NOALIGNFLT	0x00000002
 	caddr_t	pcb_onfault;			/* On fault handler */
-#ifdef  ARM_NEW_PMAP
-	uint32_t	pcb_pagedir;		/* TTB0 value */
-#else
-	vm_offset_t	pcb_pagedir;		/* PT hooks */
+	vm_offset_t	pcb_pagedir;		/* TTB0 value */
+	/*
+	 * XXX:
+	 * Variables pcb_pl1vec, pcb_l1vec, pcb_dacr are used solely
+	 * by old PMAP. Keep them here for PCB binary compatibility
+	 * between old and new PMAP.
+	 */
 	uint32_t *pcb_pl1vec;			/* PTR to vector_base L1 entry*/
 	uint32_t pcb_l1vec;			/* Value to stuff on ctx sw */
 	u_int	pcb_dacr;			/* Domain Access Control Reg */
-#endif
+
 	struct vfp_state pcb_vfpstate;          /* VP/NEON state */
 	u_int pcb_vfpcpu;                       /* VP/NEON last cpu */
 } __aligned(8); /*

Modified: projects/powernv/arm/include/pl310.h
==============================================================================
--- projects/powernv/arm/include/pl310.h	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/include/pl310.h	Tue Nov 17 16:16:18 2015	(r290991)
@@ -177,7 +177,6 @@ pl310_write4(struct pl310_softc *sc, bus
 	bus_write_4(sc->sc_mem_res, off, val);
 }
 
-void pl310_print_config(struct pl310_softc *sc);
 void pl310_set_ram_latency(struct pl310_softc *sc, uint32_t which_reg,
     uint32_t read, uint32_t write, uint32_t setup);
 

Modified: projects/powernv/arm/samsung/exynos/exynos5_ehci.c
==============================================================================
--- projects/powernv/arm/samsung/exynos/exynos5_ehci.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/samsung/exynos/exynos5_ehci.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -122,7 +122,7 @@ static device_method_t ehci_methods[] = 
 static driver_t ehci_driver = {
 	"ehci",
 	ehci_methods,
-	sizeof(ehci_softc_t)
+	sizeof(struct exynos_ehci_softc)
 };
 
 static devclass_t ehci_devclass;

Modified: projects/powernv/arm/ti/am335x/am335x_lcd.c
==============================================================================
--- projects/powernv/arm/ti/am335x/am335x_lcd.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/ti/am335x/am335x_lcd.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -800,7 +800,7 @@ done:
 }
 
 static void
-am335x_lcd_hdmi_event(void *arg)
+am335x_lcd_hdmi_event(void *arg, device_t hdmi, int event)
 {
 	struct am335x_lcd_softc *sc;
 	const struct videomode *videomode;
@@ -1001,7 +1001,7 @@ am335x_lcd_attach(device_t dev)
 		am335x_lcd_configure(sc);
 	else
 		sc->sc_hdmi_evh = EVENTHANDLER_REGISTER(hdmi_event,
-		    am335x_lcd_hdmi_event, sc, 0);
+		    am335x_lcd_hdmi_event, sc, EVENTHANDLER_PRI_ANY);
 
 	return (0);
 }

Modified: projects/powernv/arm/ti/am335x/tda19988.c
==============================================================================
--- projects/powernv/arm/ti/am335x/tda19988.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/arm/ti/am335x/tda19988.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -635,7 +635,7 @@ tda19988_read_edid(struct tda19988_softc
 		}
 	}
 
-	EVENTHANDLER_INVOKE(hdmi_event, 0);
+	EVENTHANDLER_INVOKE(hdmi_event, sc->sc_dev, HDMI_EVENT_CONNECTED);
 done:
 	if (sc->sc_version == TDA19988)
 		tda19988_reg_set(sc, TDA_TX4, TX4_PD_RAM);

Modified: projects/powernv/conf/kern.pre.mk
==============================================================================
--- projects/powernv/conf/kern.pre.mk	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/conf/kern.pre.mk	Tue Nov 17 16:16:18 2015	(r290991)
@@ -157,15 +157,15 @@ DTRACE_CFLAGS+=	-I$S/cddl/contrib/openso
 .endif
 DTRACE_CFLAGS+=	-I$S/cddl/contrib/opensolaris/common/util -I$S -DDIS_MEM -DSMP
 DTRACE_ASM_CFLAGS=	-x assembler-with-cpp -DLOCORE ${DTRACE_CFLAGS}
-DTRACE_C=	${CC} -c ${DTRACE_CFLAGS} ${CDDL_CFLAGS}	${WERROR} ${PROF} ${.IMPSRC}
-DTRACE_S=	${CC} -c ${DTRACE_ASM_CFLAGS} ${CDDL_CFLAGS}	${WERROR} ${.IMPSRC}
+DTRACE_C=	${CC} -c ${DTRACE_CFLAGS}	${WERROR} ${PROF} ${.IMPSRC}
+DTRACE_S=	${CC} -c ${DTRACE_ASM_CFLAGS}	${WERROR} ${.IMPSRC}
 
 # Special flags for managing the compat compiles for DTrace/FBT
 FBT_CFLAGS=	-DBUILDING_DTRACE -nostdinc -I$S/cddl/dev/fbt/${MACHINE_CPUARCH} -I$S/cddl/dev/fbt -I$S/cddl/compat/opensolaris -I$S/cddl/contrib/opensolaris/uts/common -I$S ${CDDL_CFLAGS}
 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
 FBT_CFLAGS+=	-I$S/cddl/dev/fbt/x86
 .endif
-FBT_C=		${CC} -c ${FBT_CFLAGS} ${CDDL_CFLAGS}		${WERROR} ${PROF} ${.IMPSRC}
+FBT_C=		${CC} -c ${FBT_CFLAGS}		${WERROR} ${PROF} ${.IMPSRC}
 
 .if ${MK_CTF} != "no"
 NORMAL_CTFCONVERT=	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}

Modified: projects/powernv/dev/ata/chipsets/ata-intel.c
==============================================================================
--- projects/powernv/dev/ata/chipsets/ata-intel.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/ata/chipsets/ata-intel.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -422,7 +422,7 @@ ata_intel_reset(device_t dev)
 		mask |= (1 << smap[1]);
 	pci_write_config(parent, 0x92,
 	    pci_read_config(parent, 0x92, 2) & ~mask, 2);
-	DELAY(10);
+	DELAY(100);
 	pci_write_config(parent, 0x92,
 	    pci_read_config(parent, 0x92, 2) | mask, 2);
 

Modified: projects/powernv/dev/hwpmc/hwpmc_mod.c
==============================================================================
--- projects/powernv/dev/hwpmc/hwpmc_mod.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/hwpmc/hwpmc_mod.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -1282,8 +1282,16 @@ pmc_process_csw_in(struct thread *td)
 		 */
 		if (PMC_TO_MODE(pm) == PMC_MODE_TS) {
 			mtx_pool_lock_spin(pmc_mtxpool, pm);
+
+			/*
+			 * Use the saved value calculated after the most recent
+			 * thread switch out to start this counter.  Reset
+			 * the saved count in case another thread from this
+			 * process switches in before any threads switch out.
+			 */
 			newvalue = PMC_PCPU_SAVED(cpu,ri) =
 			    pp->pp_pmcs[ri].pp_pmcval;
+			pp->pp_pmcs[ri].pp_pmcval = pm->pm_sc.pm_reloadcount;
 			mtx_pool_unlock_spin(pmc_mtxpool, pm);
 		} else {
 			KASSERT(PMC_TO_MODE(pm) == PMC_MODE_TC,
@@ -1431,31 +1439,43 @@ pmc_process_csw_out(struct thread *td)
 
 			pcd->pcd_read_pmc(cpu, adjri, &newvalue);
 
-			tmp = newvalue - PMC_PCPU_SAVED(cpu,ri);
-
-			PMCDBG3(CSW,SWO,1,"cpu=%d ri=%d tmp=%jd", cpu, ri,
-			    tmp);
-
 			if (mode == PMC_MODE_TS) {
+				PMCDBG3(CSW,SWO,1,"cpu=%d ri=%d tmp=%jd (samp)",
+				    cpu, ri, PMC_PCPU_SAVED(cpu,ri) - newvalue);
 
 				/*
 				 * For sampling process-virtual PMCs,
-				 * we expect the count to be
-				 * decreasing as the 'value'
-				 * programmed into the PMC is the
-				 * number of events to be seen till
-				 * the next sampling interrupt.
+				 * newvalue is the number of events to be seen
+				 * until the next sampling interrupt.
+				 * We can just add the events left from this
+				 * invocation to the counter, then adjust
+				 * in case we overflow our range.
+				 *
+				 * (Recall that we reload the counter every
+				 * time we use it.)
 				 */
-				if (tmp < 0)
-					tmp += pm->pm_sc.pm_reloadcount;
 				mtx_pool_lock_spin(pmc_mtxpool, pm);
-				pp->pp_pmcs[ri].pp_pmcval -= tmp;
-				if ((int64_t) pp->pp_pmcs[ri].pp_pmcval <= 0)
-					pp->pp_pmcs[ri].pp_pmcval +=
+
+				pp->pp_pmcs[ri].pp_pmcval += newvalue;
+				if (pp->pp_pmcs[ri].pp_pmcval >
+				    pm->pm_sc.pm_reloadcount)
+					pp->pp_pmcs[ri].pp_pmcval -=
 					    pm->pm_sc.pm_reloadcount;
+				KASSERT(pp->pp_pmcs[ri].pp_pmcval > 0 &&
+				    pp->pp_pmcs[ri].pp_pmcval <=
+				    pm->pm_sc.pm_reloadcount,
+				    ("[pmc,%d] pp_pmcval outside of expected "
+				    "range cpu=%d ri=%d pp_pmcval=%jx "
+				    "pm_reloadcount=%jx", __LINE__, cpu, ri,
+				    pp->pp_pmcs[ri].pp_pmcval,
+				    pm->pm_sc.pm_reloadcount));
 				mtx_pool_unlock_spin(pmc_mtxpool, pm);
 
 			} else {
+				tmp = newvalue - PMC_PCPU_SAVED(cpu,ri);
+
+				PMCDBG3(CSW,SWO,1,"cpu=%d ri=%d tmp=%jd (count)",
+				    cpu, ri, tmp);
 
 				/*
 				 * For counting process-virtual PMCs,

Modified: projects/powernv/dev/isp/isp.c
==============================================================================
--- projects/powernv/dev/isp/isp.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/isp/isp.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -2187,7 +2187,7 @@ isp_fibre_init_2400(ispsoftc_t *isp)
 		size_t amt = 0;
 		uint8_t *off;
 
-		vpinfo.vp_global_options = 0;
+		vpinfo.vp_global_options = ICB2400_VPGOPT_GEN_RIDA;
 		if (ISP_CAP_VP0(isp)) {
 			vpinfo.vp_global_options |= ICB2400_VPGOPT_VP0_DECOUPLE;
 			vpinfo.vp_count = isp->isp_nchan;
@@ -2207,7 +2207,8 @@ isp_fibre_init_2400(ispsoftc_t *isp)
 			ISP_MEMZERO(&pi, sizeof (pi));
 			fcp2 = FCPARAM(isp, chan);
 			if (fcp2->role != ISP_ROLE_NONE) {
-				pi.vp_port_options = ICB2400_VPOPT_ENABLED;
+				pi.vp_port_options = ICB2400_VPOPT_ENABLED |
+				    ICB2400_VPOPT_ENA_SNSLOGIN;
 				if (fcp2->role & ISP_ROLE_INITIATOR)
 					pi.vp_port_options |= ICB2400_VPOPT_INI_ENABLE;
 				if ((fcp2->role & ISP_ROLE_TARGET) == 0)
@@ -2914,16 +2915,7 @@ isp_fclink_test(ispsoftc_t *isp, int cha
 			} else {
 				fcp->isp_fabric_params = 0;
 			}
-			if (chan) {
-				fcp->isp_sns_hdl = NPH_RESERVED - chan;
-				r = isp_plogx(isp, chan, fcp->isp_sns_hdl, SNS_PORT_ID, PLOGX_FLG_CMD_PLOGI | PLOGX_FLG_COND_PLOGI | PLOGX_FLG_SKIP_PRLI, 0);
-				if (r) {
-					isp_prt(isp, ISP_LOGWARN, "%s: Chan %d cannot log into SNS", __func__, chan);
-					return (-1);
-				}
-			} else {
-				fcp->isp_sns_hdl = NPH_SNS_ID;
-			}
+			fcp->isp_sns_hdl = NPH_SNS_ID;
 			r = isp_register_fc4_type_24xx(isp, chan);
 		} else {
 			fcp->isp_sns_hdl = SNS_ID;
@@ -3167,7 +3159,7 @@ fail:
 		 * Don't scan "special" ids.
 		 */
 		if (ISP_CAP_2KLOGIN(isp)) {
-			if (handle >= NPH_RESERVED - isp->isp_nchan)
+			if (handle >= NPH_RESERVED)
 				continue;
 		} else {
 			if (handle >= FL_ID && handle <= SNS_ID)
@@ -4276,7 +4268,7 @@ isp_next_handle(ispsoftc_t *isp, uint16_
 	handle = *ohp;
 	if (ISP_CAP_2KLOGIN(isp)) {
 		minh = 0;
-		maxh = NPH_RESERVED - isp->isp_nchan; /* Reserve for SNS */
+		maxh = NPH_RESERVED - 1;
 	} else {
 		minh = SNS_ID + 1;
 		maxh = NPH_MAX - 1;
@@ -6192,6 +6184,9 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
 static int
 isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *optrp)
 {
+	isp_ridacq_t rid;
+	int chan, c;
+
 	switch (type) {
 	case RQSTYPE_STATUS_CONT:
 		isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
@@ -6199,6 +6194,23 @@ isp_handle_other_response(ispsoftc_t *is
 	case RQSTYPE_MARKER:
 		isp_prt(isp, ISP_LOG_WARN1, "Marker Response");
 		return (1);
+	case RQSTYPE_RPT_ID_ACQ:
+		isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid);
+		if (rid.ridacq_format == 0) {
+			for (chan = 0; chan < isp->isp_nchan; chan++) {
+				fcparam *fcp = FCPARAM(isp, chan);
+				if (fcp->role == ISP_ROLE_NONE)
+					continue;
+				c = (chan == 0) ? 127 : (chan - 1);
+				if (rid.ridacq_map[c / 16] & (1 << (c % 16)))
+					isp_async(isp, ISPASYNC_CHANGE_NOTIFY,
+					    chan, ISPASYNC_CHANGE_OTHER);
+			}
+		} else {
+			isp_async(isp, ISPASYNC_CHANGE_NOTIFY,
+			    rid.ridacq_vp_index, ISPASYNC_CHANGE_OTHER);
+		}
+		return (1);
 	case RQSTYPE_ATIO:
 	case RQSTYPE_CTIO:
 	case RQSTYPE_ENABLE_LUN:
@@ -6219,15 +6231,6 @@ isp_handle_other_response(ispsoftc_t *is
 		}
 #endif
 		/* FALLTHROUGH */
-	case RQSTYPE_RPT_ID_ACQ:
-		if (IS_24XX(isp)) {
-			isp_ridacq_t rid;
-			isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid);
-			if (rid.ridacq_format == 0) {
-			}
-			return (1);
-		}
-		/* FALLTHROUGH */
 	case RQSTYPE_REQUEST:
 	default:
 		ISP_DELAY(100);

Modified: projects/powernv/dev/isp/isp_freebsd.c
==============================================================================
--- projects/powernv/dev/isp/isp_freebsd.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/isp/isp_freebsd.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -4249,16 +4249,9 @@ isp_action(struct cam_sim *sim, union cc
 		break;
 #endif
 	case XPT_RESET_DEV:		/* BDR the specified SCSI device */
-	{
-		struct isp_fc *fc;
-
 		bus = cam_sim_bus(xpt_path_sim(ccb->ccb_h.path));
 		tgt = ccb->ccb_h.target_id;
 		tgt |= (bus << 16);
-		if (IS_FC(isp))
-			fc = ISP_FC_PC(isp, bus);
-		else
-			fc = NULL;
 
 		error = isp_control(isp, ISPCTL_RESET_DEV, bus, tgt);
 		if (error) {
@@ -4269,14 +4262,13 @@ isp_action(struct cam_sim *sim, union cc
 			 * Reference Number, because the target will expect
 			 * that we re-start the CRN at 1 after a reset.
 			 */
-			if (fc != NULL)
-				isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1);
+			if (IS_FC(isp))
+				isp_fcp_reset_crn(isp, bus, tgt, /*tgt_set*/ 1);
 
 			ccb->ccb_h.status = CAM_REQ_CMP;
 		}
 		xpt_done(ccb);
 		break;
-	}
 	case XPT_ABORT:			/* Abort the specified CCB */
 	{
 		union ccb *accb = ccb->cab.abort_ccb;
@@ -4854,7 +4846,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cm
 				isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @ %lu", (unsigned long) time_uptime);
 			}
 		}
-		isp_fcp_reset_crn(fc, /*tgt*/0, /*tgt_set*/ 0);
+		isp_fcp_reset_crn(isp, bus, /*tgt*/0, /*tgt_set*/ 0);
 
 		isp_prt(isp, ISP_LOGINFO, "Chan %d: %s", bus, msg);
 		break;
@@ -4887,7 +4879,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cm
 		if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) &&
 		    (lp->prli_word3 & PRLI_WD3_TARGET_FUNCTION)) {
 			lp->is_target = 1;
-			isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1);
+			isp_fcp_reset_crn(isp, bus, tgt, /*tgt_set*/ 1);
 			isp_make_here(isp, lp, bus, tgt);
 		}
 		if ((FCPARAM(isp, bus)->role & ISP_ROLE_TARGET) &&
@@ -4917,11 +4909,11 @@ changed:
 		     (lp->new_prli_word3 & PRLI_WD3_TARGET_FUNCTION))) {
 			lp->is_target = !lp->is_target;
 			if (lp->is_target) {
-				isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1);
+				isp_fcp_reset_crn(isp, bus, tgt, /*tgt_set*/ 1);
 				isp_make_here(isp, lp, bus, tgt);
 			} else {
 				isp_make_gone(isp, lp, bus, tgt);
-				isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1);
+				isp_fcp_reset_crn(isp, bus, tgt, /*tgt_set*/ 1);
 			}
 		}
 		if (lp->is_initiator !=
@@ -5490,23 +5482,23 @@ isp_common_dmateardown(ispsoftc_t *isp, 
  * (needed for events like a LIP).
  */
 void
-isp_fcp_reset_crn(struct isp_fc *fc, uint32_t tgt, int tgt_set)
+isp_fcp_reset_crn(ispsoftc_t *isp, int chan, uint32_t tgt, int tgt_set)
 {
-	int i;
+	struct isp_fc *fc = ISP_FC_PC(isp, chan);
 	struct isp_nexus *nxp;
+	int i;
 
 	if (tgt_set == 0)
-		isp_prt(fc->isp, ISP_LOG_SANCFG, "resetting CRN on all targets");
+		isp_prt(isp, ISP_LOGDEBUG0,
+		    "Chan %d resetting CRN on all targets", chan);
 	else
-		isp_prt(fc->isp, ISP_LOG_SANCFG, "resetting CRN target %u", tgt);
+		isp_prt(isp, ISP_LOGDEBUG0,
+		    "Chan %d resetting CRN on target %u", chan, tgt);
 
 	for (i = 0; i < NEXUS_HASH_WIDTH; i++) {
-		nxp = fc->nexus_hash[i];
-		while (nxp) {
-			if ((tgt_set != 0) && (tgt == nxp->tgt))
+		for (nxp = fc->nexus_hash[i]; nxp != NULL; nxp = nxp->next) {
+			if (tgt_set == 0 || tgt == nxp->tgt)
 				nxp->crnseed = 0;
-
-			nxp = nxp->next;
 		}
 	}
 }
@@ -5550,15 +5542,11 @@ isp_fcp_next_crn(ispsoftc_t *isp, uint8_
 		nxp->next = fc->nexus_hash[idx];
 		fc->nexus_hash[idx] = nxp;
 	}
-	if (nxp) {
-		if (nxp->crnseed == 0)
-			nxp->crnseed = 1;
-		if (cmd)
-			PISP_PCMD(cmd)->crn = nxp->crnseed;
-		*crnp = nxp->crnseed++;
-		return (0);
-	}
-	return (-1);
+	if (nxp->crnseed == 0)
+		nxp->crnseed = 1;
+	PISP_PCMD(cmd)->crn = nxp->crnseed;
+	*crnp = nxp->crnseed++;
+	return (0);
 }
 
 /*

Modified: projects/powernv/dev/isp/isp_freebsd.h
==============================================================================
--- projects/powernv/dev/isp/isp_freebsd.h	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/isp/isp_freebsd.h	Tue Nov 17 16:16:18 2015	(r290991)
@@ -745,7 +745,7 @@ int isp_fc_scratch_acquire(ispsoftc_t *,
 int isp_mstohz(int);
 void isp_platform_intr(void *);
 void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t);
-void isp_fcp_reset_crn(struct isp_fc *, uint32_t, int);
+void isp_fcp_reset_crn(ispsoftc_t *, int, uint32_t, int);
 int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *);
 
 /*

Modified: projects/powernv/dev/isp/isp_library.c
==============================================================================
--- projects/powernv/dev/isp/isp_library.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/isp/isp_library.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -604,7 +604,8 @@ isp_fc_enable_vp(ispsoftc_t *isp, int ch
 	vp->vp_mod_cnt = 1;
 	vp->vp_mod_idx0 = chan;
 	vp->vp_mod_cmd = VP_MODIFY_ENA;
-	vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED;
+	vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED |
+	    ICB2400_VPOPT_ENA_SNSLOGIN;
 	if (fcp->role & ISP_ROLE_INITIATOR) {
 		vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE;
 	}
@@ -1733,6 +1734,10 @@ isp_get_ridacq(ispsoftc_t *isp, isp_rida
 	int i;
 	isp_get_hdr(isp, &src->ridacq_hdr, &dst->ridacq_hdr);
 	ISP_IOXGET_32(isp, &src->ridacq_handle, dst->ridacq_handle);
+	ISP_IOXGET_8(isp, &src->ridacq_vp_acquired, dst->ridacq_vp_acquired);
+	ISP_IOXGET_8(isp, &src->ridacq_vp_setup, dst->ridacq_vp_setup);
+	ISP_IOXGET_8(isp, &src->ridacq_vp_index, dst->ridacq_vp_index);
+	ISP_IOXGET_8(isp, &src->ridacq_vp_status, dst->ridacq_vp_status);
 	ISP_IOXGET_16(isp, &src->ridacq_vp_port_lo, dst->ridacq_vp_port_lo);
 	ISP_IOXGET_8(isp, &src->ridacq_vp_port_hi, dst->ridacq_vp_port_hi);
 	ISP_IOXGET_8(isp, &src->ridacq_format, dst->ridacq_format);
@@ -1742,17 +1747,6 @@ isp_get_ridacq(ispsoftc_t *isp, isp_rida
 	for (i = 0; i < sizeof (src->ridacq_reserved1) / sizeof (src->ridacq_reserved1[0]); i++) {
 		ISP_IOXGET_16(isp, &src->ridacq_reserved1[i], dst->ridacq_reserved1[i]);
 	}
-	if (dst->ridacq_format == 0) {
-		ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_acquired, dst->un.type0.ridacq_vp_acquired);
-		ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_setup, dst->un.type0.ridacq_vp_setup);
-		ISP_IOXGET_16(isp, &src->un.type0.ridacq_reserved0, dst->un.type0.ridacq_reserved0);
-	} else if (dst->ridacq_format == 1) {
-		ISP_IOXGET_16(isp, &src->un.type1.ridacq_vp_count, dst->un.type1.ridacq_vp_count);
-		ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_index, dst->un.type1.ridacq_vp_index);
-		ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_status, dst->un.type1.ridacq_vp_status);
-	} else {
-		ISP_MEMZERO(&dst->un, sizeof (dst->un));
-	}
 }
 
 

Modified: projects/powernv/dev/isp/ispmbox.h
==============================================================================
--- projects/powernv/dev/isp/ispmbox.h	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/isp/ispmbox.h	Tue Nov 17 16:16:18 2015	(r290991)
@@ -1485,18 +1485,10 @@ typedef struct {
 typedef struct {
 	isphdr_t	ridacq_hdr;
 	uint32_t	ridacq_handle;
-	union {
-		struct {
-			uint8_t		ridacq_vp_acquired;
-			uint8_t		ridacq_vp_setup;
-			uint16_t	ridacq_reserved0;
-		} type0;	/* type 0 */
-		struct {
-			uint16_t	ridacq_vp_count;
-			uint8_t		ridacq_vp_index;
-			uint8_t		ridacq_vp_status;
-		} type1;	/* type 1 */
-	} un;
+	uint8_t		ridacq_vp_acquired;
+	uint8_t		ridacq_vp_setup;
+	uint8_t		ridacq_vp_index;
+	uint8_t		ridacq_vp_status;
 	uint16_t	ridacq_vp_port_lo;
 	uint8_t		ridacq_vp_port_hi;
 	uint8_t		ridacq_format;		/* 0 or 1 */
@@ -1506,8 +1498,11 @@ typedef struct {
 
 #define	RIDACQ_STS_COMPLETE	0
 #define	RIDACQ_STS_UNACQUIRED	1
-#define	RIDACQ_STS_CHANGED	20
-
+#define	RIDACQ_STS_CHANGED	2
+#define	RIDACQ_STS_SNS_TIMEOUT	3
+#define	RIDACQ_STS_SNS_REJECTED	4
+#define	RIDACQ_STS_SCR_TIMEOUT	5
+#define	RIDACQ_STS_SCR_REJECTED	6
 
 /*
  * Simple Name Server Data Structures

Modified: projects/powernv/dev/re/if_re.c
==============================================================================
--- projects/powernv/dev/re/if_re.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/re/if_re.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -1696,13 +1696,13 @@ re_attach(device_t dev)
 #ifdef DEV_NETMAP
 	re_netmap_attach(sc);
 #endif /* DEV_NETMAP */
+
 #ifdef RE_DIAG
 	/*
 	 * Perform hardware diagnostic on the original RTL8169.
 	 * Some 32-bit cards were incorrectly wired and would
 	 * malfunction if plugged into a 64-bit slot.
 	 */
-
 	if (hwrev == RL_HWREV_8169) {
 		error = re_diag(sc);
 		if (error) {
@@ -2939,6 +2939,7 @@ re_start_locked(struct ifnet *ifp)
 		return;
 	}
 #endif /* DEV_NETMAP */
+
 	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
 	    IFF_DRV_RUNNING || (sc->rl_flags & RL_FLAG_LINK) == 0)
 		return;
@@ -3851,6 +3852,11 @@ re_setwol(struct rl_softc *sc)
 			    CSR_READ_1(sc, RL_GPIO) & ~0x01);
 	}
 	if ((ifp->if_capenable & IFCAP_WOL) != 0) {
+		if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) {
+			/* Disable RXDV gate. */
+			CSR_WRITE_4(sc, RL_MISC, CSR_READ_4(sc, RL_MISC) &
+			    ~0x00080000);
+		}
 		re_set_rxmode(sc);
 		if ((sc->rl_flags & RL_FLAG_WOL_MANLINK) != 0)
 			re_set_linkspeed(sc);

Modified: projects/powernv/dev/vmware/vmxnet3/if_vmx.c
==============================================================================
--- projects/powernv/dev/vmware/vmxnet3/if_vmx.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/vmware/vmxnet3/if_vmx.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -510,6 +510,13 @@ vmxnet3_check_version(struct vmxnet3_sof
 	return (0);
 }
 
+static int
+trunc_powerof2(int val)
+{
+
+	return (1U << (fls(val) - 1));
+}
+
 static void
 vmxnet3_initial_config(struct vmxnet3_softc *sc)
 {
@@ -520,14 +527,14 @@ vmxnet3_initial_config(struct vmxnet3_so
 		nqueue = VMXNET3_DEF_TX_QUEUES;
 	if (nqueue > mp_ncpus)
 		nqueue = mp_ncpus;
-	sc->vmx_max_ntxqueues = nqueue;
+	sc->vmx_max_ntxqueues = trunc_powerof2(nqueue);
 
 	nqueue = vmxnet3_tunable_int(sc, "rxnqueue", vmxnet3_default_rxnqueue);
 	if (nqueue > VMXNET3_MAX_RX_QUEUES || nqueue < 1)
 		nqueue = VMXNET3_DEF_RX_QUEUES;
 	if (nqueue > mp_ncpus)
 		nqueue = mp_ncpus;
-	sc->vmx_max_nrxqueues = nqueue;
+	sc->vmx_max_nrxqueues = trunc_powerof2(nqueue);
 
 	if (vmxnet3_tunable_int(sc, "mq_disable", vmxnet3_mq_disable)) {
 		sc->vmx_max_nrxqueues = 1;

Modified: projects/powernv/dev/wpi/if_wpi.c
==============================================================================
--- projects/powernv/dev/wpi/if_wpi.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/dev/wpi/if_wpi.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -3791,8 +3791,8 @@ wpi_set_pslevel(struct wpi_softc *sc, ui
 	if (level != 0)	/* not CAM */
 		cmd.flags |= htole16(WPI_PS_ALLOW_SLEEP);
 	/* Retrieve PCIe Active State Power Management (ASPM). */
-	reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
-	if (!(reg & 0x1))	/* L0s Entry disabled. */
+	reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + PCIER_LINK_CTL, 1);
+	if (!(reg & PCIEM_LINK_CTL_ASPMC_L0S))	/* L0s Entry disabled. */
 		cmd.flags |= htole16(WPI_PS_PCI_PMGT);
 
 	cmd.rxtimeout = htole32(pmgt->rxtimeout * IEEE80211_DUR_TU);
@@ -5126,9 +5126,9 @@ wpi_apm_init(struct wpi_softc *sc)
 	WPI_SETBITS(sc, WPI_DBG_HPET_MEM, 0xffff0000);
 
 	/* Retrieve PCIe Active State Power Management (ASPM). */
-	reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
+	reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + PCIER_LINK_CTL, 1);
 	/* Workaround for HW instability in PCIe L0->L0s->L1 transition. */
-	if (reg & 0x02)	/* L1 Entry enabled. */
+	if (reg & PCIEM_LINK_CTL_ASPMC_L1)	/* L1 Entry enabled. */
 		WPI_SETBITS(sc, WPI_GIO, WPI_GIO_L0S_ENA);
 	else
 		WPI_CLRBITS(sc, WPI_GIO, WPI_GIO_L0S_ENA);

Modified: projects/powernv/fs/nfsclient/nfs_clvfsops.c
==============================================================================
--- projects/powernv/fs/nfsclient/nfs_clvfsops.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/fs/nfsclient/nfs_clvfsops.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -216,10 +216,12 @@ newnfs_iosize(struct nfsmount *nmp)
 	 * Calculate the size used for io buffers.  Use the larger
 	 * of the two sizes to minimise nfs requests but make sure
 	 * that it is at least one VM page to avoid wasting buffer
-	 * space.
+	 * space.  It must also be at least NFS_DIRBLKSIZ, since
+	 * that is the buffer size used for directories.
 	 */
 	iosize = imax(nmp->nm_rsize, nmp->nm_wsize);
 	iosize = imax(iosize, PAGE_SIZE);
+	iosize = imax(iosize, NFS_DIRBLKSIZ);
 	nmp->nm_mountp->mnt_stat.f_iosize = iosize;
 	return (iosize);
 }

Modified: projects/powernv/kern/kern_dump.c
==============================================================================
--- projects/powernv/kern/kern_dump.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/kern/kern_dump.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -66,10 +66,10 @@ static size_t fragsz;
 
 struct dump_pa dump_map[DUMPSYS_MD_PA_NPAIRS];
 
+#if !defined(__powerpc__) && !defined(__sparc__)
 void
 dumpsys_gen_pa_init(void)
 {
-#if !defined(__sparc__) && !defined(__powerpc__)
 	int n, idx;
 
 	bzero(dump_map, sizeof(dump_map));
@@ -80,8 +80,8 @@ dumpsys_gen_pa_init(void)
 		dump_map[n].pa_start = dump_avail[idx];
 		dump_map[n].pa_size = dump_avail[idx + 1] - dump_avail[idx];
 	}
-#endif
 }
+#endif
 
 struct dump_pa *
 dumpsys_gen_pa_next(struct dump_pa *mdp)
@@ -99,20 +99,24 @@ dumpsys_gen_pa_next(struct dump_pa *mdp)
 void
 dumpsys_gen_wbinv_all(void)
 {
+
 }
 
 void
 dumpsys_gen_unmap_chunk(vm_paddr_t pa __unused, size_t chunk __unused,
     void *va __unused)
 {
+
 }
 
+#if !defined(__sparc__)
 int
 dumpsys_gen_write_aux_headers(struct dumperinfo *di)
 {
 
 	return (0);
 }
+#endif
 
 int
 dumpsys_buf_write(struct dumperinfo *di, char *ptr, size_t sz)
@@ -233,6 +237,7 @@ dumpsys_foreach_chunk(dumpsys_callback_t
 	return (seqnr);
 }
 
+#if !defined(__sparc__)
 static off_t fileofs;
 
 static int
@@ -391,3 +396,4 @@ dumpsys_generic(struct dumperinfo *di)
 		printf("\n** DUMP FAILED (ERROR %d) **\n", error);
 	return (error);
 }
+#endif

Modified: projects/powernv/kern/kern_jail.c
==============================================================================
--- projects/powernv/kern/kern_jail.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/kern/kern_jail.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -4480,15 +4480,20 @@ SYSCTL_JAIL_PARAM(_allow_mount, zfs, CTL
 #ifdef RACCT
 void
 prison_racct_foreach(void (*callback)(struct racct *racct,
-    void *arg2, void *arg3), void *arg2, void *arg3)
+    void *arg2, void *arg3), void (*pre)(void), void (*post)(void),
+    void *arg2, void *arg3)
 {
 	struct prison_racct *prr;
 
 	ASSERT_RACCT_ENABLED();
 
 	sx_slock(&allprison_lock);
+	if (pre != NULL)
+		(pre)();
 	LIST_FOREACH(prr, &allprison_racct, prr_next)
 		(callback)(prr->prr_racct, arg2, arg3);
+	if (post != NULL)
+		(post)();
 	sx_sunlock(&allprison_lock);
 }
 

Modified: projects/powernv/kern/kern_loginclass.c
==============================================================================
--- projects/powernv/kern/kern_loginclass.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/kern/kern_loginclass.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -234,12 +234,17 @@ sys_setloginclass(struct thread *td, str
 
 void
 loginclass_racct_foreach(void (*callback)(struct racct *racct,
-    void *arg2, void *arg3), void *arg2, void *arg3)
+    void *arg2, void *arg3), void (*pre)(void), void (*post)(void),
+    void *arg2, void *arg3)
 {
 	struct loginclass *lc;
 
 	rw_rlock(&loginclasses_lock);
+	if (pre != NULL)
+		(pre)();
 	LIST_FOREACH(lc, &loginclasses, lc_next)
 		(callback)(lc->lc_racct, arg2, arg3);
+	if (post != NULL)
+		(post)();
 	rw_runlock(&loginclasses_lock);
 }

Modified: projects/powernv/kern/kern_racct.c
==============================================================================
--- projects/powernv/kern/kern_racct.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/kern/kern_racct.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -1156,6 +1156,7 @@ racct_decay_resource(struct racct *racct
 	int64_t r_old, r_new;
 
 	ASSERT_RACCT_ENABLED();
+	mtx_assert(&racct_lock, MA_OWNED);
 
 	resource = *(int *)res;
 	r_old = racct->r_resources[resource];
@@ -1164,9 +1165,21 @@ racct_decay_resource(struct racct *racct
 	if (r_old <= 0)
 		return;
 
-	mtx_lock(&racct_lock);
 	r_new = r_old * RACCT_DECAY_FACTOR / FSCALE;
 	racct->r_resources[resource] = r_new;
+}
+
+static void
+racct_decay_pre(void)
+{
+
+	mtx_lock(&racct_lock);
+}
+
+static void
+racct_decay_post(void)
+{
+
 	mtx_unlock(&racct_lock);
 }
 
@@ -1176,9 +1189,12 @@ racct_decay(int resource)
 
 	ASSERT_RACCT_ENABLED();
 
-	ui_racct_foreach(racct_decay_resource, &resource, NULL);
-	loginclass_racct_foreach(racct_decay_resource, &resource, NULL);
-	prison_racct_foreach(racct_decay_resource, &resource, NULL);
+	ui_racct_foreach(racct_decay_resource, racct_decay_pre,
+	    racct_decay_post, &resource, NULL);
+	loginclass_racct_foreach(racct_decay_resource, racct_decay_pre,
+	    racct_decay_post, &resource, NULL);
+	prison_racct_foreach(racct_decay_resource, racct_decay_pre,
+	    racct_decay_post, &resource, NULL);
 }
 
 static void

Modified: projects/powernv/kern/kern_rctl.c
==============================================================================
--- projects/powernv/kern/kern_rctl.c	Tue Nov 17 16:09:26 2015	(r290990)
+++ projects/powernv/kern/kern_rctl.c	Tue Nov 17 16:16:18 2015	(r290991)
@@ -1150,16 +1150,29 @@ rctl_rule_add(struct rctl_rule *rule)
 }
 
 static void
+rctl_rule_pre_callback(void)
+{
+
+	rw_wlock(&rctl_lock);
+}
+
+static void
+rctl_rule_post_callback(void)
+{
+
+	rw_wunlock(&rctl_lock);
+}
+
+static void
 rctl_rule_remove_callback(struct racct *racct, void *arg2, void *arg3)
 {
 	struct rctl_rule *filter = (struct rctl_rule *)arg2;
 	int found = 0;
 
 	ASSERT_RACCT_ENABLED();
+	rw_assert(&rctl_lock, RA_WLOCKED);
 
-	rw_wlock(&rctl_lock);
 	found += rctl_racct_remove_rules(racct, filter);
-	rw_wunlock(&rctl_lock);
 
 	*((int *)arg3) += found;
 }
@@ -1186,12 +1199,15 @@ rctl_rule_remove(struct rctl_rule *filte
 		return (ESRCH);
 	}
 
-	loginclass_racct_foreach(rctl_rule_remove_callback, filter,
-	    (void *)&found);
-	ui_racct_foreach(rctl_rule_remove_callback, filter,
-	    (void *)&found);
-	prison_racct_foreach(rctl_rule_remove_callback, filter,
-	    (void *)&found);
+	loginclass_racct_foreach(rctl_rule_remove_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,
+	    filter, (void *)&found);
+	ui_racct_foreach(rctl_rule_remove_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,
+	    filter, (void *)&found);
+	prison_racct_foreach(rctl_rule_remove_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,
+	    filter, (void *)&found);
 
 	sx_assert(&allproc_lock, SA_LOCKED);
 	rw_wlock(&rctl_lock);
@@ -1425,15 +1441,14 @@ rctl_get_rules_callback(struct racct *ra
 	struct sbuf *sb = (struct sbuf *)arg3;
 
 	ASSERT_RACCT_ENABLED();
+	rw_assert(&rctl_lock, RA_LOCKED);
 
-	rw_rlock(&rctl_lock);
 	LIST_FOREACH(link, &racct->r_rule_links, rrl_next) {
 		if (!rctl_rule_matches(link->rrl_rule, filter))
 			continue;
 		rctl_rule_to_sbuf(sb, link->rrl_rule);
 		sbuf_printf(sb, ",");
 	}
-	rw_runlock(&rctl_lock);
 }
 
 int
@@ -1494,9 +1509,15 @@ sys_rctl_get_rules(struct thread *td, st
 		rw_runlock(&rctl_lock);
 	}
 
-	loginclass_racct_foreach(rctl_get_rules_callback, filter, sb);
-	ui_racct_foreach(rctl_get_rules_callback, filter, sb);
-	prison_racct_foreach(rctl_get_rules_callback, filter, sb);
+	loginclass_racct_foreach(rctl_get_rules_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,
+	    filter, sb);
+	ui_racct_foreach(rctl_get_rules_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,
+	    filter, sb);
+	prison_racct_foreach(rctl_get_rules_callback,
+	    rctl_rule_pre_callback, rctl_rule_post_callback,

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201511171616.tAHGGJP6073798>