Commit Graph

138 Commits

Author SHA1 Message Date
Martin Whitaker 3245b6d916 Don't turn the cache off in test 0 when performing dummy runs.
This should fix the slow startup on multi-socket machines (issue #16).
2022-02-19 20:55:41 +00:00
Martin Whitaker f8b82eb0bd Exclude copyright notices from Doxygen file descriptions. 2022-02-19 19:56:55 +00:00
Martin Whitaker d04ec9f681 Rename to Memtest86+ v6.0. 2022-02-19 19:44:58 +00:00
Martin Whitaker 0075375632 Import code from pcmemtest. 2022-02-19 17:58:09 +00:00
Martin Whitaker 3b183b0bef Add preliminary (untested) code for supporting UHCI. 2022-02-19 16:24:47 +00:00
Martin Whitaker 76adad2fe6 Add ability to generate internal API documentation using Doxygen. 2022-02-19 16:17:40 +00:00
Martin Whitaker d09c5ed7b4 Remove the power-saving delay loop from the usleep function.
Now we halt inactive CPU cores, this should no longer be needed.
2022-02-19 13:04:26 +00:00
Martin Whitaker 0e61b1605e Remove volatile qualifier from testword pointers.
Now we use the atomic read/write functions, these are redundant.
2022-02-19 13:01:42 +00:00
Martin Whitaker 02bcec2418 Remove unnecessary volatile qualifiers from test state variables.
Thread safety is ensured by the barriers.
2022-02-19 12:44:14 +00:00
Martin Whitaker e032df50d2 Minor code improvement for efficiency. 2022-02-19 11:52:42 +00:00
Martin Whitaker e99a7aedb3 Revert to starting APs before doing the dummy runs.
That optimisation occasionally caused a hang if the CPU sequencing
mode was reconfigured after testing had started. It didn't make a
significant difference to the startup delay, so just drop it.
2022-02-18 20:35:36 +00:00
Martin Whitaker cadad583d7 Eliminate the spinlock used when halting inactive CPU cores.
This is a more efficient implementation.
2022-02-18 20:08:24 +00:00
Martin Whitaker f4a413cf6d Translate non-usable EFI memory regions to E820_RESERVED, not E820_NONE.
This is more correct. Using E820_NONE may have been confusing the code
in pmem.c that sanitises the memory map.
2022-02-13 20:44:58 +00:00
Martin Whitaker 807c4153c1 Add tracing for AP startup.
Also comment out tracing of memory window starts to reduce verbosity.
2022-02-13 20:25:58 +00:00
Martin Whitaker d1382b7a53 Increase timeout delay for starting APs. 2022-02-13 20:25:11 +00:00
Martin Whitaker 16b066c3e3 Exit config menu immediately when "skip test" is selected. 2022-02-13 12:38:38 +00:00
Martin Whitaker efc9a9c16a Don't attempt to start the APs when restarting after a config change.
Leave the APs running whilst the BSP repeats the dummy runs. This means
we need to bypass the barriers during a dummy run. The APs will wait at
the first barrier until the BSP starts the first real run.
2022-02-12 19:37:58 +00:00
Martin Whitaker c23b129e55 Remove delay loop from spinlock wait.
Now we halt CPU cores that are going to be idle for a lengthy period,
we don't need to try to save power in other ways. And anyway, this was
not very effective.
2022-02-12 19:33:53 +00:00
Martin Whitaker 2bf1623733 Halt CPU cores that are not active in a test.
This saves a lot of power when performing sequential tests.
2022-02-12 19:30:14 +00:00
Martin Whitaker de32bc5412 Ensure we only use 32-bit reads and writes when accessing APIC registers. 2022-02-12 09:39:18 +00:00
Martin Whitaker 99e258457b Use je/jne instead of jz/jnz when testing boolean variables in startup code.
Just for readability - they are aliases for the same instructions.
2022-02-12 09:39:18 +00:00
Martin Whitaker 39d5715224 Fix interrupt handling when long mode is enabled in a 32-bit binary (part 2).
Handle passing the processor state to the application interrupt handler.
Update the 64-bit code to match the new trap state structure definition.
2022-02-12 09:39:09 +00:00
Doc TB c1bc395b4c
Initial commit 2022-02-12 01:48:34 +01:00
Martin Whitaker 111e619b10 Fix interrupt handling when long mode is enabled in a 32-bit binary (part 1).
If long mode is enabled, the interrupt handler always runs in 64-bit
mode, so we need to set up the interrupt dispatch table accordingly.
2022-02-08 23:35:00 +00:00
Martin Whitaker e96fd7b99f Fix a few minor issues in the 64-bit startup code...
- the calculation of the RSP value when an interrupt occurred was
  out by 8 bytes
- in a few places a 32-bit pointer was used instead of a 64-bit one
- incorrect tabulation (white space)
2022-02-08 23:29:24 +00:00
Martin Whitaker 93343db711 Remove redundant barrier. 2022-02-07 18:50:22 +00:00
Martin Whitaker 3028cd31f9 Increase sleep time when polling for all other APs started.
Also fix warning about usleep not being defined.
2022-02-05 18:07:03 +00:00
Martin Whitaker 242bd77927 Remove unwanted debug code. 2022-02-05 18:04:38 +00:00
Martin Whitaker 7dd17c26c0 Check whether the BIOS has enabled x2APIC mode, and disable SMP if so. 2022-02-05 18:03:32 +00:00
Martin Whitaker 29b8bbece8 Rework AP startup based on how it's done in Linux. 2022-02-05 18:03:32 +00:00
Martin Whitaker 503aea321d Remove redundant start_mutex.
The mutex is now implemented in the assembly language boot code.
2022-02-05 18:03:32 +00:00
Martin Whitaker 9769990679 Extend the use of the startup mutex to cover the entire startup code.
There is more in the startup code that isn't thread safe than just
the use of the temporary stack. So take the mutex for the whole time.
The code isn't that long, so it's not worth trying to cover just the
critical sections.
2022-02-05 18:03:32 +00:00
Martin Whitaker 13efd906f1 Guard against an AP starting more than once. 2022-02-03 19:48:27 +00:00
Martin Whitaker e37fbbd429 Set stack alignment to 16 bytes.
This needs to be done in the ldscripts.
2022-02-02 18:23:23 +00:00
Martin Whitaker 1888f5c611 Add change to tests/test.c missed in commit dcac5270. 2022-02-02 15:33:25 +00:00
Martin Whitaker 7acb81e302 Fix assembler warning about unsized bts instruction. 2022-02-02 12:52:44 +00:00
Martin Whitaker dcac527068 Don't make assumptions about usable memory.
When using a legacy BIOS, the memory regions used by the BIOS are well
defined. This is not the case when using a UEFI BIOS. So include the
stack area in the BSS so the loader knows how much memory to allocate,
and check we have space to relocate the program to either low or high
memory.

There are still some assumptions in the USB driver code that need to
be fixed.
2022-02-02 12:20:39 +00:00
Martin Whitaker fb0f1a7fe5 Don't start APs until after dummy runs have finished.
This should significantly improve startup time on machines with many
cores, as the barriers become no-ops during the dummy runs.
2022-02-01 23:50:49 +00:00
Martin Whitaker fd141c59c7 Use "CPU core" in preference to "CPU" in comments. 2022-02-01 15:42:44 +00:00
Martin Whitaker da0d2a9fc3 The apic_id_to_cpu_num[] map needs to be unsigned to support > 256 cores. 2022-02-01 15:40:52 +00:00
Martin Whitaker ccab9ab081 Fix operation with a subset of CPU cores enabled.
The last commit removed too much - there are a couple of places where
we need to use a virtual CPU number rather than a physical CPU number.
2022-02-01 15:38:06 +00:00
Martin Whitaker 16d55b7dad Remove distinction between physical and virtual CPUs.
This is no longer needed, now we can display as many CPUs as we can
physically handle.
2022-01-31 22:59:14 +00:00
Martin Whitaker 4100a44b12 Properly protect the startup stack with a mutex.
Because we start the APs sequentially, it is unlikely they will coincide
for the brief period that they use the temporary startup stack, but we
should guard against it. This allows us to remove the mutex around the
restart of each AP when relocating, which should improve test times.
2022-01-31 21:54:24 +00:00
Martin Whitaker 17093a96f9 Optimise the AP startup code to reduce the startup delay. 2022-01-31 19:47:32 +00:00
Martin Whitaker 7c3e7d536c Allow cursor keys to be used in CPU mode and error mode config menus. 2022-01-30 15:47:17 +00:00
Martin Whitaker e13b8bbb83 Increase config pop-up window width.
Also add more constant definitions to better parameterise the layout.
2022-01-30 15:37:13 +00:00
Martin Whitaker f348add314 Remap numeric keypad to cursor keys. 2022-01-30 15:18:25 +00:00
Martin Whitaker 4589c7dad4 Recognise cursor keys and map them to 'l', 'r', 'u', 'd'. 2022-01-30 15:12:42 +00:00
Martin Whitaker 151870cc0b Display enabled CPUs as a scrollable list in the config menu.
This removes a constraint on the number of CPU cores we can support.
2022-01-30 15:12:04 +00:00
Martin Whitaker ab278566e4 Bypass start barriers during dummy runs.
This should speed up the dummy runs on distributed SMP systems.
2022-01-29 17:11:46 +00:00