summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/shared_memory.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* shared_memory: Amend doxygen referenceLioncash2020-04-241-4/+4
| | | | | | Amends the parameter to match the documentation reference. Resolves a -Wdocumentation warning with clang.
* core: hle: Address various feedback & code cleanup.bunnei2020-04-171-2/+2
| | | | - Should be no functional changes.
* kernel: shared_memory: Refactor for new VMM.bunnei2020-04-171-122/+29
|
* kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. (#3154)bunnei2019-11-251-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.
* Kernel: Address FeedbackFernando Sahmkow2019-07-191-2/+2
|
* VM_Manager: Align allocated memory to 256bytesFernando Sahmkow2019-07-191-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.
* kernel/shared_memory: Remove unused core/memory.h includeLioncash2019-03-291-1/+0
| | | | | Nothing from this header is used, so we can remove this include, getting rid of a dependency on it.
* kernel/shared_memory: Sanitize supplied size when unmappingLioncash2019-03-291-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).
* kernel/shared_memory: Get rid of the use of global accessor functions within Create()Lioncash2019-03-041-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.
* Fix Process object leak on emulation stopJens Schmer2018-12-121-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.
* vm_manager: Make vma_map privateLioncash2018-12-061-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.
* kernel/shared_memory: Make Map() and Unmap() take the target process by reference rather than as a pointerLioncash2018-11-191-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.
* kernel/shared_memory: Add a const qualified member function overload for GetPointer()Lioncash2018-11-191-0/+4
| | | | | Given this doesn't mutate instance state, we can provide a const-qualified variant as well.
* kernel/shared_memory: Use 64-bit types for offset and size in CreateForAppletLioncash2018-11-191-1/+1
| | | | Keeps the interface consistent with the regular Create() function.
* kernel/shared_memory: Make GetPointer() take a std::size_t instead of a u32Lioncash2018-11-191-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
* kernel/shared_memory: Return ERR_INVALID_MEMORY_PERMISSIONS instead of ERR_INVALID_COMBINATIONLioncash2018-10-241-4/+3
| | | | This is more consistent with what the kernel does.
* kernel/process: Make data member variables privateLioncash2018-09-301-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.
* memory: Dehardcode the use of fixed memory range constantsLioncash2018-09-251-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.
* kernel: Eliminate kernel global stateLioncash2018-08-291-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.
* kernel/error: Add error code for invalid memory permissionsLioncash2018-08-251-1/+1
|
* kernel/thread: Fix potential crashes introduced in 26de4bb521b1ace7af76eff4f6956cb23ac0d58cLioncash2018-08-041-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).
* core/memory: Get rid of 3DS leftoversLioncash2018-08-031-49/+14
| | | | Removes leftover code from citra that isn't needed.
* kernel: Remove unnecessary includesLioncash2018-07-311-0/+2
| | | | | Removes unnecessary direct dependencies in some headers and also gets rid of indirect dependencies that were being relied on to be included.
* core/memory, core/hle/kernel: Use std::move where applicableLioncash2018-07-191-3/+3
| | | | Avoids pointless copies
* Update clang formatJames Rowe2018-07-031-2/+2
|
* Rename logging macro back to LOG_*James Rowe2018-07-031-3/+3
|
* general: Make formatting of logged hex values more straightforwardLioncash2018-05-021-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).
* kernel/shared_memory: Remove unnecessary semicolon at end of ConvertPermissions()Lioncash2018-04-261-1/+1
| | | | Functions don't need to be terminated by semicolons.
* kernel: Migrate logging macros to fmt-compatible onesLioncash2018-04-261-7/+8
|
* shared_memory: Remove incorrect 3ds-specific check.bunnei2018-04-031-12/+0
|
* Clang FixesN00byKing2018-03-191-4/+3
|
* More Warning cleanupsN00byKing2018-03-191-1/+1
|
* Clean Warnings (?)N00byKing2018-03-191-3/+3
|
* core: Move process creation out of global state.bunnei2018-03-141-2/+3
|
* shared_memory: Remove some checks.bunnei2018-02-151-13/+0
|
* svc: SharedMemory size should be 64-bits and cleanup.bunnei2018-02-031-1/+1
|
* shared_memory: Only mark addresses as invalid if they are within the heapshinyquagsire232018-01-301-1/+2
|
* shared_memory: Minor fixes and cleanup.bunnei2018-01-141-6/+6
|
* Kernel/SharedMemory: Don't take over and unmap the source memory block when creating a shared memory, just reference it.Subv2017-10-021-15/+12
| | | | Also reference the right offset into the backing block for the requested address.
* Fixed type conversion ambiguityHuw Pascoe2017-09-301-1/+2
|
* Memory: Make PhysicalToVirtualAddress return a boost::optionalYuri Kunde Schlesner2017-06-221-1/+1
| | | | And fix a few places in the code to take advantage of that.
* Kernel: Centralize error definitions in errors.hYuri Kunde Schlesner2017-05-251-10/+6
|
* Use negative priorities to avoid special-casing the self-includeYuri Kunde Schlesner2016-09-211-1/+1
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-3/+1
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Manually tweak source formatting and then re-run clang-formatYuri Kunde Schlesner2016-09-191-4/+2
|
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-26/+49
|
* HLE/Applets: Give each applet its own block of heap memory, and use that when creating the framebuffer shared memory block.Subv2016-05-131-0/+17
|
* Kernel: Account for automatically-allocated shared memories in the amount of used linear heap memory.Subv2016-05-131-0/+5
|
* Kernel/SharedMemory: Log an error when Map fails.Subv2016-05-131-1/+10
|
* Kernel: Implemented shared memory permissions.Subv2016-05-131-9/+41
|
* Kernel/SharedMemory: Properly implemented shared memory support.Subv2016-05-131-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.
* HLE/SVC: Implement UnmapMemoryBlock.Subv2016-01-141-0/+21
| | | | This implementation will need to be (almost completely) changed when we implement multiprocess support.
* Core: Improve APT Shared Font hackYuri Kunde Schlesner2015-08-271-2/+25
| | | | Should fix invalid read loops in some games
* Memmap: Re-organize memory function in two filesYuri Kunde Schlesner2015-05-151-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.
* Kernel: Zero-fill shared memory blocks when mappingYuri Kunde Schlesner2015-05-111-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.
* Kernel: Capture SharedMemory attributes at creation, not when mappingYuri Kunde Schlesner2015-05-111-9/+11
|
* Common: Remove common.hYuri Kunde Schlesner2015-05-071-1/+1
|
* Initialize base address to 0x0Gareth Higgins2015-04-091-0/+1
|
* Kernel: Stop creating useless Handles during object creationYuri Kunde Schlesner2015-02-021-5/+3
| | | | | They're finally unnecessary, and will stop cluttering the application's handle table.
* Explicitly instantiate constructors/destructors for Kernel objectsYuri Kunde Schlesner2015-02-021-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.)
* Kernel: Introduce unique Object ids for debuggingYuri Kunde Schlesner2015-02-021-3/+3
|
* shared_memory: Fix assignments in SharedMemory::MapLioncash2015-01-301-3/+3
|
* Kernel: Convert SharedMemory to not use HandlesYuri Kunde Schlesner2015-01-301-47/+18
|
* Kernel: Remove useless/duplicated comments; mark functions staticYuri Kunde Schlesner2015-01-301-9/+1
|
* Kernel: Start using boost::intrusive_ptr for lifetime managementYuri Kunde Schlesner2015-01-091-2/+2
|
* Kernel: New handle managerYuri Kunde Schlesner2014-12-281-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.
* Kernel: Replace GetStaticHandleType by HANDLE_TYPE constantsYuri Kunde Schlesner2014-12-281-2/+2
|
* Rename ObjectPool to HandleTableYuri Kunde Schlesner2014-12-281-3/+3
|
* License changepurpasmart962014-12-211-1/+1
|
* Convert old logging calls to new logging macrosYuri Kunde Schlesner2014-12-131-8/+2
|
* Remove duplicated docs/update them for changed parameters.Yuri Kunde Schlesner2014-11-241-16/+0
|
* HLE: Revamp error handling throrough the HLE codeYuri Kunde Schlesner2014-11-241-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.
* Remove trailing spaces in every file but the ones imported from SkyEye, AOSP or generatedEmmanuel Gil Peyrot2014-11-191-2/+2
|
* Fix two format strings.Lioncash2014-11-141-1/+1
|
* Add `override` keyword through the code.Yuri Kunde Schlesner2014-10-261-3/+3
| | | | This was automated using `clang-modernize`.
* Core: Alter the kernel string functions to use std::string instead of const char*.Lioncash2014-08-181-1/+1
| | | | Most functions already operate on std::strings. This also removes the need to manually null terminate thread names.
* SharedMemory: Updated MapSharedMemory to use an enum for permissions.bunnei2014-07-051-5/+16
| | | | - Also added some safety checks to MapSharedMemory.
* Kernel: Added support for shared memory objects.bunnei2014-07-051-0/+94
SharedMemory: Added optional name field for tracking known objects.