diff options
| author | 2016-04-19 17:12:48 -0500 | |
|---|---|---|
| committer | 2016-05-07 10:18:47 -0500 | |
| commit | d192fb066d0d03c217c434f99af0200f75936263 (patch) | |
| tree | 08151ce1c1cb6f7c91a544e6126d493d71f9f6b8 /src/core/hle/kernel/process.h | |
| parent | Merge pull request #1685 from lioncash/hdr (diff) | |
| download | yuzu-d192fb066d0d03c217c434f99af0200f75936263.tar.gz yuzu-d192fb066d0d03c217c434f99af0200f75936263.tar.xz yuzu-d192fb066d0d03c217c434f99af0200f75936263.zip | |
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.
Diffstat (limited to 'src/core/hle/kernel/process.h')
| -rw-r--r-- | src/core/hle/kernel/process.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index 6d2ca96a2..532ce3020 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -140,8 +140,11 @@ public: | |||
| 140 | 140 | ||
| 141 | MemoryRegionInfo* memory_region = nullptr; | 141 | MemoryRegionInfo* memory_region = nullptr; |
| 142 | 142 | ||
| 143 | /// Bitmask of the used TLS slots | 143 | /// The Thread Local Storage area is allocated as processes create threads, |
| 144 | std::bitset<300> used_tls_slots; | 144 | /// each TLS area is 0x200 bytes, so one page (0x1000) is split up in 8 parts, and each part |
| 145 | /// holds the TLS for a specific thread. This vector contains which parts are in use for each page as a bitmask. | ||
| 146 | /// This vector will grow as more pages are allocated for new threads. | ||
| 147 | std::vector<std::bitset<8>> tls_slots; | ||
| 145 | 148 | ||
| 146 | VAddr GetLinearHeapAreaAddress() const; | 149 | VAddr GetLinearHeapAreaAddress() const; |
| 147 | VAddr GetLinearHeapBase() const; | 150 | VAddr GetLinearHeapBase() const; |