mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:17:46 +00:00
Kernel+lsirq: Track per-CPU IRQ handler call counts
Each GenericInterruptHandler now tracks the number of calls that each CPU has serviced. This takes care of a FIXME in the /sys/kernel/interrupts generator. Also, the lsirq command line tool now displays per-CPU call counts.
This commit is contained in:
parent
94b514b981
commit
fb00d3ed25
4 changed files with 33 additions and 9 deletions
|
@ -67,9 +67,14 @@ void GenericInterruptHandler::change_interrupt_number(u8 number)
|
|||
register_generic_interrupt_handler(InterruptManagement::acquire_mapped_interrupt_number(interrupt_number()), *this);
|
||||
}
|
||||
|
||||
Span<u32 const> GenericInterruptHandler::per_cpu_call_counts() const
|
||||
{
|
||||
return m_per_cpu_call_counts.span().slice(0, Processor::count());
|
||||
}
|
||||
|
||||
void GenericInterruptHandler::increment_call_count()
|
||||
{
|
||||
++m_call_count;
|
||||
++m_per_cpu_call_counts[Processor::current_id()];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
|
||||
u8 interrupt_number() const { return m_interrupt_number; }
|
||||
|
||||
u32 call_count() const { return m_call_count; }
|
||||
Span<u32 const> per_cpu_call_counts() const;
|
||||
|
||||
virtual size_t sharing_devices_count() const = 0;
|
||||
virtual bool is_shared_handler() const = 0;
|
||||
|
@ -57,7 +57,8 @@ protected:
|
|||
void disable_remap() { m_disable_remap = true; }
|
||||
|
||||
private:
|
||||
Atomic<u32, AK::MemoryOrder::memory_order_relaxed> m_call_count { 0 };
|
||||
Array<u32, MAX_CPU_COUNT> m_per_cpu_call_counts {};
|
||||
|
||||
u8 m_interrupt_number { 0 };
|
||||
bool m_disable_remap { false };
|
||||
bool m_registered { false };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue