-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathTODO
73 lines (45 loc) · 2.91 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
* use PG_GLOBAL flag for anything in the kernel addresss space and check all
the TLB flushing is done properly
* look at how caching should work for memory-mapped I/O devices like the local
APIC and I/O APIC
* the PMM should be reworked to also support contiguous regions of memory
* check if in*_p() and out*_p() are still required
* split features into local CPU features and features that all CPUs share
(or shall we just force all CPUs to be identical?)
* elf64 size checks to check we don't read outside the bounds of the elf64 file
* free module pmm frames when they are loaded
* don't use PIT channel 2 for pit_mdelay(), using the KBC to check if the
countdown has finished seems to be unreliable on modern hardware
(note: this issue actually seems to be the APs not responding to the init
sequence and seems to happen in Linux as well on this hardware sometimes?)
* use a more efficient user-space heap structure (red black tree?)
* consider interupt masking more in relation to locks (e.g. current solution
won't work for exceptions as they aren't masked, and locks which don't mask
interrupts should be added to improve performance where it isn't required.)
* make TLB flushes more efficient e.g. by batching together more VMM operations
* consider issue that proc and thread in cpu_t might not be consistent - is
this going to cause problems? do we need any locking there also?
* make seg_alloc() always zero memory it gives out, for security reasons. or
should this be done by its callers?
* switch from NASM to GNU AS? also switch more stuff to inline asm (e.g. locks)
* re-structure some of the headers (mainly mm and proc folders, esp. common
stuff, also split arc/types.h?)
* x2APIC support in MADT parsing code
* check which trigger/level should be use for NMIs by default, and if we need
to put this in the LVT for local NMIs
* instead of external locking dlmalloc, embed our own spinlock code inside it,
this means it can do stuff like per-mspace locks
* dlmalloc seems to be infinite looping for large allocations
* I/O NMI code should route to NMI, and not to FAULT2, see ioapic_route_nmi()
* forget about NMIs? they make everything messy
* load kernel at 2MB instead, to get rid of the +1MB offset. also ensure pmm
won't touch _any_ space mapped into the kernel's virtual memory (so round
up to the next 2mb boundary when reserving kernel's physical memory)
* bochs isn't firing local APIC tick interrupts
* check SMP code more carefully - do we need memory fences/barriers anywhere?
and are they correct where they are being used?
* look at using kpartx in run/ shell scripts, instead of hard-coded offsets
* try to avoid the need to preserve the value of CR3 so many times during boot
* panic() can be called before trace is ready to print the message out
* fix leak of stack allocated for idle processes by thread_init()
* figure out what gcc is doing to memset() at -O3 which makes it crash