6e4cd6300d
Kernel: Add copy_from_user() and copy_from_user_typed()
continuous-integration/drone/push Build is passing
2023-01-11 19:25:28 +01:00
84c82a4e75
luna, kernel: More constness
continuous-integration/drone/push Build is passing
2023-01-10 19:31:41 +01:00
c83f6c03b5
Bitmap: Add a 'find_and_toggle' method
...
continuous-integration/drone/push Build is passing
Just like find(), but toggles the value when finding it.
Avoids doing this manually in MemoryManager and KernelVM.
2023-01-09 18:08:50 +01:00
4287ec6cb0
Bitmap: Introduce a new method 'find' and use it in MM and KernelVM
...
continuous-integration/drone/push Build is passing
This method looks for the first bit with a value, optionally from a starting index, and returns its index.
This should be (haven't benchmarked) way faster than the manual way,
AKA what MM and KernelVM were doing.
This is due to this method using bit and byte manipulation tricks instead of just calling get() until getting the desired result :)
2023-01-09 17:59:52 +01:00
29bd8a69fa
MemoryManager: Add helper functions to validate arbitrary ranges of userspace memory
2023-01-07 01:39:33 +01:00
6e9b4491a6
MemoryManager: Add copy_to_user() and copy_to_user_typed()
2023-01-07 00:17:16 +01:00
caa3fe8c45
MemoryManager: Add validate_userspace_string()
...
A bit crude, should be replaced by a strdup_from_user() helper to avoid touching userspace memory directly.
But it'll do for now.
2023-01-05 22:39:09 +01:00
c53bba0392
MemoryManager: Add an unmap_weak_and_free_vm() helper function
...
This function mirrors unmap_owned_and_free_vm(), but using weak unmapping (does not free the underlying physical memory)
2023-01-05 21:50:06 +01:00
5854e5e530
Add newlines at end-of-file
2023-01-02 13:07:29 +01:00
6ff92b1714
MemoryManager: Add get_kernel_mapping_for_frames()
...
This function allocates a continuous range of VM and maps the physical frames passed to said VM range.
2022-12-23 11:30:49 +01:00
60520dff4c
Make MemoryManager's scope guards more robust
continuous-integration/drone/push Build is passing
2022-12-19 11:55:53 +01:00
283e641ece
Spinlock+LockedValue: Remove init() functions
...
Let's set the default (unlocked) value of Spinlock's underlying atomic to 0, so even if the constructor is not called it stays like that.
2022-12-18 20:36:15 +01:00
1b867151bd
MemoryManager: Run include-what-you-use
continuous-integration/drone/push Build is passing
2022-12-17 15:47:35 +01:00
132963070b
MemoryManager: Make some variables atomic and the frame bitmap a LockedValue
2022-12-17 10:56:24 +01:00
59765aa334
Rename String.h -> CString.h
...
continuous-integration/drone/push Build is passing
Let's not confuse String.h with a managed string class, it's in fact the equivalent of the C stdlib's <string.h>
2022-12-16 20:40:04 +01:00
a32590ff8a
Call expect_value more
2022-12-16 19:44:33 +01:00
cedcfa9c63
Improve cleanup on MemoryManager failure + add methods that use KernelVM
continuous-integration/drone/push Build is passing
2022-12-16 19:36:38 +01:00
dad95a8160
Map the page bitmap to virtual memory
2022-12-07 10:58:59 +01:00
1ebd892c16
Convert uses of u64 to usize
...
Not all of them, but if you're measuring a size it's more appropriate to use usize than u64.
2022-12-07 10:55:47 +01:00
39b310b6b9
Make alignment a template parameter to help the compiler optimize
continuous-integration/drone/push Build is passing
2022-12-06 19:27:58 +01:00
ba758bcef8
Initialize the KernelVM
2022-12-05 21:01:18 +01:00
ea7893ba71
Make CHECK_PAGE_ALIGNED use expect() instead of check()
2022-12-05 13:28:36 +01:00
55a30ac487
Make CHECK_PAGE_ALIGNED use expect() instead of check()
2022-12-05 13:26:50 +01:00
bfd4647467
Rename largest_free -> largest_free_entry
2022-12-05 13:26:09 +01:00
d9fc50f1ea
Make MemoryMapEntry have private fields with public getters
2022-12-05 13:23:01 +01:00
3b77ba6b04
EVERYTHING IS CONSTANT IN THIS UNIVERSE
...
Here's one advantage of Rust over C++:
Immutability by default. In Rust, you have to mark a variable as mutable, whereas in C++ you have to mark it as immutable.
What's the problem here? Usually, most variables don't need mutability. Thus we end up with const all over the place.
2022-12-05 12:49:01 +01:00
af96db3641
Remove bootboot declaration from MemoryManager now that it's MemoryMapIterator's job to walk the mmap
2022-12-04 15:56:25 +01:00
77e64d74a0
Remove unused header
2022-12-04 15:55:52 +01:00
766804b3a0
Use get_blocks_from_size instead of +1
2022-12-04 15:52:56 +01:00
0d10c98477
SImplify init_physical_frame_allocator() even more
2022-12-04 15:50:21 +01:00
5f6c48bd12
Use a friendlier way of iterating over the memory map
2022-12-04 15:45:13 +01:00
5aa2d1fa18
Add a Bitmap class to provide common functionality and use that in the MemoryManager
2022-12-04 15:14:07 +01:00
c7ab6bc2d3
Reorganize the luna/ directory so that headers aren't in the top level include path
2022-12-04 12:42:43 +01:00
985d45ddfb
Switch to logging functions everywhere
2022-11-30 17:16:36 +01:00
d2856d8812
Provide meaningful error numbers
2022-11-30 17:13:59 +01:00
fe47e0d5cb
Clean init() up
2022-11-30 16:30:42 +01:00
cb88630d86
Bugfix: Make alloc_at return the start of the virtual memory range instead of the end
2022-11-20 15:11:53 +01:00
af267772f0
Rename MemoryManager::map to map_frames_at
...
To make it clearer that this API is only intented for mapping contiguous frames of physical memory (for MMIO perhaps?)
2022-11-19 22:32:48 +01:00
1b41a3e9cf
Introduce a few helpers to allocate/map/unmap several pages, which wrap around the MMU functionality
2022-11-19 22:28:45 +01:00
c886669d56
Break down operations to make protect_kernel_sections() more readable
2022-11-19 22:27:59 +01:00
d96cb73995
Rename physical "pages" to "frames"
...
AFAIK, this is the proper naming scheme. "Pages" are virtual, and "frames" physical.
2022-11-19 22:27:08 +01:00
847f2b4f4c
Replace more usage of stdint.h types with Luna's Types.h
2022-11-19 22:25:03 +01:00
047f445651
Kernel: Add helpers to validate memory addresses
2022-11-19 18:38:47 +01:00
70c6b78e35
Organize source tree
2022-11-19 17:59:49 +01:00
cf758fdfdc
Initial commit :)
2022-11-13 10:09:09 +01:00
58fb422161
Kernel: Return a Result in MemoryManager and strdup_from_user
2022-11-12 11:56:40 +01:00
662afad426
Kernel: Add a Result class
2022-11-12 11:30:28 +01:00
1ea216dfd1
Kernel: Rename assert.h to ensure.h
...
The macro is named "ensure", the header file should reflect that.
2022-11-09 15:28:35 +01:00
98da473fdc
Run clang-format
2022-11-08 19:07:43 +01:00
8f2308c80d
Kernel: Implement mmap-able device files (regular files are not mmap-able yet)
2022-11-02 20:24:07 +01:00