Bug fixes:
- Initialize variables before use. - Remove a KASSERT() that could falsely trigger if there are other sources of NMIs in the system. Efficiency tweak: - When checking PMCs that overflowed, ignore PMCs that were not configured for sampling.
This commit is contained in:
parent
d193ecc9a6
commit
8d8b174004
@ -1491,17 +1491,18 @@ core_intr(int cpu, struct trapframe *tf)
|
|||||||
PMCDBG(MDP,INT, 1, "cpu=%d tf=0x%p um=%d", cpu, (void *) tf,
|
PMCDBG(MDP,INT, 1, "cpu=%d tf=0x%p um=%d", cpu, (void *) tf,
|
||||||
TRAPF_USERMODE(tf));
|
TRAPF_USERMODE(tf));
|
||||||
|
|
||||||
|
found_interrupt = 0;
|
||||||
cc = core_pcpu[cpu];
|
cc = core_pcpu[cpu];
|
||||||
|
|
||||||
for (ri = 0; ri < core_iap_npmc; ri++) {
|
for (ri = 0; ri < core_iap_npmc; ri++) {
|
||||||
|
|
||||||
if (!iap_pmc_has_overflowed(ri))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ((pm = cc->pc_corepmcs[ri].phw_pmc) == NULL ||
|
if ((pm = cc->pc_corepmcs[ri].phw_pmc) == NULL ||
|
||||||
!PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
|
!PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!iap_pmc_has_overflowed(ri))
|
||||||
|
continue;
|
||||||
|
|
||||||
found_interrupt = 1;
|
found_interrupt = 1;
|
||||||
|
|
||||||
if (pm->pm_state != PMC_STATE_RUNNING)
|
if (pm->pm_state != PMC_STATE_RUNNING)
|
||||||
@ -1560,7 +1561,9 @@ core2_intr(int cpu, struct trapframe *tf)
|
|||||||
PMCDBG(MDP,INT, 1, "cpu=%d intrstatus=%jx", cpu,
|
PMCDBG(MDP,INT, 1, "cpu=%d intrstatus=%jx", cpu,
|
||||||
(uintmax_t) intrstatus);
|
(uintmax_t) intrstatus);
|
||||||
|
|
||||||
|
found_interrupt = 0;
|
||||||
cc = core_pcpu[cpu];
|
cc = core_pcpu[cpu];
|
||||||
|
|
||||||
KASSERT(cc != NULL, ("[core,%d] null pcpu", __LINE__));
|
KASSERT(cc != NULL, ("[core,%d] null pcpu", __LINE__));
|
||||||
|
|
||||||
cc->pc_globalctrl &= ~intrenable;
|
cc->pc_globalctrl &= ~intrenable;
|
||||||
@ -1574,7 +1577,6 @@ core2_intr(int cpu, struct trapframe *tf)
|
|||||||
IA_GLOBAL_STATUS_FLAG_OVFBUF |
|
IA_GLOBAL_STATUS_FLAG_OVFBUF |
|
||||||
IA_GLOBAL_STATUS_FLAG_CONDCHG);
|
IA_GLOBAL_STATUS_FLAG_CONDCHG);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look for interrupts from fixed function PMCs.
|
* Look for interrupts from fixed function PMCs.
|
||||||
*/
|
*/
|
||||||
@ -1634,9 +1636,6 @@ core2_intr(int cpu, struct trapframe *tf)
|
|||||||
wrmsr(IAP_PMC0 + n, v);
|
wrmsr(IAP_PMC0 + n, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
KASSERT(found_interrupt,
|
|
||||||
("[core,%d] no interrupting PMCs were found", __LINE__));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reenable all non-stalled PMCs.
|
* Reenable all non-stalled PMCs.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user