<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="moz-cite-prefix">On 2024-04-01 17:53, Zhigang Luo wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:20240401215349.23361-1-Zhigang.Luo@amd.com">
      <pre class="moz-quote-pre" wrap="">If there are more than one device doing reset in parallel, the first
device will call kfd_suspend_all_processes() to evict all processes
on all devices, this call takes time to finish. other device will
start reset and recover without waiting. if the process has not been
evicted before doing recover, it will be restored, then caused page
fault.

Signed-off-by: Zhigang Luo <a class="moz-txt-link-rfc2396E" href="mailto:Zhigang.Luo@amd.com"><Zhigang.Luo@amd.com></a>
Change-Id: Ib1eddb56b69ecd41fe703abd169944154f48b0cd</pre>
    </blockquote>
    <p>Please remove the Change-Id: before you push. Other than that,
      this patch is</p>
    <br>
    <blockquote type="cite" cite="mid:20240401215349.23361-1-Zhigang.Luo@amd.com">
      <pre class="moz-quote-pre" wrap="">
---
 drivers/gpu/drm/amd/amdkfd/kfd_device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 041ec3de55e7..55f89c858c7a 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -969,11 +969,11 @@ void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm)
        if (!run_pm) {
                mutex_lock(&kfd_processes_mutex);
                count = ++kfd_locked;
-               mutex_unlock(&kfd_processes_mutex);
 
                /* For first KFD device suspend all the KFD processes */
                if (count == 1)
                        kfd_suspend_all_processes();</pre>
    </blockquote>
    <p>This could be simplified now. The variable "count" was only
      needed for the broken attempt to do call suspend outside the lock.
      Now you can just do:</p>
    <pre> mutex_lock(&kfd_processes_mutex);
        if (++kfd_locked == 1)
                kfd_suspend_all_processes();
        mutex_unlock(&kfd_processes_mutex);
</pre>
    <p>To be consistent, we probably need to make a similar change in
      kgd2kfd_resume and run kfd_resume_all_processes under the lock as
      well. Otherwise there could be a race condition between suspend
      and resume.<br>
    </p>
    <p>Regards,<br>
        Felix</p>
    <p><br>
    </p>
    <blockquote type="cite" cite="mid:20240401215349.23361-1-Zhigang.Luo@amd.com">
      <pre class="moz-quote-pre" wrap="">
+               mutex_unlock(&kfd_processes_mutex);
        }
 
        for (i = 0; i < kfd->num_nodes; i++) {
</pre>
    </blockquote>
  </body>
</html>