Commit graph

347 commits

Author SHA1 Message Date
Subv
fdf1d042e0 Use boost remove_erase_if instead of the erase-remove idiom 2016-12-06 19:31:53 -05:00
Subv
bf232b89f3 Improved the algorithm for GetHighestPriorityReadyThread. 2016-12-06 19:15:32 -05:00
Subv
44c59feca6 Threading: Added some utility functions and const correctness. 2016-12-04 09:58:36 -05:00
Subv
5bc10a74f6 Threading: Reworked the way our scheduler works.
Threads will now be awakened when the objects they're waiting on are signaled, instead of repeating the WaitSynchronization call every now and then.

The scheduler is now called once after every SVC call, and once after a thread is awakened from sleep by its timeout callback.

This new implementation is based off reverse-engineering of the real kernel.

See https://gist.github.com/Subv/02f29bd9f1e5deb7aceea1e8f019c8f4 for a more detailed description of how the real kernel handles rescheduling.
2016-12-03 22:38:14 -05:00
Yuri Kunde Schlesner
e8dec36ad5 Merge pull request #2196 from Subv/system_mode
Kernel/Loader: Grab the system mode from the NCCH ExHeader.
2016-11-27 17:04:11 -08:00
Subv
d00d0d61e0 Kernel/Loader: Grab the system mode from the NCCH ExHeader.
3dsx and elf files default to system mode 2 (96MB allocated to the application).

This allows Home Menu to boot without modifications.
Closes #1849
2016-11-19 20:40:04 -05:00
Subv
bb93931096 Kernel/Events: Log an error when trying to create Pulse events and timers.
Related to #1904
2016-11-19 14:00:08 -05:00
Ricardo de Almeida Gonzaga
07fdcf150d Fix typos 2016-10-20 12:26:59 -02:00
wwylele
1dedb87851 move ResetType to kernel.h 2016-09-22 13:52:52 +08:00
wwylele
8b25c12ce8 implement wait tree widget 2016-09-22 13:52:52 +08:00
Yuri Kunde Schlesner
fa5d9d8266 Use negative priorities to avoid special-casing the self-include 2016-09-21 00:15:56 -07:00
Emmanuel Gil Peyrot
1138ec0d49 Remove empty newlines in #include blocks.
This makes clang-format useful on those.

Also add a bunch of forgotten transitive includes, which otherwise
prevented compilation.
2016-09-21 11:15:47 +09:00
Yuri Kunde Schlesner
1e4a5da9f4 Manually tweak source formatting and then re-run clang-format 2016-09-18 21:14:25 -07:00
Emmanuel Gil Peyrot
628ed4376a Sources: Run clang-format on everything. 2016-09-18 09:38:01 +09:00
bunnei
acdc361fc0 arm: ResetContext shouldn't be part of ARM_Interface. 2016-09-15 17:49:30 -04:00
Lectem
7df4925923 fix #1942 and adds a few IPC functions for descriptors 2016-08-02 16:45:15 +02:00
Yuri Kunde Schlesner
6bc2f3e2a8 Merge pull request #1869 from wwylele/dont-be-lazy
Switch context to the same thread if necessary
2016-06-28 21:03:52 -07:00
bunnei
2270d7b0f0 Merge pull request #1867 from mailwl/srv-update
srv: Update according 3dbrew
2016-06-28 18:53:10 -04:00
bunnei
198562daa9 Merge pull request #1877 from wwylele/wait-fix-timeout
Thread: update timeout when reruning WaitSynch
2016-06-18 01:08:22 -04:00
Subv
a350b5274f Kernel/SVC: Implemented svcCreatePort. 2016-06-11 08:37:37 -05:00
Subv
d5f8d90e34 Kernel: Added ClientPort and ServerPort classes.
This is part of an ongoing effort to implement support for multiple processes.
2016-06-05 09:35:31 -05:00
wwylele
1cef298ca9 Thread: update timeout when rerunning WaitSynch 2016-06-04 09:27:16 +03:00
mailwl
1aceb1b912 Fix parameter name in EnableNotification 2016-05-31 10:06:00 +03:00
wwylele
5e5f9b099a Switch context on the same thread if necessary 2016-05-30 07:34:53 +03:00
bunnei
ea512df6da Merge pull request #1692 from Subv/rm_getpointer2
Memory: Remove most usages of GetPointer
2016-05-29 21:57:07 -04:00
MerryMage
1d3892255d Memory: Added necessary headers and removed unnecessary header 2016-05-26 18:55:37 +01:00
MerryMage
0352176f4c Kernel/Thread: Remove use of Memory::GetPointer 2016-05-21 11:14:11 -05:00
bunnei
79da3c3d83 Merge pull request #1800 from JayFoxRox/set-fpscr
Set fpscr for new threads
2016-05-17 21:24:57 -04:00
Jannik Vogel
f39adfffe7 Set fpscr for new threads 2016-05-17 08:59:52 +02:00
Subv
057cc2f94f Memory: Fixed a regression caused by #1695 and #1689.
Reserve enough space in the vector that holds the linear heap memory to prevent relocations of the backing memory when growing too much.

