mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 16:46:23 +08:00
sparc64: Implement a real set_perf_counter_pending().
When the perf counter subsystem needs to reschedule work out from an NMI, it invokes set_perf_counter_pending(). This triggers a non-NMI irq which should invoke perf_counter_do_pending(). Currently this won't trigger because sparc64 won't trigger the perf counter subsystem from NMIs, but when the HW counter support is added it will. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2d0740c456
commit
5686f9c3d6
@ -1,7 +1,7 @@
|
||||
#ifndef __ASM_SPARC_PERF_COUNTER_H
|
||||
#define __ASM_SPARC_PERF_COUNTER_H
|
||||
|
||||
static inline void set_perf_counter_pending(void) { }
|
||||
extern void set_perf_counter_pending(void);
|
||||
|
||||
#define PERF_COUNTER_INDEX_OFFSET 0
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <linux/perf_counter.h>
|
||||
|
||||
#include <asm/pil.h>
|
||||
#include <asm/pcr.h>
|
||||
#include <asm/nmi.h>
|
||||
@ -34,10 +36,20 @@ unsigned int picl_shift;
|
||||
*/
|
||||
void deferred_pcr_work_irq(int irq, struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *old_regs;
|
||||
|
||||
clear_softint(1 << PIL_DEFERRED_PCR_WORK);
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
irq_enter();
|
||||
#ifdef CONFIG_PERF_COUNTERS
|
||||
perf_counter_do_pending();
|
||||
#endif
|
||||
irq_exit();
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
void schedule_deferred_pcr_work(void)
|
||||
void set_perf_counter_pending(void)
|
||||
{
|
||||
set_softint(1 << PIL_DEFERRED_PCR_WORK);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user