1. 12 Apr, 2019 8 commits
    • Lioncash's avatar
      core/process: Remove unideal page table setting from LoadFromMetadata() · 32a6ceb4
      Lioncash authored
      Initially required due to the split codepath with how the initial main
      process instance was initialized. We used to initialize the process
      like:
      
      Init() {
          main_process = Process::Create(...);
          kernel.MakeCurrentProcess(main_process.get());
      }
      
      Load() {
          const auto load_result = loader.Load(*kernel.GetCurrentProcess());
          if (load_result != Loader::ResultStatus::Success) {
              // Handle error here.
          }
          ...
      }
      
      which presented a problem.
      
      Setting a created process as the main process would set the page table
      for that process as the main page table. This is fine... until we get to
      the part that the page table can have its size changed in the Load()
      function via NPDM metadata, which can dictate either a 32-bit, 36-bit,
      or 39-bit usable address space.
      
      Now that we have full control over the process' creation in load, we can
      simply set the initial process as the main process after all the loading
      is done, reflecting the potential page table changes without any
      special-casing behavior.
      
      We can also remove the cache flushing within LoadModule(), as execution
      wouldn't have even begun yet during all usages of this function, now
      that we have the initialization order cleaned up.
      32a6ceb4
    • Lioncash's avatar
      core/core: Move main process creation into Load() · a4b0a855
      Lioncash authored
      Now that we have dependencies on the initialization order, we can move
      the creation of the main process to a more sensible area: where we
      actually load in the executable data.
      
      This allows localizing the creation and loading of the process in one
      location, making the initialization of the process much nicer to trace.
      a4b0a855
    • Lioncash's avatar
      video_core/gpu: Create threads separately from initialization · 6d055119
      Lioncash authored
      Like with CPU emulation, we generally don't want to fire off the threads
      immediately after the relevant classes are initialized, we want to do
      this after all necessary data is done loading first.
      
      This splits the thread creation into its own interface member function
      to allow controlling when these threads in particular get created.
      6d055119
    • Lioncash's avatar
      core/cpu_core_manager: Create threads separately from initialization. · f2331a80
      Lioncash authored
      Our initialization process is a little wonky than one would expect when
      it comes to code flow. We initialize the CPU last, as opposed to
      hardware, where the CPU obviously needs to be first, otherwise nothing
      else would work, and we have code that adds checks to get around this.
      
      For example, in the page table setting code, we check to see if the
      system is turned on before we even notify the CPU instances of a page
      table switch. This results in dead code (at the moment), because the
      only time a page table switch will occur is when the system is *not*
      running, preventing the emulated CPU instances from being notified of a
      page table switch in a convenient manner (technically the code path
      could be taken, but we don't emulate the process creation svc handlers
      yet).
      
      This moves the threads creation into its own member function of the core
      manager and restores a little order (and predictability) to our
      initialization process.
      
      Previously, in the multi-threaded cases, we'd kick off several threads
      before even the main kernel process was created and ready to execute (gross!).
      Now the initialization process is like so:
      
      Initialization:
        1. Timers
      
        2. CPU
      
        3. Kernel
      
        4. Filesystem stuff (kind of gross, but can be amended trivially)
      
        5. Applet stuff (ditto in terms of being kind of gross)
      
        6. Main process (will be moved into the loading step in a following
                         change)
      
        7. Telemetry (this should be initialized last in the future).
      
        8. Services (4 and 5 should ideally be alongside this).
      
        9. GDB (gross. Uses namespace scope state. Needs to be refactored into a
                class or booted altogether).
      
        10. Renderer
      
        11. GPU (will also have its threads created in a separate step in a
                 following change).
      
      Which... isn't *ideal* per-se, however getting rid of the wonky
      intertwining of CPU state initialization out of this mix gets rid of
      most of the footguns when it comes to our initialization process.
      f2331a80
    • bunnei's avatar
      Merge pull request #2235 from ReinUsesLisp/spirv-decompiler · ea80e2bc
      bunnei authored
      vk_shader_decompiler: Implement a SPIR-V decompiler
      ea80e2bc
    • bunnei's avatar
      Merge pull request #2360 from lioncash/svc-global · 83a2fb3c
      bunnei authored
      kernel/svc: Deglobalize the supervisor call handlers
      83a2fb3c
    • bunnei's avatar
      Merge pull request #2388 from lioncash/constexpr · e2f2155d
      bunnei authored
      kernel: Make handle type declarations constexpr
      e2f2155d
    • bunnei's avatar
      Merge pull request #2387 from FernandoS27/fast-copy-relax · c0b2b702
      bunnei authored
      gl_rasterizer_cache: Relax restrictions on FastCopySurface
      c0b2b702
  2. 11 Apr, 2019 4 commits
  3. 10 Apr, 2019 17 commits
  4. 09 Apr, 2019 11 commits