summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_shared_memory.cpp (unfollow)
Commit message (Collapse)AuthorFilesLines
2021-02-19hle: kernel: Migrate PageHeap/PageTable to KPageHeap/KPageTable.bunnei1-3/+2
2021-02-19hle: kernel: Migrate PageLinkedList to KPageLinkedList.bunnei1-1/+1
2021-02-19hle: kernel: Migrate to KMemoryBlock, KMemoryBlockManager, and others.bunnei1-6/+6
2021-02-19hle: kernel: Rename SharedMemory to KSharedMemory.bunnei1-8/+8
2021-02-13kernel: More accurately reserve and release resourcesameerj1-1/+3
2021-02-13kernel: KScopedReservation implementationameerj1-0/+7
This implements KScopedReservation, allowing resource limit reservations to be more HW accurate, and release upon failure without requiring too many conditionals.
2020-04-24shared_memory: Amend doxygen referenceLioncash1-4/+4
Amends the parameter to match the documentation reference. Resolves a -Wdocumentation warning with clang.
2020-04-17core: hle: Address various feedback & code cleanup.bunnei1-2/+2
- Should be no functional changes.
2020-04-17kernel: shared_memory: Refactor for new VMM.bunnei1-122/+29
2019-11-25kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. (#3154)bunnei1-7/+8
* kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. - See https://github.com/citra-emu/citra/pull/4710 for details.
2019-07-19Kernel: Address FeedbackFernando Sahmkow1-2/+2
2019-07-19VM_Manager: Align allocated memory to 256bytesFernando Sahmkow1-2/+2
This commit ensures that all backing memory allocated for the Guest CPU is aligned to 256 bytes. This due to how gpu memory works and the heavy constraints it has in the alignment of physical memory.
2019-03-29kernel/shared_memory: Remove unused core/memory.h includeLioncash1-1/+0
Nothing from this header is used, so we can remove this include, getting rid of a dependency on it.
2019-03-29kernel/shared_memory: Sanitize supplied size when unmappingLioncash1-1/+9
The kernel makes sure that the given size to unmap is always the same size as the entire region managed by the shared memory instance, otherwise it returns an error code signifying an invalid size. This is similarly done for transfer memory (which we already check for).
2019-03-04kernel/shared_memory: Get rid of the use of global accessor functions within Create()Lioncash1-3/+2
Given we already pass in a reference to the kernel that the shared memory instance is created under, we can just use that to check the current process, rather than using the global accessor functions. This allows removing direct dependency on the system instance entirely.
2018-12-12Fix Process object leak on emulation stopJens Schmer1-3/+3
The Process object kept itself alive indefinitely because its handle_table contains a SharedMemory object which owns a reference to the same Process object, creating a circular ownership scenario. Break that up by storing only a non-owning pointer in the SharedMemory object.
2018-12-06vm_manager: Make vma_map privateLioncash1-4/+4
This was only ever public so that code could check whether or not a handle was valid or not. Instead of exposing the object directly and allowing external code to potentially mess with the map contents, we just provide a member function that allows checking whether or not a handle is valid. This makes all member variables of the VMManager class private except for the page table.
2018-11-19kernel/shared_memory: Make Map() and Unmap() take the target process by reference rather than as a pointerLioncash1-7/+7
Both member functions assume the passed in target process will not be null. Instead of making this assumption implicit, we can change the functions to be references and enforce this at the type-system level.
2018-11-19kernel/shared_memory: Add a const qualified member function overload for GetPointer()Lioncash1-0/+4
Given this doesn't mutate instance state, we can provide a const-qualified variant as well.
2018-11-19kernel/shared_memory: Use 64-bit types for offset and size in CreateForAppletLioncash1-1/+1
Keeps the interface consistent with the regular Create() function.
2018-11-19kernel/shared_memory: Make GetPointer() take a std::size_t instead of a u32Lioncash1-1/+1
Makes the interface nicer to use in terms of 64-bit code, as it makes it less likely for one to get truncation warnings (and also makes sense in the context of the rest of the interface where 64-bit types are used for sizes and offsets
2018-10-24kernel/shared_memory: Return ERR_INVALID_MEMORY_PERMISSIONS instead of ERR_INVALID_COMBINATIONLioncash1-4/+3
This is more consistent with what the kernel does.
2018-09-30kernel/process: Make data member variables privateLioncash1-7/+7
Makes the public interface consistent in terms of how accesses are done on a process object. It also makes it slightly nicer to reason about the logic of the process class, as we don't want to expose everything to external code.
2018-09-25memory: Dehardcode the use of fixed memory range constantsLioncash1-1/+3
The locations of these can actually vary depending on the address space layout, so we shouldn't be using these when determining where to map memory or be using them as offsets for calculations. This keeps all the memory ranges flexible and malleable based off of the virtual memory manager instance state.
2018-08-29kernel: Eliminate kernel global stateLioncash1-11/+9
As means to pave the way for getting rid of global state within core, This eliminates kernel global state by removing all globals. Instead this introduces a KernelCore class which acts as a kernel instance. This instance lives in the System class, which keeps its lifetime contained to the lifetime of the System class. This also forces the kernel types to actually interact with the main kernel instance itself instead of having transient kernel state placed all over several translation units, keeping everything together. It also has a nice consequence of making dependencies much more explicit. This also makes our initialization a tad bit more correct. Previously we were creating a kernel process before the actual kernel was initialized, which doesn't really make much sense. The KernelCore class itself follows the PImpl idiom, which allows keeping all the implementation details sealed away from everything else, which forces the use of the exposed API and allows us to avoid any unnecessary inclusions within the main kernel header.
2018-08-25kernel/error: Add error code for invalid memory permissionsLioncash1-1/+1
2018-08-04kernel/thread: Fix potential crashes introduced in 26de4bb521b1ace7af76eff4f6956cb23ac0d58cLioncash1-13/+25
This amends cases where crashes can occur that were missed due to the odd way the previous code was set up (using 3DS memory regions that don't exist).
2018-08-03core/memory: Get rid of 3DS leftoversLioncash1-49/+14
Removes leftover code from citra that isn't needed.
2018-07-31kernel: Remove unnecessary includesLioncash1-0/+2
Removes unnecessary direct dependencies in some headers and also gets rid of indirect dependencies that were being relied on to be included.
2018-07-19core/memory, core/hle/kernel: Use std::move where applicableLioncash1-3/+3
Avoids pointless copies
2018-07-03Update clang formatJames Rowe1-2/+2
2018-07-03Rename logging macro back to LOG_*James Rowe1-3/+3
2018-05-02general: Make formatting of logged hex values more straightforwardLioncash1-3/+3
This makes the formatting expectations more obvious (e.g. any zero padding specified is padding that's entirely dedicated to the value being printed, not any pretty-printing that also gets tacked on).
2018-04-26kernel/shared_memory: Remove unnecessary semicolon at end of ConvertPermissions()Lioncash1-1/+1
Functions don't need to be terminated by semicolons.
2018-04-26kernel: Migrate logging macros to fmt-compatible onesLioncash1-7/+8
2018-04-03shared_memory: Remove incorrect 3ds-specific check.bunnei1-12/+0
2018-03-19Clang FixesN00byKing1-4/+3
2018-03-19More Warning cleanupsN00byKing1-1/+1
2018-03-19Clean Warnings (?)N00byKing1-3/+3
2018-03-14core: Move process creation out of global state.bunnei1-2/+3
2018-02-15shared_memory: Remove some checks.bunnei1-13/+0
2018-02-03svc: SharedMemory size should be 64-bits and cleanup.bunnei1-1/+1
2018-01-30shared_memory: Only mark addresses as invalid if they are within the heapshinyquagsire231-1/+2
2018-01-14shared_memory: Minor fixes and cleanup.bunnei1-6/+6
2017-10-02Kernel/SharedMemory: Don't take over and unmap the source memory block when creating a shared memory, just reference it.Subv1-15/+12
Also reference the right offset into the backing block for the requested address.
2017-09-30Fixed type conversion ambiguityHuw Pascoe1-1/+2
2017-06-22Memory: Make PhysicalToVirtualAddress return a boost::optionalYuri Kunde Schlesner1-1/+1
And fix a few places in the code to take advantage of that.
2017-05-25Kernel: Centralize error definitions in errors.hYuri Kunde Schlesner1-10/+6
2016-09-21Use negative priorities to avoid special-casing the self-includeYuri Kunde Schlesner1-1/+1
2016-09-21Remove empty newlines in #include blocks.Emmanuel Gil Peyrot1-3/+1
This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
2016-09-19Manually tweak source formatting and then re-run clang-formatYuri Kunde Schlesner1-4/+2
2016-09-18Sources: Run clang-format on everything.Emmanuel Gil Peyrot1-26/+49
2016-05-13HLE/Applets: Give each applet its own block of heap memory, and use that when creating the framebuffer shared memory block.Subv1-0/+17
2016-05-13Kernel: Account for automatically-allocated shared memories in the amount of used linear heap memory.Subv1-0/+5
2016-05-13Kernel/SharedMemory: Log an error when Map fails.Subv1-1/+10
2016-05-13Kernel: Implemented shared memory permissions.Subv1-9/+41
2016-05-13Kernel/SharedMemory: Properly implemented shared memory support.Subv1-57/+59
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-01-14HLE/SVC: Implement UnmapMemoryBlock.Subv1-0/+21
This implementation will need to be (almost completely) changed when we implement multiprocess support.
2015-08-27Core: Improve APT Shared Font hackYuri Kunde Schlesner1-2/+25
Should fix invalid read loops in some games
2015-05-15Memmap: Re-organize memory function in two filesYuri Kunde Schlesner1-1/+1
memory.cpp/h contains definitions related to acessing memory and configuring the address space mem_map.cpp/h contains higher-level definitions related to configuring the address space accoording to the kernel and allocating memory.
2015-05-11Kernel: Zero-fill shared memory blocks when mappingYuri Kunde Schlesner1-0/+8
This works around crashes related to GSP/HID/etc. shared memory blocks having garbage values. The proper fix requires proper management of mapped memory blocks in the process.
2015-05-11Kernel: Capture SharedMemory attributes at creation, not when mappingYuri Kunde Schlesner1-9/+11
2015-05-07Common: Remove common.hYuri Kunde Schlesner1-1/+1
2015-04-09Initialize base address to 0x0Gareth Higgins1-0/+1
2015-02-02Kernel: Stop creating useless Handles during object creationYuri Kunde Schlesner1-5/+3
They're finally unnecessary, and will stop cluttering the application's handle table.
2015-02-02Explicitly instantiate constructors/destructors for Kernel objectsYuri Kunde Schlesner1-0/+3
This should speed up compile times a bit, as well as enable more liberal use of forward declarations. (Due to SharedPtr not trying to emit the destructor anymore.)
2015-02-02Kernel: Introduce unique Object ids for debuggingYuri Kunde Schlesner1-3/+3
2015-01-30shared_memory: Fix assignments in SharedMemory::MapLioncash1-3/+3
2015-01-30Kernel: Convert SharedMemory to not use HandlesYuri Kunde Schlesner1-47/+18
2015-01-30Kernel: Remove useless/duplicated comments; mark functions staticYuri Kunde Schlesner1-9/+1
2015-01-09Kernel: Start using boost::intrusive_ptr for lifetime managementYuri Kunde Schlesner1-2/+2
2014-12-28Kernel: New handle managerYuri Kunde Schlesner1-1/+2
This handle manager more closely mirrors the behaviour of the CTR-OS one. In addition object ref-counts and support for DuplicateHandle have been added. Note that support for DuplicateHandle is still experimental, since parts of the kernel still use Handles internally, which will likely cause troubles if two different handles to the same object are used to e.g. wait on a synchronization primitive.
2014-12-28Kernel: Replace GetStaticHandleType by HANDLE_TYPE constantsYuri Kunde Schlesner1-2/+2
2014-12-28Rename ObjectPool to HandleTableYuri Kunde Schlesner1-3/+3
2014-12-21License changepurpasmart961-1/+1
2014-12-13Convert old logging calls to new logging macrosYuri Kunde Schlesner1-8/+2
2014-11-24Remove duplicated docs/update them for changed parameters.Yuri Kunde Schlesner1-16/+0
2014-11-24HLE: Revamp error handling throrough the HLE codeYuri Kunde Schlesner1-12/+15
All service calls in the CTR OS return result codes indicating the success or failure of the call. Previous to this commit, Citra's HLE emulation of services and the kernel universally either ignored errors or returned dummy -1 error codes. This commit makes an initial effort to provide an infrastructure for error reporting and propagation which can be use going forward to make HLE calls accurately return errors as the original system. A few parts of the code have been updated to use the new system where applicable. One part of this effort is the definition of the `ResultCode` type, which provides facilities for constructing and parsing error codes in the structured format used by the CTR. The `ResultVal` type builds on `ResultCode` by providing a container for values returned by function that can report errors. It enforces that correct error checking will be done on function returns by preventing the use of the return value if the function returned an error code. Currently this change is mostly internal since errors are still suppressed on the ARM<->HLE border, as a temporary compatibility hack. As functionality is implemented and tested this hack can be eventually removed.
2014-11-19Remove trailing spaces in every file but the ones imported from SkyEye, AOSP or generatedEmmanuel Gil Peyrot1-2/+2
2014-11-14Fix two format strings.Lioncash1-1/+1
2014-10-26Add `override` keyword through the code.Yuri Kunde Schlesner1-3/+3
This was automated using `clang-modernize`.
2014-08-18Core: Alter the kernel string functions to use std::string instead of const char*.Lioncash1-1/+1
Most functions already operate on std::strings. This also removes the need to manually null terminate thread names.
2014-07-05SharedMemory: Updated MapSharedMemory to use an enum for permissions.bunnei1-5/+16
- Also added some safety checks to MapSharedMemory.
2014-07-05Kernel: Added support for shared memory objects.bunnei1-0/+94
SharedMemory: Added optional name field for tracking known objects.