Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Move



details:   https://anonhg.NetBSD.org/src/rev/dc562f87f0f2
branches:  trunk
changeset: 324119:dc562f87f0f2
user:      maxv <maxv%NetBSD.org@localhost>
date:      Mon Jul 16 06:18:31 2018 +0000

description:
Move
        arch/x86/x86/tprof_pmi.c
        arch/x86/x86/tprof_amdpmi.c
into
        dev/tprof/tprof_x86_intel.c
        dev/tprof/tprof_x86_amd.c

diffstat:

 sys/arch/x86/conf/files.x86       |    5 +-
 sys/arch/x86/x86/tprof_amdpmi.c   |  272 --------------------------------------
 sys/arch/x86/x86/tprof_pmi.c      |  268 -------------------------------------
 sys/dev/tprof/tprof_x86_amd.c     |  272 ++++++++++++++++++++++++++++++++++++++
 sys/dev/tprof/tprof_x86_intel.c   |  268 +++++++++++++++++++++++++++++++++++++
 sys/modules/tprof_amdpmi/Makefile |    6 +-
 sys/modules/tprof_pmi/Makefile    |    6 +-
 7 files changed, 547 insertions(+), 550 deletions(-)

diffs (truncated from 1153 to 300 lines):

diff -r 78de1c198645 -r dc562f87f0f2 sys/arch/x86/conf/files.x86
--- a/sys/arch/x86/conf/files.x86       Mon Jul 16 02:36:39 2018 +0000
+++ b/sys/arch/x86/conf/files.x86       Mon Jul 16 06:18:31 2018 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.x86,v 1.102 2018/07/13 09:37:32 maxv Exp $
+#      $NetBSD: files.x86,v 1.103 2018/07/16 06:18:31 maxv Exp $
 
 # options for MP configuration through the MP spec
 defflag opt_mpbios.h MPBIOS MPDEBUG MPBIOS_SCANPCI
@@ -149,9 +149,6 @@
 
 file   arch/x86/x86/vga_post.c         vga_post
 
-file   arch/x86/x86/tprof_pmi.c        tprof_pmi
-file   arch/x86/x86/tprof_amdpmi.c     tprof_amdpmi
-
 file   arch/x86/pci/pci_machdep.c      pci
 #file  arch/x86/pci/pci_ranges.c       pci
 file   arch/x86/pci/pci_intr_machdep.c pci
diff -r 78de1c198645 -r dc562f87f0f2 sys/arch/x86/x86/tprof_amdpmi.c
--- a/sys/arch/x86/x86/tprof_amdpmi.c   Mon Jul 16 02:36:39 2018 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*     $NetBSD: tprof_amdpmi.c,v 1.9 2018/07/15 06:14:21 maxv Exp $    */
-
-/*
- * Copyright (c) 2018 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Maxime Villard.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Copyright (c)2008,2009 YAMAMOTO Takashi,
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tprof_amdpmi.c,v 1.9 2018/07/15 06:14:21 maxv Exp $");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-
-#include <sys/cpu.h>
-#include <sys/xcall.h>
-
-#include <dev/tprof/tprof.h>
-
-#include <uvm/uvm.h>           /* VM_MIN_KERNEL_ADDRESS */
-
-#include <x86/nmi.h>
-
-#include <machine/cpufunc.h>
-#include <machine/cputypes.h>  /* CPUVENDOR_* */
-#include <machine/cpuvar.h>    /* cpu_vendor */
-#include <machine/i82489reg.h>
-#include <machine/i82489var.h>
-
-#define        NCTRS   4
-
-#define        PERFEVTSEL(i)           (0xc0010000 + (i))
-#define        PERFCTR(i)              (0xc0010004 + (i))
-
-#define        PESR_EVENT_MASK_LO      __BITS(0, 7)
-#define        PESR_UNIT_MASK          __BITS(8, 15)
-#define        PESR_USR                __BIT(16)
-#define        PESR_OS                 __BIT(17)
-#define        PESR_E                  __BIT(18)
-#define        PESR_PC                 __BIT(19)
-#define        PESR_INT                __BIT(20)
-                               /* bit 21 reserved */
-#define        PESR_EN                 __BIT(22)
-#define        PESR_INV                __BIT(23)
-#define        PESR_COUNTER_MASK       __BITS(24, 31)
-#define        PESR_EVENT_MASK_HI      __BITS(32, 35)
-                               /* bit 36-39 reserved */
-#define        PESR_GO                 __BIT(40)
-#define        PESR_HO                 __BIT(41)
-                               /* bit 42-63 reserved */
-
-/*
- * Documents:
- * http://support.amd.com/TechDocs/32559.pdf
- * http://developer.amd.com/wordpress/media/2012/10/Basic_Performance_Measurements.pdf
- */
-
-static int ctrno = 0;
-static uint64_t counter_val = 5000000;
-static uint64_t counter_reset_val;
-static uint32_t amd_lapic_saved[MAXCPUS];
-static nmi_handler_t *amd_nmi_handle;
-static tprof_param_t amd_param;
-
-static void
-tprof_amd_start_cpu(void *arg1, void *arg2)
-{
-       struct cpu_info * const ci = curcpu();
-       uint64_t pesr;
-       uint64_t event_lo;
-       uint64_t event_hi;
-
-       event_hi = amd_param.p_event >> 8;
-       event_lo = amd_param.p_event & 0xff;
-       pesr =
-           ((amd_param.p_flags & TPROF_PARAM_USER) ? PESR_USR : 0) |
-           ((amd_param.p_flags & TPROF_PARAM_KERN) ? PESR_OS : 0) |
-           PESR_INT |
-           __SHIFTIN(event_lo, PESR_EVENT_MASK_LO) |
-           __SHIFTIN(event_hi, PESR_EVENT_MASK_HI) |
-           __SHIFTIN(0, PESR_COUNTER_MASK) |
-           __SHIFTIN(amd_param.p_unit, PESR_UNIT_MASK);
-
-       wrmsr(PERFCTR(ctrno), counter_reset_val);
-       wrmsr(PERFEVTSEL(ctrno), pesr);
-
-       amd_lapic_saved[cpu_index(ci)] = lapic_readreg(LAPIC_PCINT);
-       lapic_writereg(LAPIC_PCINT, LAPIC_DLMODE_NMI);
-
-       wrmsr(PERFEVTSEL(ctrno), pesr | PESR_EN);
-}
-
-static void
-tprof_amd_stop_cpu(void *arg1, void *arg2)
-{
-       struct cpu_info * const ci = curcpu();
-
-       wrmsr(PERFEVTSEL(ctrno), 0);
-
-       lapic_writereg(LAPIC_PCINT, amd_lapic_saved[cpu_index(ci)]);
-}
-
-static int
-tprof_amd_nmi(const struct trapframe *tf, void *dummy)
-{
-       tprof_frame_info_t tfi;
-       uint64_t ctr;
-
-       KASSERT(dummy == NULL);
-
-       /* check if it's for us */
-       ctr = rdmsr(PERFCTR(ctrno));
-       if ((ctr & (UINT64_C(1) << 63)) != 0) { /* check if overflowed */
-               /* not ours */
-               return 0;
-       }
-
-       /* record a sample */
-#if defined(__x86_64__)
-       tfi.tfi_pc = tf->tf_rip;
-#else
-       tfi.tfi_pc = tf->tf_eip;
-#endif
-       tfi.tfi_inkernel = tfi.tfi_pc >= VM_MIN_KERNEL_ADDRESS;
-       tprof_sample(NULL, &tfi);
-
-       /* reset counter */
-       wrmsr(PERFCTR(ctrno), counter_reset_val);
-
-       return 1;
-}
-
-static uint64_t
-tprof_amd_estimate_freq(void)
-{
-       uint64_t cpufreq = curcpu()->ci_data.cpu_cc_freq;
-       uint64_t freq = 10000;
-
-       counter_val = cpufreq / freq;
-       if (counter_val == 0) {
-               counter_val = UINT64_C(4000000000) / freq;
-       }
-       return freq;
-}
-
-static uint32_t
-tprof_amd_ident(void)
-{
-       struct cpu_info *ci = curcpu();
-
-       if (cpu_vendor != CPUVENDOR_AMD) {
-               return TPROF_IDENT_NONE;
-       }
-
-       switch (CPUID_TO_FAMILY(ci->ci_signature)) {
-       case 0x10:
-               return TPROF_IDENT_AMD_GENERIC;
-       }
-
-       return TPROF_IDENT_NONE;
-}
-
-static int
-tprof_amd_start(const tprof_param_t *param)
-{
-       uint64_t xc;
-
-       if (tprof_amd_ident() == TPROF_IDENT_NONE) {
-               return ENOTSUP;
-       }
-
-       KASSERT(amd_nmi_handle == NULL);
-       amd_nmi_handle = nmi_establish(tprof_amd_nmi, NULL);
-
-       counter_reset_val = - counter_val + 1;
-       memcpy(&amd_param, param, sizeof(*param));
-
-       xc = xc_broadcast(0, tprof_amd_start_cpu, NULL, NULL);
-       xc_wait(xc);
-
-       return 0;
-}
-
-static void
-tprof_amd_stop(const tprof_param_t *param)
-{
-       uint64_t xc;
-
-       xc = xc_broadcast(0, tprof_amd_stop_cpu, NULL, NULL);
-       xc_wait(xc);
-
-       KASSERT(amd_nmi_handle != NULL);
-       nmi_disestablish(amd_nmi_handle);
-       amd_nmi_handle = NULL;
-}
-
-static const tprof_backend_ops_t tprof_amd_ops = {
-       .tbo_estimate_freq = tprof_amd_estimate_freq,
-       .tbo_ident = tprof_amd_ident,
-       .tbo_start = tprof_amd_start,
-       .tbo_stop = tprof_amd_stop,
-};
-
-MODULE(MODULE_CLASS_DRIVER, tprof_amdpmi, "tprof");
-
-static int
-tprof_amdpmi_modcmd(modcmd_t cmd, void *arg)
-{
-
-       switch (cmd) {
-       case MODULE_CMD_INIT:
-               return tprof_backend_register("tprof_amd", &tprof_amd_ops,
-                   TPROF_BACKEND_VERSION);
-
-       case MODULE_CMD_FINI:
-               return tprof_backend_unregister("tprof_amd");
-
-       default:
-               return ENOTTY;
-       }
-}
diff -r 78de1c198645 -r dc562f87f0f2 sys/arch/x86/x86/tprof_pmi.c
--- a/sys/arch/x86/x86/tprof_pmi.c      Mon Jul 16 02:36:39 2018 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,268 +0,0 @@
-/*     $NetBSD: tprof_pmi.c,v 1.16 2018/07/15 06:14:21 maxv Exp $      */



Home | Main Index | Thread Index | Old Index