forked from Bananymous/banan-os
Kernel: Allow parallel LAPIC timer initialization with HPET
HPET supports reading LAPIC counter without locks, so it can be done in parallel. This makes booting much faster. Previously initializing every timer took 100 ms, so 16 CPUs took total of 1.6 seconds. This allows doing it all in 100 ms.
This commit is contained in:
@@ -19,6 +19,7 @@ namespace Kernel
|
||||
virtual uint64_t ns_since_boot() const override;
|
||||
virtual timespec time_since_boot() const override;
|
||||
|
||||
virtual bool pre_scheduler_sleep_needs_lock() const override { return false; }
|
||||
virtual void pre_scheduler_sleep_ns(uint64_t) override;
|
||||
|
||||
virtual void handle_irq() override;
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace Kernel
|
||||
virtual uint64_t ns_since_boot() const override;
|
||||
virtual timespec time_since_boot() const override;
|
||||
|
||||
virtual bool pre_scheduler_sleep_needs_lock() const override { return true; }
|
||||
virtual void pre_scheduler_sleep_ns(uint64_t) override;
|
||||
|
||||
virtual void handle_irq() override;
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace Kernel
|
||||
virtual uint64_t ns_since_boot() const = 0;
|
||||
virtual timespec time_since_boot() const = 0;
|
||||
|
||||
virtual bool pre_scheduler_sleep_needs_lock() const = 0;
|
||||
virtual void pre_scheduler_sleep_ns(uint64_t) = 0;
|
||||
|
||||
void dont_invoke_scheduler() { m_should_invoke_scheduler = false; }
|
||||
@@ -39,6 +40,7 @@ namespace Kernel
|
||||
virtual uint64_t ns_since_boot() const override;
|
||||
virtual timespec time_since_boot() const override;
|
||||
|
||||
virtual bool pre_scheduler_sleep_needs_lock() const override;
|
||||
virtual void pre_scheduler_sleep_ns(uint64_t) override;
|
||||
|
||||
void sleep_ms(uint64_t ms) const { return sleep_ns(ms * 1'000'000); }
|
||||
|
||||
Reference in New Issue
Block a user