Closes #1790
2016-05-14 11:24:19 -05:00
bunnei
8ac23ace82 Merge pull request #1689 from Subv/shmem
Kernel: Implemented shared memory.
2016-05-13 15:33:44 -04:00
bunnei
1302ffa822 Merge pull request #1695 from Subv/tls_alloc
Kernel/Threads: Dynamically allocate the TLS region for threads.
2016-05-12 21:51:35 -04:00
Subv
3421ea5445 HLE/Applets: Give each applet its own block of heap memory, and use that when creating the framebuffer shared memory block. 2016-05-12 20:01:59 -05:00
Subv
d6c25acc6e Kernel: Account for automatically-allocated shared memories in the amount of used linear heap memory. 2016-05-12 20:01:59 -05:00
Subv
d6223cfecd Kernel/SharedMemory: Log an error when Map fails. 2016-05-12 20:01:27 -05:00
Subv
54871800a9 Kernel: Implemented shared memory permissions. 2016-05-12 20:01:26 -05:00
Subv
6e4ff1a857 Kernel/Memory: Remove the Shared Memory region from the legacy memory map. 2016-05-12 20:00:33 -05:00
Subv
b53900a6ab Kernel/SharedMemory: Properly implemented shared memory support.
Applications can request the kernel to allocate a piece of the linear heap for them when creating a shared memory object.
Shared memory areas are now properly mapped into the target processes when calling svcMapMemoryBlock.

Removed the APT Shared Font hack as it is no longer needed.
2016-05-12 20:00:32 -05:00
Subv
b2c771eed7 Kernel/SVC: Fixed the register order for svcCreateMemoryBlock.
R0 is used as the last parameter instead of R4.
2016-05-12 20:00:29 -05:00
bunnei
fe04d0f1cc Merge pull request #1766 from Subv/log_cpu
Kernel/Threading: Warn when a thread can be scheduled in the Syscore (Core 1)
2016-05-08 15:03:08 -04:00
Subv
bfee7941e3 Kernel/Threading: Warn when a thread can be scheduled in the Syscore (Core 1).
We do not currently implement any cores other than the AppCore (Core 0).
2016-05-07 10:23:03 -05:00
Subv
d9baef11f2 Kernel/Threads: Dynamically allocate the TLS region for threads in the BASE region of the linear heap.
Each thread gets a 0x200-byte area from the 0x1000-sized page, when all 8 thread slots in a single page are used up, the kernel allocates a new page to hold another 8 entries.

This is consistent with what the real kernel does.
2016-05-07 10:18:47 -05:00
bunnei
200e9d03b2 Merge pull request #1762 from bunnei/global
hle: Get rid of direct global access to g_reschedule
2016-05-05 21:45:57 -04:00
Mathew Maidment
3cf5e4d51c Merge pull request #1643 from MerryMage/make_unique
Common: Remove Common::make_unique, use std::make_unique
2016-04-05 20:10:11 -04:00
MerryMage
9f9c987924 Common: Remove Common::make_unique, use std::make_unique 2016-04-05 13:31:17 +01:00
Lioncash
29135ab8d1 session: Make helper functions constexpr 2016-03-21 04:07:03 -04:00
Lioncash
76f892ebb9 hle: Get rid of global access to g_reschedule
This shouldn't be directly exposed if there's already a partial API that operates on it.
We can just provide the rest of that API.
2016-03-21 02:57:12 -04:00
Lioncash
bc06a2c79e svc: Move ResetType enum to the kernel event header 2016-03-12 21:47:41 -05:00
Lioncash
219ecd2ee7 svc: Make ResetType an enum class 2016-03-12 15:06:31 -05:00
Yuri Kunde Schlesner
46dc35ae20 Memory: Do correct Phys->Virt address translation for non-APP linheap 2016-03-05 22:09:59 -08:00