From owner-svn-src-all@FreeBSD.ORG Wed Jan 15 04:16:46 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 5FCC2C54; Wed, 15 Jan 2014 04:16:46 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 40AEA1275; Wed, 15 Jan 2014 04:16:46 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0F4GkCf034250; Wed, 15 Jan 2014 04:16:46 GMT (envelope-from jhibbits@svn.freebsd.org) Received: (from jhibbits@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0F4GjKQ034248; Wed, 15 Jan 2014 04:16:45 GMT (envelope-from jhibbits@svn.freebsd.org) Message-Id: <201401150416.s0F4GjKQ034248@svn.freebsd.org> From: Justin Hibbits Date: Wed, 15 Jan 2014 04:16:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r260667 - stable/10/sys/powerpc/aim X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jan 2014 04:16:46 -0000 Author: jhibbits Date: Wed Jan 15 04:16:45 2014 New Revision: 260667 URL: http://svnweb.freebsd.org/changeset/base/260667 Log: MFC r256542,r256581 Move the PMC handling to the first level interrupt handler where it belongs. Also add the pmc_hook use, to handle callchain tracing. Modified: stable/10/sys/powerpc/aim/interrupt.c stable/10/sys/powerpc/aim/trap.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/powerpc/aim/interrupt.c ============================================================================== --- stable/10/sys/powerpc/aim/interrupt.c Wed Jan 15 03:57:41 2014 (r260666) +++ stable/10/sys/powerpc/aim/interrupt.c Wed Jan 15 04:16:45 2014 (r260667) @@ -31,6 +31,8 @@ * Interrupts are dispatched to here from locore asm */ +#include "opt_hwpmc_hooks.h" + #include /* RCS ID & Copyright macro defns */ #include @@ -43,6 +45,9 @@ #include #include #include +#ifdef HWPMC_HOOKS +#include +#endif #include #include #include @@ -96,6 +101,16 @@ powerpc_interrupt(struct trapframe *fram atomic_subtract_int(&td->td_intr_nesting_level, 1); critical_exit(); break; +#ifdef HWPMC_HOOKS + case EXC_PERF: + critical_enter(); + KASSERT(pmc_intr != NULL, ("Performance exception, but no handler!")); + (*pmc_intr)(PCPU_GET(cpuid), framep); + if (pmc_hook && (PCPU_GET(curthread)->td_pflags & TDP_CALLCHAIN)) + pmc_hook(PCPU_GET(curthread), PMC_FN_USER_CALLCHAIN, framep); + critical_exit(); + break; +#endif default: /* Re-enable interrupts if applicable. */ Modified: stable/10/sys/powerpc/aim/trap.c ============================================================================== --- stable/10/sys/powerpc/aim/trap.c Wed Jan 15 03:57:41 2014 (r260666) +++ stable/10/sys/powerpc/aim/trap.c Wed Jan 15 04:16:45 2014 (r260667) @@ -34,7 +34,6 @@ #include __FBSDID("$FreeBSD$"); -#include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" #include @@ -52,9 +51,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#ifdef HWPMC_HOOKS -#include -#endif #include @@ -195,14 +191,6 @@ trap(struct trapframe *frame) CTR3(KTR_TRAP, "trap: %s type=%s (%s)", td->td_name, trapname(type), user ? "user" : "kernel"); -#ifdef HWPMC_HOOKS - if (type == EXC_PERF && (pmc_intr != NULL)) { - (*pmc_intr)(PCPU_GET(cpuid), frame); - if (user) - userret(td, frame); - return; - } -#endif #ifdef KDTRACE_HOOKS /* * A trap can occur while DTrace executes a probe. Before @@ -292,7 +280,7 @@ trap(struct trapframe *frame) case EXC_PGM: /* Identify the trap reason */ if (frame->srr1 & EXC_PGM_TRAP) - sig = SIGTRAP; + sig = SIGTRAP; else if (ppc_instr_emulate(frame) == 0) frame->srr0 += 4; else