dev: timer: x86_generic: Fix divisor calculation

The old code incorrectly claimed the timer could handle a 55 ms timer,
and clamped the millisecond value to 55 before converting from ms to pit
timer ticks. The converted value overflow when then clamped to 16 bits
resulting in a timer request less than 100 microseconds into the future
instead of 55 millioseconds. This resulted in 100% cpu usage while
waiting for a timer 55ms or longer.

Improve the precision of the conversion by converting directly from nano
seconds to pit timer ticks instead of first converting to milliseconds.
Then clamp the value after the conversion instead where the boundary is
more clear.

Also remove code that starts a periodic timer on boot that had no
apparent purpose.

Bug: 311709679
Change-Id: Ia2cff162b9bf2359973356a5108de87ec860d61b
1 file changed
tree: 41df6e50721ecd829162a448c191d6ec8e1efb8b
  1. app/
  2. arch/
  3. dev/
  4. external/
  5. hosttests/
  6. include/
  7. kernel/
  8. lib/
  9. make/
  10. platform/
  11. target/
  12. tools/
  13. top/
  14. .clang-format
  15. .gitignore
  16. build-config-kerneltests
  17. engine.mk
  18. kerneltests-inc.mk
  19. LICENSE
  20. lk_inc.mk.example
  21. makefile
  22. PREUPLOAD.cfg
  23. README.md
  24. rustfmt.toml
README.md

LK

The LK embedded kernel. An SMP-aware kernel designed for small systems.

See https://github.com/littlekernel/lk for the latest version.

See https://github.com/littlekernel/lk/wiki for documentation.

Builds

Build Status

To build and test for ARM on linux

  1. install or build qemu. v2.4 and above is recommended.
  2. install gcc for embedded arm (see note 1)
  3. run scripts/do-qemuarm (from the lk directory)
  4. you should see ‘welcome to lk/MP’

This will get you a interactive prompt into LK which is running in qemu arm machine ‘virt’ emulation. type ‘help’ for commands.

note 1: for ubuntu: sudo apt-get install gcc-arm-none-eabi or fetch a prebuilt toolchain from http://newos.org/toolchains/arm-eabi-5.3.0-Linux-x86_64.tar.xz