Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(hal-x86_64): more local APIC embetterments #505

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

hawkw
Copy link
Owner

@hawkw hawkw commented Jan 5, 2025

No description provided.

hawkw added a commit that referenced this pull request Jan 5, 2025
Currently, we set wholly new values for the `LVT_TIMER` register,
clobbering whatever's in the reserved parts of the bitfield. Let's
update it in place, instead.

In practice, zeroing the reserved bits doesn't *seem* to cause any
problems, but it seems good to not do anyway...
hawkw added a commit that referenced this pull request Jan 5, 2025
This way, we don't re-calibrate every time we call
`start_periodic_timer`. This will also be used when adding the one-shot
timer mode (see #498).
hawkw added a commit that referenced this pull request Jan 5, 2025
This commit changes the code for calibrating the local APIC timer
frequency using the PIT do multiple PIT sleeps and average the delta
across them. This should maybe make the PIT calibration mechanism more
resilient to random noise? Eventually, we can also check if an attempt
is way outside the expected range and throw it out.
hawkw added a commit that referenced this pull request Jan 5, 2025
This is a rudimentary first pass on #498 adding a method to `LocalApic`
to trigger a single oneshot timer interrupt after a given duration. It
would be nice to also have a full-on blocking sleep method, like we do
for the PIT.
@hawkw hawkw force-pushed the eliza/lapic-oneshot branch from 3fc89ca to fbe0e96 Compare January 5, 2025 18:42
hawkw added a commit that referenced this pull request Jan 5, 2025
The local APIC has a `VERSION` register that tells you...the version, as
well as some other useful information like the number of LVT entries.
Let's add a method to read this register.
hawkw added a commit that referenced this pull request Jan 5, 2025
Currently, we set wholly new values for the `LVT_TIMER` register,
clobbering whatever's in the reserved parts of the bitfield. Let's
update it in place, instead.

In practice, zeroing the reserved bits doesn't *seem* to cause any
problems, but it seems good to not do anyway...
hawkw added a commit that referenced this pull request Jan 5, 2025
This way, we don't re-calibrate every time we call
`start_periodic_timer`. This will also be used when adding the one-shot
timer mode (see #498).
hawkw added a commit that referenced this pull request Jan 5, 2025
This commit changes the code for calibrating the local APIC timer
frequency using the PIT do multiple PIT sleeps and average the delta
across them. This should maybe make the PIT calibration mechanism more
resilient to random noise? Eventually, we can also check if an attempt
is way outside the expected range and throw it out.
@hawkw hawkw force-pushed the eliza/lapic-oneshot branch from fbe0e96 to 3a02417 Compare January 5, 2025 18:43
hawkw added a commit that referenced this pull request Jan 5, 2025
This is a rudimentary first pass on #498 adding a method to `LocalApic`
to trigger a single oneshot timer interrupt after a given duration. It
would be nice to also have a full-on blocking sleep method, like we do
for the PIT.
hawkw added 5 commits January 5, 2025 11:23
The local APIC has a `VERSION` register that tells you...the version, as
well as some other useful information like the number of LVT entries.
Let's add a method to read this register.
Currently, we set wholly new values for the `LVT_TIMER` register,
clobbering whatever's in the reserved parts of the bitfield. Let's
update it in place, instead.

In practice, zeroing the reserved bits doesn't *seem* to cause any
problems, but it seems good to not do anyway...
This way, we don't re-calibrate every time we call
`start_periodic_timer`. This will also be used when adding the one-shot
timer mode (see #498).
This commit changes the code for calibrating the local APIC timer
frequency using the PIT do multiple PIT sleeps and average the delta
across them. This should maybe make the PIT calibration mechanism more
resilient to random noise? Eventually, we can also check if an attempt
is way outside the expected range and throw it out.
This is a rudimentary first pass on #498 adding a method to `LocalApic`
to trigger a single oneshot timer interrupt after a given duration. It
would be nice to also have a full-on blocking sleep method, like we do
for the PIT.
@hawkw hawkw force-pushed the eliza/lapic-oneshot branch from 3a02417 to 3f367f8 Compare January 5, 2025 19:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant