Date: Sat, 15 Aug 2009 08:02:35 GMT From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 167353 for review Message-ID: <200908150802.n7F82ZKA020933@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167353 Change 167353 by trasz@trasz_anger on 2009/08/15 08:01:52 IFC and a small world build fix. Affected files ... .. //depot/projects/soc2009/trasz_limits/release/Makefile#3 integrate .. //depot/projects/soc2009/trasz_limits/release/svnbranch.awk#1 branch .. //depot/projects/soc2009/trasz_limits/sys/amd64/amd64/local_apic.c#5 integrate .. //depot/projects/soc2009/trasz_limits/sys/amd64/include/apicvar.h#3 integrate .. //depot/projects/soc2009/trasz_limits/sys/amd64/include/pmc_mdep.h#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/conf/options#10 integrate .. //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_core.c#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_piv.c#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_ppro.c#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_x86.c#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/i386/i386/local_apic.c#5 integrate .. //depot/projects/soc2009/trasz_limits/sys/i386/include/apicvar.h#5 integrate .. //depot/projects/soc2009/trasz_limits/sys/i386/include/pmc_mdep.h#2 integrate .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_mutex.c#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_rwlock.c#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_sx.c#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/kern/vfs_cache.c#5 integrate .. //depot/projects/soc2009/trasz_limits/sys/net/if.c#10 integrate .. //depot/projects/soc2009/trasz_limits/sys/net/vnet.h#10 integrate .. //depot/projects/soc2009/trasz_limits/sys/netinet/ip_output.c#9 integrate .. //depot/projects/soc2009/trasz_limits/sys/netinet/ipfw/ip_fw2.c#6 integrate .. //depot/projects/soc2009/trasz_limits/sys/netinet/sctp_os_bsd.h#5 integrate .. //depot/projects/soc2009/trasz_limits/sys/nfsclient/nfs_subs.c#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/sys/lock.h#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/sys/systm.h#4 integrate .. //depot/projects/soc2009/trasz_limits/sys/ufs/ffs/ffs_softdep.c#4 integrate .. //depot/projects/soc2009/trasz_limits/usr.bin/id/id.c#5 edit .. //depot/projects/soc2009/trasz_limits/usr.sbin/Makefile#7 integrate .. //depot/projects/soc2009/trasz_limits/usr.sbin/arp/arp.c#3 integrate .. //depot/projects/soc2009/trasz_limits/usr.sbin/mfiutil/mfi_drive.c#2 integrate .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/Makefile#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_cam.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_cmd.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_config.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_drive.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_evt.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_show.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mpt_volume.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mptutil.8#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mptutil.c#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/mptutil/mptutil.h#1 branch .. //depot/projects/soc2009/trasz_limits/usr.sbin/sysinstall/devices.c#4 integrate Differences ... ==== //depot/projects/soc2009/trasz_limits/release/Makefile#3 (text+ko) ==== @@ -1,7 +1,8 @@ -# $FreeBSD: src/release/Makefile,v 1.943 2009/06/28 08:59:46 blackend Exp $ +# $FreeBSD: src/release/Makefile,v 1.944 2009/08/14 20:35:42 jhb Exp $ # # make release [BUILDNAME=somename] CHROOTDIR=/some/dir CVSROOT=/cvs/dir \ -# [RELEASETAG=tag] +# [RELEASETAG=tag] [SVNROOT=svn://svn.freebsd.org/base] \ +# [SVNBRANCH=some/branch] # # Where "/some/dir" is the pathname of a directory on a some filesystem with # at least 1000MB of free space, "somename" is what you want the release to @@ -9,6 +10,11 @@ # which CVS "tag" name should be used when checking out the sources to build # the release (default is HEAD). # +# Please note the support for building from SVN is preliminary and there +# are still questions about things like how to handle updates of +# /usr/src on production systems (csup(1) replacement). It is a work +# in progress and may change as the other issues get worked out. +# # Please note: the md(4) driver must be present in the kernel # (either by being compiled in or available as a kld(4) module), # otherwise the target 'release.8' and possibly others will fail. @@ -49,12 +55,25 @@ # To add other options to the CVS command, set #CVSARGS="-lfq" # -# To prefix the cvs command +# To prefix the CVS command #CVSPREFIX="/usr/bin/time" # # Where the CVS repository is #CVSROOT="/home/ncvs" # +# To add other options to the Subversion subcommands (co,up), set +#SVNCMDARGS="-r '{ 01/01/2002 00:00:00 UTC }'" +# +# To prefix the Subversion command +#SVNPREFIX="/usr/bin/time" +# +# Where the Subversion repository is +#SVNROOT=svn://svn.freebsd.org/base +# +# Subversion branch to build for src. If this is not set then it is +# automatically computed from RELEASETAG. +#SVNBRANCH=stable/7 +# # Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we # are building an official release. Otherwise, we are building for # a branch. @@ -68,6 +87,16 @@ .endif .endif +# Determine the Subversion source branch that corresponds to the requested +# RELEASETAG. +.if !defined(SVNBRANCH) +.if defined(RELEASETAG) +SVNBRANCH!= echo "${RELEASETAG}" | awk -f ${.CURDIR}/svnbranch.awk +.else +SVNBRANCH= head +.endif +.endif + # If you want to pass flags to the world build such as -j X, use # WORLD_FLAGS. Similarly, you can specify make flags for kernel # builds via KERNEL_FLAGS. @@ -341,8 +370,17 @@ WORLDDIR?= ${.CURDIR}/.. release rerelease: -.if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT) - @echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false +.if !defined(CHROOTDIR) || !defined(BUILDNAME) + @echo "To make a release you must set CHROOTDIR and BUILDNAME" && false +.endif +.if !defined(NOPORTSATALL) && !defined(EXTPORTSDIR) && !defined(CVSROOT) + @echo "Building ports requires CVSROOT or EXTPORTSDIR" && false +.endif +.if !defined(NODOC) && !defined(EXTDOCDIR) && !defined(CVSROOT) + @echo "Building docs requires CVSROOT or EXTDOCDIR" && false +.endif +.if !defined(EXTSRCDIR) && !defined(CVSROOT) && !defined(SVNROOT) + @echo "The source tree requires SVNROOT, CVSROOT, or EXTSRCDIR" && false .endif .if defined(NOPORTSATALL) && !defined(NODOC) @echo "Ports are required for building the release docs. Either set NODOC or" @@ -387,6 +425,10 @@ .if defined(EXTSRCDIR) cd ${CHROOTDIR}/usr && \ cp -R -H ${EXTSRCDIR} src +.elif defined(SVNROOT) + cd ${CHROOTDIR}/usr && \ + ${SVNPREFIX} svn co ${SVNCMDARGS} ${SVNROOT}/${SVNBRANCH} \ + ${RELEASESRCMODULE} .else cd ${CHROOTDIR}/usr && \ ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ @@ -432,7 +474,10 @@ .endif .if make(rerelease) .if !defined(RELEASENOUPDATE) && !defined(EXTSRCDIR) -.if !defined(RELEASETAG) +.if defined(SVNROOT) + cd ${CHROOTDIR}/usr/src && ${SVNPREFIX} svn switch ${SVNCMDARGS} \ + ${SVNROOT}/${SVNBRANCH} +.elif !defined(RELEASETAG) cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ update ${CVSCMDARGS} -P -d -A .else ==== //depot/projects/soc2009/trasz_limits/sys/amd64/amd64/local_apic.c#5 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.59 2009/08/13 17:09:45 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.60 2009/08/14 21:05:08 jhb Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -123,7 +123,7 @@ { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* LINT1: NMI */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_TIMER_INT }, /* Timer */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_ERROR_INT }, /* Error */ - { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ + { 1, 1, 1, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_THERMAL_INT }, /* Thermal */ }; @@ -305,11 +305,9 @@ lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0); lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1); -#ifdef HWPMC_HOOKS /* Program the PMC LVT entry if present. */ if (maxlvt >= LVT_PMC) lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); -#endif /* Program timer LVT and setup handler. */ lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer); @@ -332,6 +330,88 @@ intr_restore(eflags); } +void +lapic_reenable_pmc(void) +{ +#ifdef HWPMC_HOOKS + uint32_t value; + + value = lapic->lvt_pcint; + value &= ~APIC_LVT_M; + lapic->lvt_pcint = value; +#endif +} + +#ifdef HWPMC_HOOKS +static void +lapic_update_pmc(void *dummy) +{ + struct lapic *la; + + la = &lapics[lapic_id()]; + lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); +} +#endif + +int +lapic_enable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return (0); + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return (0); + + lvts[LVT_PMC].lvt_masked = 0; + +#ifdef SMP + /* + * If hwpmc was loaded at boot time then the APs may not be + * started yet. In that case, don't forward the request to + * them as they will program the lvt when they start. + */ + if (smp_started) + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); + else +#endif + lapic_update_pmc(NULL); + return (1); +#else + return (0); +#endif +} + +void +lapic_disable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return; + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return; + + lvts[LVT_PMC].lvt_masked = 1; + +#ifdef SMP + /* The APs should always be started when hwpmc is unloaded. */ + KASSERT(mp_ncpus == 1 || smp_started, ("hwpmc unloaded too early")); +#endif + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); +#endif +} + /* * Called by cpu_initclocks() on the BSP to setup the local APIC timer so * that it can drive hardclock, statclock, and profclock. This function ==== //depot/projects/soc2009/trasz_limits/sys/amd64/include/apicvar.h#3 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.30 2009/08/13 17:09:45 attilio Exp $ + * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.31 2009/08/14 21:05:08 jhb Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -201,7 +201,9 @@ int ioapic_set_smi(void *cookie, u_int pin); void lapic_create(u_int apic_id, int boot_cpu); void lapic_disable(void); +void lapic_disable_pmc(void); void lapic_dump(const char *str); +int lapic_enable_pmc(void); void lapic_eoi(void); u_int lapic_error(void); int lapic_id(void); @@ -212,6 +214,7 @@ int lapic_ipi_wait(int delay); void lapic_handle_intr(int vector, struct trapframe *frame); void lapic_handle_timer(struct trapframe *frame); +void lapic_reenable_pmc(void); void lapic_set_logical_id(u_int apic_id, u_int cluster, u_int cluster_id); int lapic_set_lvt_mask(u_int apic_id, u_int lvt, u_char masked); int lapic_set_lvt_mode(u_int apic_id, u_int lvt, u_int32_t mode); ==== //depot/projects/soc2009/trasz_limits/sys/amd64/include/pmc_mdep.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/pmc_mdep.h,v 1.8 2008/11/27 09:00:47 jkoshy Exp $ + * $FreeBSD: src/sys/amd64/include/pmc_mdep.h,v 1.9 2009/08/14 21:05:08 jhb Exp $ */ /* Machine dependent interfaces */ @@ -115,7 +115,6 @@ */ void start_exceptions(void), end_exceptions(void); -void pmc_x86_lapic_enable_pmc_interrupt(void); struct pmc_mdep *pmc_amd_initialize(void); void pmc_amd_finalize(struct pmc_mdep *_md); ==== //depot/projects/soc2009/trasz_limits/sys/conf/options#10 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.687 2009/07/14 22:48:30 rwatson Exp $ +# $FreeBSD: src/sys/conf/options,v 1.688 2009/08/14 22:41:39 zec Exp $ # # On the handling of kernel options # @@ -821,8 +821,9 @@ TDMA_TXRATE_11NA_DEFAULT opt_tdma.h TDMA_TXRATE_11NG_DEFAULT opt_tdma.h -# Virtualize the network stack +# Network stack virtualization options VIMAGE opt_global.h +VNET_DEBUG opt_global.h # Common Flash Interface (CFI) options CFI_SUPPORT_STRATAFLASH opt_cfi.h ==== //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_core.c#2 (text+ko) ==== @@ -29,13 +29,16 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_core.c,v 1.4 2009/01/27 07:29:37 jeff Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_core.c,v 1.5 2009/08/14 21:05:08 jhb Exp $"); #include <sys/param.h> +#include <sys/bus.h> #include <sys/pmc.h> #include <sys/pmckern.h> #include <sys/systm.h> +#include <machine/intr_machdep.h> +#include <machine/apicvar.h> #include <machine/cpu.h> #include <machine/cpufunc.h> #include <machine/specialreg.h> @@ -1771,7 +1774,7 @@ } if (found_interrupt) - pmc_x86_lapic_enable_pmc_interrupt(); + lapic_reenable_pmc(); atomic_add_int(found_interrupt ? &pmc_stats.pm_intr_processed : &pmc_stats.pm_intr_ignored, 1); @@ -1895,7 +1898,7 @@ (uintmax_t) rdmsr(IA_GLOBAL_OVF_CTRL)); if (found_interrupt) - pmc_x86_lapic_enable_pmc_interrupt(); + lapic_reenable_pmc(); atomic_add_int(found_interrupt ? &pmc_stats.pm_intr_processed : &pmc_stats.pm_intr_ignored, 1); ==== //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_piv.c#2 (text+ko) ==== @@ -29,9 +29,10 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_piv.c,v 1.20 2008/11/26 19:25:13 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_piv.c,v 1.21 2009/08/14 21:05:08 jhb Exp $"); #include <sys/param.h> +#include <sys/bus.h> #include <sys/lock.h> #include <sys/mutex.h> #include <sys/pmc.h> @@ -39,6 +40,8 @@ #include <sys/smp.h> #include <sys/systm.h> +#include <machine/intr_machdep.h> +#include <machine/apicvar.h> #include <machine/cpu.h> #include <machine/cpufunc.h> #include <machine/cputypes.h> @@ -1537,7 +1540,7 @@ */ if (did_interrupt) - pmc_x86_lapic_enable_pmc_interrupt(); + lapic_reenable_pmc(); atomic_add_int(did_interrupt ? &pmc_stats.pm_intr_processed : &pmc_stats.pm_intr_ignored, 1); ==== //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_ppro.c#2 (text+ko) ==== @@ -29,9 +29,10 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_ppro.c,v 1.16 2008/12/02 10:46:35 jkoshy Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_ppro.c,v 1.17 2009/08/14 21:05:08 jhb Exp $"); #include <sys/param.h> +#include <sys/bus.h> #include <sys/lock.h> #include <sys/mutex.h> #include <sys/pmc.h> @@ -39,6 +40,8 @@ #include <sys/smp.h> #include <sys/systm.h> +#include <machine/intr_machdep.h> +#include <machine/apicvar.h> #include <machine/cpu.h> #include <machine/cpufunc.h> #include <machine/cputypes.h> @@ -718,7 +721,7 @@ * unmasked after a PMC interrupt. */ if (retval) - pmc_x86_lapic_enable_pmc_interrupt(); + lapic_reenable_pmc(); atomic_add_int(retval ? &pmc_stats.pm_intr_processed : &pmc_stats.pm_intr_ignored, 1); ==== //depot/projects/soc2009/trasz_limits/sys/dev/hwpmc/hwpmc_x86.c#2 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_x86.c,v 1.11 2008/11/26 19:25:13 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_x86.c,v 1.12 2009/08/14 21:05:08 jhb Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -39,7 +39,8 @@ #include <machine/cpu.h> #include <machine/cputypes.h> -#include <machine/apicreg.h> +#include <machine/intr_machdep.h> +#include <machine/apicvar.h> #include <machine/pmc_mdep.h> #include <machine/md_var.h> @@ -47,18 +48,6 @@ #include <vm/vm_param.h> #include <vm/pmap.h> -extern volatile lapic_t *lapic; - -void -pmc_x86_lapic_enable_pmc_interrupt(void) -{ - uint32_t value; - - value = lapic->lvt_pcint; - value &= ~APIC_LVT_M; - lapic->lvt_pcint = value; -} - /* * Attempt to walk a user call stack using a too-simple algorithm. * In the general case we need unwind information associated with @@ -252,16 +241,15 @@ struct pmc_mdep *md; /* determine the CPU kind */ - md = NULL; if (cpu_vendor_id == CPU_VENDOR_AMD) md = pmc_amd_initialize(); else if (cpu_vendor_id == CPU_VENDOR_INTEL) md = pmc_intel_initialize(); else - KASSERT(0, ("[x86,%d] Unknown vendor", __LINE__)); + return (NULL); /* disallow sampling if we do not have an LAPIC */ - if (md != NULL && lapic == NULL) + if (!lapic_enable_pmc()) for (i = 1; i < md->pmd_nclass; i++) md->pmd_classdep[i].pcd_caps &= ~PMC_CAP_INTERRUPT; @@ -271,6 +259,8 @@ void pmc_md_finalize(struct pmc_mdep *md) { + + lapic_disable_pmc(); if (cpu_vendor_id == CPU_VENDOR_AMD) pmc_amd_finalize(md); else if (cpu_vendor_id == CPU_VENDOR_INTEL) ==== //depot/projects/soc2009/trasz_limits/sys/i386/i386/local_apic.c#5 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.62 2009/08/13 17:09:45 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.63 2009/08/14 21:05:08 jhb Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -123,7 +123,7 @@ { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* LINT1: NMI */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_TIMER_INT }, /* Timer */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_ERROR_INT }, /* Error */ - { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ + { 1, 1, 1, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_THERMAL_INT }, /* Thermal */ }; @@ -307,11 +307,9 @@ lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0); lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1); -#ifdef HWPMC_HOOKS /* Program the PMC LVT entry if present. */ if (maxlvt >= LVT_PMC) lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); -#endif /* Program timer LVT and setup handler. */ lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer); @@ -334,6 +332,88 @@ intr_restore(eflags); } +void +lapic_reenable_pmc(void) +{ +#ifdef HWPMC_HOOKS + uint32_t value; + + value = lapic->lvt_pcint; + value &= ~APIC_LVT_M; + lapic->lvt_pcint = value; +#endif +} + +#ifdef HWPMC_HOOKS +static void +lapic_update_pmc(void *dummy) +{ + struct lapic *la; + + la = &lapics[lapic_id()]; + lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); +} +#endif + +int +lapic_enable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return (0); + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return (0); + + lvts[LVT_PMC].lvt_masked = 0; + +#ifdef SMP + /* + * If hwpmc was loaded at boot time then the APs may not be + * started yet. In that case, don't forward the request to + * them as they will program the lvt when they start. + */ + if (smp_started) + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); + else +#endif + lapic_update_pmc(NULL); + return (1); +#else + return (0); +#endif +} + +void +lapic_disable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return; + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return; + + lvts[LVT_PMC].lvt_masked = 1; + +#ifdef SMP + /* The APs should always be started when hwpmc is unloaded. */ + KASSERT(mp_ncpus == 1 || smp_started, ("hwpmc unloaded too early")); +#endif + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); +#endif +} + /* * Called by cpu_initclocks() on the BSP to setup the local APIC timer so * that it can drive hardclock, statclock, and profclock. This function ==== //depot/projects/soc2009/trasz_limits/sys/i386/include/apicvar.h#5 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/i386/include/apicvar.h,v 1.33 2009/08/13 17:09:45 attilio Exp $ + * $FreeBSD: src/sys/i386/include/apicvar.h,v 1.34 2009/08/14 21:05:08 jhb Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -230,7 +230,9 @@ int ioapic_set_smi(void *cookie, u_int pin); void lapic_create(u_int apic_id, int boot_cpu); void lapic_disable(void); +void lapic_disable_pmc(void); void lapic_dump(const char *str); +int lapic_enable_pmc(void); void lapic_eoi(void); u_int lapic_error(void); int lapic_id(void); @@ -241,6 +243,7 @@ int lapic_ipi_wait(int delay); void lapic_handle_intr(int vector, struct trapframe *frame); void lapic_handle_timer(struct trapframe *frame); +void lapic_reenable_pmc(void); void lapic_set_logical_id(u_int apic_id, u_int cluster, u_int cluster_id); int lapic_set_lvt_mask(u_int apic_id, u_int lvt, u_char masked); int lapic_set_lvt_mode(u_int apic_id, u_int lvt, u_int32_t mode); ==== //depot/projects/soc2009/trasz_limits/sys/i386/include/pmc_mdep.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/i386/include/pmc_mdep.h,v 1.10 2008/11/27 09:00:47 jkoshy Exp $ + * $FreeBSD: src/sys/i386/include/pmc_mdep.h,v 1.11 2009/08/14 21:05:08 jhb Exp $ */ #ifndef _MACHINE_PMC_MDEP_H @@ -150,7 +150,6 @@ */ void start_exceptions(void), end_exceptions(void); -void pmc_x86_lapic_enable_pmc_interrupt(void); struct pmc_mdep *pmc_amd_initialize(void); void pmc_amd_finalize(struct pmc_mdep *_md); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_mutex.c#4 (text+ko) ==== @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_mutex.c,v 1.213 2009/05/29 14:03:34 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_mutex.c,v 1.214 2009/08/14 21:46:54 bz Exp $"); #include "opt_adaptive_mutexes.h" #include "opt_ddb.h" @@ -783,6 +783,8 @@ MPASS((opts & ~(MTX_SPIN | MTX_QUIET | MTX_RECURSE | MTX_NOWITNESS | MTX_DUPOK | MTX_NOPROFILE)) == 0); + ASSERT_ATOMIC_LOAD(m->mtx_lock, ("%s: mtx_lock not aligned for %s: %p", + __func__, name, &m->mtx_lock)); #ifdef MUTEX_DEBUG /* Diagnostic and error correction */ ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_rwlock.c#4 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_rwlock.c,v 1.48 2009/06/02 13:03:35 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_rwlock.c,v 1.49 2009/08/14 21:46:54 bz Exp $"); #include "opt_ddb.h" #include "opt_kdtrace.h" @@ -174,6 +174,8 @@ MPASS((opts & ~(RW_DUPOK | RW_NOPROFILE | RW_NOWITNESS | RW_QUIET | RW_RECURSE)) == 0); + ASSERT_ATOMIC_LOAD(rw->rw_lock, ("%s: rw_lock not aligned for %s: %p", + __func__, name, &rw->rw_lock)); flags = LO_UPGRADABLE; if (opts & RW_DUPOK) ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_sx.c#4 (text+ko) ==== @@ -41,7 +41,7 @@ #include "opt_no_adaptive_sx.h" #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.67 2009/06/02 13:03:35 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.68 2009/08/14 21:46:54 bz Exp $"); #include <sys/param.h> #include <sys/ktr.h> @@ -205,6 +205,8 @@ MPASS((opts & ~(SX_QUIET | SX_RECURSE | SX_NOWITNESS | SX_DUPOK | SX_NOPROFILE | SX_NOADAPTIVE)) == 0); + ASSERT_ATOMIC_LOAD(sx->sx_lock, ("%s: sx_lock not aligned for %s: %p", + __func__, description, &sx->sx_lock)); flags = LO_SLEEPABLE | LO_UPGRADABLE; if (opts & SX_DUPOK) ==== //depot/projects/soc2009/trasz_limits/sys/kern/vfs_cache.c#5 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/vfs_cache.c,v 1.158 2009/06/21 19:21:01 kib Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/vfs_cache.c,v 1.159 2009/08/14 10:57:28 kib Exp $"); #include "opt_kdtrace.h" #include "opt_ktrace.h" @@ -416,7 +416,8 @@ if (dvp->v_cache_dd->nc_flag & NCF_ISDOTDOT) cache_zap(dvp->v_cache_dd); dvp->v_cache_dd = NULL; - goto unlock; + CACHE_WUNLOCK(); + return (0); } if (dvp->v_cache_dd->nc_flag & NCF_ISDOTDOT) *vpp = dvp->v_cache_dd->nc_vp; ==== //depot/projects/soc2009/trasz_limits/sys/net/if.c#10 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)if.c 8.5 (Berkeley) 1/9/95 - * $FreeBSD: src/sys/net/if.c,v 1.359 2009/08/01 19:26:27 rwatson Exp $ + * $FreeBSD: src/sys/net/if.c,v 1.360 2009/08/14 22:46:45 zec Exp $ */ #include "opt_compat.h" @@ -920,7 +920,7 @@ /* Make sure the named iface does not exists in the dst. prison/vnet. */ /* XXX Lock interfaces to avoid races. */ - CURVNET_SET(pr->pr_vnet); + CURVNET_SET_QUIET(pr->pr_vnet); difp = ifunit(ifname); CURVNET_RESTORE(); if (difp != NULL) { ==== //depot/projects/soc2009/trasz_limits/sys/net/vnet.h#10 (text+ko) ==== @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/net/vnet.h,v 1.27 2009/08/13 10:26:34 bz Exp $ + * $FreeBSD: src/sys/net/vnet.h,v 1.28 2009/08/14 22:41:39 zec Exp $ */ /*- @@ -107,9 +107,6 @@ * Various macros -- get and set the current network stack, but also * assertions. */ -#ifdef INVARIANTS -#define VNET_DEBUG -#endif #ifdef VNET_DEBUG #define VNET_ASSERT(condition) \ if (!(condition)) { \ ==== //depot/projects/soc2009/trasz_limits/sys/netinet/ip_output.c#9 (text+ko) ==== @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/ip_output.c,v 1.314 2009/08/01 19:26:27 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/ip_output.c,v 1.315 2009/08/14 23:44:59 qingli Exp $"); #include "opt_ipfw.h" #include "opt_ipsec.h" @@ -53,6 +53,7 @@ #include <sys/ucred.h> #include <net/if.h> +#include <net/if_llatbl.h> #include <net/netisr.h> #include <net/pfil.h> #include <net/route.h> @@ -201,9 +202,12 @@ if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 || dst->sin_family != AF_INET || dst->sin_addr.s_addr != ip->ip_dst.s_addr)) { - if (!nortfree) + if (!nortfree) { RTFREE(ro->ro_rt); + LLE_FREE(ro->ro_lle); + } ro->ro_rt = (struct rtentry *)NULL; + ro->ro_lle = (struct llentry *)NULL; } #ifdef IPFIREWALL_FORWARD if (ro->ro_rt == NULL && fwd_tag == NULL) { ==== //depot/projects/soc2009/trasz_limits/sys/netinet/ipfw/ip_fw2.c#6 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/ipfw/ip_fw2.c,v 1.11 2009/08/01 19:26:27 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/ipfw/ip_fw2.c,v 1.12 2009/08/14 10:09:45 julian Exp $"); #define DEB(x) #define DDB(x) x @@ -2057,7 +2057,7 @@ dst_ip, htons(dst_port), wildcard, NULL); if (pcb != NULL) { - *uc = crhold(inp->inp_cred); + *uc = crhold(pcb->inp_cred); *ugid_lookupp = 1; } INP_INFO_RUNLOCK(pi); ==== //depot/projects/soc2009/trasz_limits/sys/netinet/sctp_os_bsd.h#5 (text+ko) ==== @@ -28,7 +28,7 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_os_bsd.h,v 1.51 2009/08/01 19:26:27 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_os_bsd.h,v 1.52 2009/08/14 22:43:25 zec Exp $"); #ifndef __sctp_os_bsd_h__ #define __sctp_os_bsd_h__ /* @@ -78,6 +78,10 @@ #include <netinet/ip_icmp.h> #include <netinet/icmp_var.h> +#ifdef VIMAGE +#error "SCTP is not yet compatible with VIMAGE." +#endif + #ifdef IPSEC #include <netipsec/ipsec.h> #include <netipsec/key.h> ==== //depot/projects/soc2009/trasz_limits/sys/nfsclient/nfs_subs.c#4 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_subs.c,v 1.163 2009/06/30 19:03:27 dfr Exp $"); +__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_subs.c,v 1.164 2009/08/14 10:59:17 kib Exp $"); /* * These functions support the macros and help fiddle mbuf chains for @@ -409,28 +409,25 @@ nfs_upgrade_vnlock(struct vnode *vp) { int old_lock; - - if ((old_lock = VOP_ISLOCKED(vp)) != LK_EXCLUSIVE) { - if (old_lock == LK_SHARED) { - /* Upgrade to exclusive lock, this might block */ - vn_lock(vp, LK_UPGRADE | LK_RETRY); - } else { - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); - } + + ASSERT_VOP_LOCKED(vp, "nfs_upgrade_vnlock"); + old_lock = VOP_ISLOCKED(vp); + if (old_lock != LK_EXCLUSIVE) { + KASSERT(old_lock == LK_SHARED, + ("nfs_upgrade_vnlock: wrong old_lock %d", old_lock)); + /* Upgrade to exclusive lock, this might block */ + vn_lock(vp, LK_UPGRADE | LK_RETRY); } - return old_lock; + return (old_lock); } void nfs_downgrade_vnlock(struct vnode *vp, int old_lock) { if (old_lock != LK_EXCLUSIVE) { - if (old_lock == LK_SHARED) { - /* Downgrade from exclusive lock, this might block */ - vn_lock(vp, LK_DOWNGRADE); - } else { - VOP_UNLOCK(vp, 0); - } + KASSERT(old_lock == LK_SHARED, ("wrong old_lock %d", old_lock)); + /* Downgrade from exclusive lock. */ + vn_lock(vp, LK_DOWNGRADE | LK_RETRY); } } ==== //depot/projects/soc2009/trasz_limits/sys/sys/lock.h#4 (text+ko) ==== @@ -26,7 +26,7 @@ * SUCH DAMAGE. * * from BSDI $Id: mutex.h,v 2.7.2.35 2000/04/27 03:10:26 cp Exp $ - * $FreeBSD: src/sys/sys/lock.h,v 1.78 2009/06/21 09:01:12 rdivacky Exp $ + * $FreeBSD: src/sys/sys/lock.h,v 1.79 2009/08/14 10:57:57 kib Exp $ */ #ifndef _SYS_LOCK_H_ @@ -155,16 +155,16 @@ #define LOCK_LOG_LOCK(opname, lo, flags, recurse, file, line) do { \ if (LOCK_LOG_TEST((lo), (flags))) \ - CTR5(KTR_LOCK, opname " (%s) %s r = %d at %s:%d", \ + CTR6(KTR_LOCK, opname " (%s) %s %p r = %d at %s:%d", \ LOCK_CLASS(lo)->lc_name, (lo)->lo_name, \ - (u_int)(recurse), (file), (line)); \ + (lo), (u_int)(recurse), (file), (line)); \ } while (0) #define LOCK_LOG_TRY(opname, lo, flags, result, file, line) do { \ if (LOCK_LOG_TEST((lo), (flags))) \ - CTR5(KTR_LOCK, "TRY_" opname " (%s) %s result=%d at %s:%d",\ + CTR6(KTR_LOCK, "TRY_" opname " (%s) %s %p result=%d at %s:%d",\ LOCK_CLASS(lo)->lc_name, (lo)->lo_name, \ - (u_int)(result), (file), (line)); \ + (lo), (u_int)(result), (file), (line)); \ } while (0) #define LOCK_LOG_INIT(lo, flags) do { \ ==== //depot/projects/soc2009/trasz_limits/sys/sys/systm.h#4 (text+ko) ==== @@ -32,7 +32,7 @@ * SUCH DAMAGE. * * @(#)systm.h 8.7 (Berkeley) 3/29/95 >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908150802.n7F82ZKA020933>