aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
AgeCommit message (Collapse)Author
2019-07-14Merge pull request #2690 from SciresM/physmem_fixesFernando Sahmkow
Implement MapPhysicalMemory/UnmapPhysicalMemory
2019-07-11Remove unicorn mappings/unmappingsMichael Scire
2019-07-11Merge pull request #2717 from SciresM/unmirror_memorybunnei
Restore memory perms on svcUnmapMemory/UnloadNro
2019-07-11core/arm: Remove obsolete Unicorn memory mappingLioncash
This was initially necessary when AArch64 JIT emulation was in its infancy and all memory-related instructions weren't implemented. Given the JIT now has all of these facilities implemented, we can remove these functions from the CPU interface.
2019-07-11Restore memory perms on svcUnmapMemory/UnloadNroMichael Scire
Prior to PR, Yuzu did not restore memory to RW- on unmap of mirrored memory or unloading of NRO. (In fact, in the NRO case, the memory was unmapped instead of reprotected to --- on Load, so it was actually lost entirely...) This PR addresses that, and restores memory to RW- as it should. This fixes a crash in Super Smash Bros when creating a World of Light save for the first time, and possibly other games/circumstances.
2019-07-08Prevent merging of device mapped memory blocks.Michael Scire
This sets the DeviceMapped attribute for GPU-mapped memory blocks, and prevents merging device mapped blocks. This prevents memory mapped from the gpu from having its backing address changed by block coalesce.
2019-07-07Remove unused member function declarationMichael Scire
2019-07-07physmem: add helpers, cleanup logic.Michael Scire
2019-07-07clang-format fixesMichael Scire
2019-07-07address review commentaryMichael Scire
2019-07-07Implement MapPhysicalMemory/UnmapPhysicalMemoryMichael Scire
This implements svcMapPhysicalMemory/svcUnmapPhysicalMemory for Yuzu, which can be used to map memory at a desired address by games since 3.0.0. It also properly parses SystemResourceSize from NPDM, and makes information available via svcGetInfo. This is needed for games like Super Smash Bros. and Diablo 3 -- this PR's implementation does not run into the "ASCII reads" issue mentioned in the comments of #2626, which was caused by the following bugs in Yuzu's memory management that this PR also addresses: * Yuzu's memory coalescing does not properly merge blocks. This results in a polluted address space/svcQueryMemory results that would be impossible to replicate on hardware, which can lead to game code making the wrong assumptions about memory layout. * This implements better merging for AllocatedMemoryBlocks. * Yuzu's implementation of svcMirrorMemory unprotected the entire virtual memory range containing the range being mirrored. This could lead to games attempting to map data at that unprotected range/attempting to access that range after yuzu improperly unmapped it. * This PR fixes it by simply calling ReprotectRange instead of Reprotect.
2019-07-06kernel/vm_manager: Rename 'new map' to 'stack'Lioncash
Provides a more accurate name for the memory region and also disambiguates between the map and new map regions of memory, making it easier to understand.
2019-07-05kernel/vm_manager: Handle stack/TLS IO region placement betterLioncash
Handles the placement of the stack a little nicer compared to the previous code, which was off in a few ways. e.g. The stack (new map) region, shouldn't be the width of the entire address space if the size of the region calculation ends up being zero. It should be placed at the same location as the TLS IO region and also have the same size. In the event the TLS IO region contains a size of zero, we should also be doing the same thing. This fixes our memory layout a little bit and also resolves some cases where assertions can trigger due to the memory layout being incorrect.
2019-07-03kernel/process: Default initialize all member variablesLioncash
Ensures a Process instance is always created with a deterministic initial state.
2019-07-03kernel/process: Decouple TLS handling from threadsLioncash
Extracts out all of the thread local storage management from thread instances themselves and makes the owning process handle the management of the memory. This brings the memory management slightly more in line with how the kernel handles these allocations. Furthermore, this also makes the TLS page management a little more readable compared to the lingering implementation that was carried over from Citra.
2019-07-03kernel/vm_manager: Add overload of FindFreeRegion() that operates on a boundaryLioncash
This will be necessary for making our TLS slot management slightly more straightforward. This can also be utilized for other purposes in the future. We can implement the existing simpler overload in terms of this one anyways, we just pass the beginning and end of the ASLR region as the boundaries.
2019-06-30Merge pull request #2583 from FernandoS27/core-timing-safebunnei
Core_Timing: Make core_timing threadsafe by default.
2019-06-21Merge pull request #2575 from DarkLordZach/process-id-typesbunnei
kernel: Differentiate kernel and user processes when picking ID
2019-06-21Merge pull request #2482 from DarkLordZach/prepobunnei
core: Add detailed local reporting feature for development
2019-06-16Core_Timing: Make core_timing threadsafe by default.Fernando Sahmkow
The old implementation had faulty Threadsafe methods where events could be missing. This implementation unifies unsafe/safe methods and makes core timing thread safe overall.
2019-06-12kernel/vm_manager: Remove redundant Reset call in destructorLioncash
This is performing more work than would otherwise be necessary during VMManager's destruction. All we actually want to occur in this scenario is for any allocated memory to be freed, which will happen automatically as the VMManager instance goes out of scope. Anything else being done is simply unnecessary work.
2019-06-10kernel: Differentiate kernel and user processes when picking IDZach Hilman
This allows kernel internal type processes to be assigned IDs in the KIP range while userland processes are assigned in the user range.
2019-06-09Merge pull request #2571 from lioncash/refZach Hilman
kernel/process: Make Create()'s name parameter be taken by value
2019-06-09kernel/process: Make Create()'s name parameter be taken by valueLioncash
Makes the interface more flexible in terms of how Create() may be called, while still allowing the parameter itself to be moved into.
2019-06-09kernel/svc: Implement ↵Lioncash
TotalMemoryUsedWithoutMmHeap/TotalMemoryAvailableWithoutMmHeap Given we don't currently implement the personal heap yet, the existing memory querying functions are essentially doing what the memory querying types introduced in 6.0.0 do. So, we can build the necessary machinery over the top of those and just use them as part of info types.
2019-06-09kernel/svc: Amend naming for TotalMemoryUsage in svcGetInfo()Lioncash
Disambiguates and makes the name a little more consistent with TotalPhysicalMemoryUsed.
2019-06-09kernel/svc: Remove duplicate enum entry in svcGetInfo()Lioncash
2019-06-06Merge pull request #2549 from lioncash/headerZach Hilman
kernel/process: Remove unused boost header include
2019-06-05kernel/process: Remove unused boost header includeLioncash
Boost headers typically include a lot of other headers, so removing this can prevent a bit of unnecessary compiler churn when building.
2019-06-04core/core_timing_util: Use std::chrono types for specifying time unitsLioncash
Makes the interface more type-safe and consistent in terms of return values.
2019-05-25svc: Save report on call to svcBreakZach Hilman
2019-05-24Merge pull request #2489 from FearlessTobi/port-4716bunnei
Port citra-emu/citra#4716: "HLE/IPC: HLEContext can memorize the client thread and use it for SleepClientThread"
2019-05-19Merge pull request #2410 from lioncash/affinitybunnei
kernel/svc: Reorganize and fix up the initial handling of svcSetThreadCoreMask()
2019-05-19Merge pull request #2486 from lioncash/resetnameSebastian Valle
core/kernel/object: Rename ResetType enum members for clarity
2019-05-19Address review commentTobias
Co-Authored-By: Mat M. <mathew1800@gmail.com>
2019-05-18kernel/svc: Mark GetThreadList() and UnmapProcessCodeMemory() as internally ↵Lioncash
linked These are only used from within this translation unit, so they don't need to have external linkage. They were intended to be marked with this anyways to be consistent with the other service functions.
2019-05-18core/kernel/object: Rename ResetType enum membersLioncash
Renames the members to more accurately indicate what they signify. "OneShot" and "Sticky" are kind of ambiguous identifiers for the reset types, and can be kind of misleading. Automatic and Manual communicate the kind of reset type in a clearer manner. Either the event is automatically reset, or it isn't and must be manually cleared. The "OneShot" and "Sticky" terminology is just a hold-over from Citra where the kernel had a third type of event reset type known as "Pulse". Given the Switch kernel only has two forms of event reset types, we don't need to keep the old terminology around anymore.
2019-05-18HLE/IPC: HLEContext can memorize the client thread and use it for ↵Weiyi Wang
SleepClientThread This reduces the boilerplate that services have to write out the current thread explicitly. Using current thread instead of client thread is also semantically incorrect, and will be a problem when we implement multicore (at which time there will be multiple current threads)
2019-04-29kernel/svc: Make svcCreateThread/svcStartThread/svcSleepThread/svcExitThread ↵Lioncash
calls show up in the debug log These are actually quite important indicators of thread lifetimes, so they should be going into the debug log, rather than being treated as misc info and delegated to the trace log.
2019-04-29kernel/svc: Reorganize svcSetThreadCoreMask()Lioncash
Makes the code much nicer to follow in terms of behavior and control flow. It also fixes a few bugs in the implementation. Notably, the thread's owner process shouldn't be accessed in order to retrieve the core mask or ideal core. This should be done through the current running process. The only reason this bug wasn't encountered yet is because we currently only support running one process, and thus every owner process will be the current process. We also weren't checking against the process' CPU core mask to see if an allowed core is specified or not. With this out of the way, it'll be less noisy to implement proper handling of the affinity flags internally within the kernel thread instances.
2019-04-29kernel/thread: Update thread processor ID flagsLioncash
Adds the missing flags to the enum and documents them.
2019-04-28Merge pull request #2412 from lioncash/systembunnei
kernel/vm_manager: Remove usages of global system accessors
2019-04-24Merge pull request #2416 from lioncash/waitbunnei
kernel/svc: Clean up wait synchronization related functionality
2019-04-19Merge pull request #2415 from lioncash/constbunnei
kernel/wait_object: Make GetHighestPriorityReadyThread() a const member function
2019-04-19Merge pull request #2421 from lioncash/svc-callbunnei
kernel/svc: Name supervisor call 0x36
2019-04-19Merge pull request #2374 from lioncash/pagetablebunnei
core: Reorganize boot order
2019-04-19kernel/svc: Name supervisor call 0x36Lioncash
This call was added to the SVC handlers in the 8.0.0 kernel, so we can finally give it a name.
2019-04-17Merge pull request #2397 from lioncash/thread-unusedbunnei
kernel/thread: Remove unused guest_handle member variable
2019-04-17kernel/thread: Unify wait synchronization typesLioncash
This is a holdover from Citra, where the 3DS has both WaitSynchronization1 and WaitSynchronizationN. The switch only has one form of wait synchronizing (literally WaitSynchonization). This allows us to throw out code that doesn't apply at all to the Switch kernel. Because of this unnecessary dichotomy within the wait synchronization utilities, we were also neglecting to properly handle waiting on multiple objects. While we're at it, we can also scrub out any lingering references to WaitSynchronization1/WaitSynchronizationN in comments, and change them to WaitSynchronization (or remove them if the mention no longer applies).
2019-04-17kernel/svc: Migrate svcCancelSynchronization behavior to a thread functionLioncash
The actual behavior of this function is slightly more complex than what we're currently doing within the supervisor call. To avoid dumping most of this behavior in the supervisor call itself, we can migrate this to another function.