NvHost/Core: Address Feedback.
This commit is contained in:
		@@ -163,19 +163,19 @@ struct System::Impl {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void stallForGPU(bool pause) {
 | 
			
		||||
        if (pause) {
 | 
			
		||||
            suspend_guard.lock();
 | 
			
		||||
            kernel.Suspend(pause);
 | 
			
		||||
            core_timing.SyncPause(pause);
 | 
			
		||||
            cpu_manager.Pause(pause);
 | 
			
		||||
        } else {
 | 
			
		||||
            if (!is_paused) {
 | 
			
		||||
                core_timing.SyncPause(pause);
 | 
			
		||||
                kernel.Suspend(pause);
 | 
			
		||||
                cpu_manager.Pause(pause);
 | 
			
		||||
            }
 | 
			
		||||
            suspend_guard.unlock();
 | 
			
		||||
    std::unique_lock<std::mutex> StallCPU() {
 | 
			
		||||
        std::unique_lock<std::mutex> lk(suspend_guard);
 | 
			
		||||
        kernel.Suspend(true);
 | 
			
		||||
        core_timing.SyncPause(true);
 | 
			
		||||
        cpu_manager.Pause(true);
 | 
			
		||||
        return lk;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void UnstallCPU() {
 | 
			
		||||
        if (!is_paused) {
 | 
			
		||||
            core_timing.SyncPause(false);
 | 
			
		||||
            kernel.Suspend(false);
 | 
			
		||||
            cpu_manager.Pause(false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -487,8 +487,12 @@ void System::Shutdown() {
 | 
			
		||||
    impl->Shutdown();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void System::stallForGPU(bool pause) {
 | 
			
		||||
    impl->stallForGPU(pause);
 | 
			
		||||
std::unique_lock<std::mutex> System::StallCPU() {
 | 
			
		||||
    return impl->StallCPU();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void System::UnstallCPU() {
 | 
			
		||||
    impl->UnstallCPU();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SystemResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <functional>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <mutex>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
@@ -160,7 +161,8 @@ public:
 | 
			
		||||
    /// Shutdown the emulated system.
 | 
			
		||||
    void Shutdown();
 | 
			
		||||
 | 
			
		||||
    void stallForGPU(bool pause);
 | 
			
		||||
    std::unique_lock<std::mutex> StallCPU();
 | 
			
		||||
    void UnstallCPU();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Load an executable application.
 | 
			
		||||
 
 | 
			
		||||
@@ -150,9 +150,11 @@ NvResult nvhost_ctrl::IocCtrlEventWait(const std::vector<u8>& input, std::vector
 | 
			
		||||
    params.value |= event_id;
 | 
			
		||||
    event.event->GetWritableEvent().Clear();
 | 
			
		||||
    if (events_interface.failed[event_id]) {
 | 
			
		||||
        system.stallForGPU(true);
 | 
			
		||||
        gpu.WaitFence(params.syncpt_id, target_value);
 | 
			
		||||
        system.stallForGPU(false);
 | 
			
		||||
        {
 | 
			
		||||
            auto lk = system.StallCPU();
 | 
			
		||||
            gpu.WaitFence(params.syncpt_id, target_value);
 | 
			
		||||
            system.UnstallCPU();
 | 
			
		||||
        }
 | 
			
		||||
        std::memcpy(output.data(), ¶ms, sizeof(params));
 | 
			
		||||
        events_interface.failed[event_id] = false;
 | 
			
		||||
        return NvResult::Success;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user