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...
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Nov 17 16:16:22 UTC 2015
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 ***
More information about the svn-src-projects
mailing list