[PATCH 05/16] drm/amdkfd: Fix scheduler race in kfd_wait_on_events sleep loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Oct 21, 2017 at 3:23 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote:
> From: Sean Keely <sean.keely at amd.com>
>
> Signed-off-by: Sean Keely <sean.keely at amd.com>
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_events.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> index 64cc42c..c6d9572 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> @@ -806,6 +806,17 @@ int kfd_wait_on_events(struct kfd_process *p,
>                         break;
>                 }
>
> +               /* Set task state to interruptible sleep before
> +                * checking wake-up conditions. A concurrent wake-up
> +                * will put the task back into runnable state. In that
> +                * case schedule_timeout will not put the task to
> +                * sleep and we'll get a chance to re-check the
> +                * updated conditions almost immediately. Otherwise,
> +                * this race condition would lead to a soft hang or a
> +                * very long sleep.
> +                */
> +               set_current_state(TASK_INTERRUPTIBLE);
> +
>                 if (test_event_condition(all, num_events, event_waiters)) {
>                         if (copy_signaled_event_data(num_events,
>                                         event_waiters, events))
> @@ -820,7 +831,7 @@ int kfd_wait_on_events(struct kfd_process *p,
>                         break;
>                 }
>
> -               timeout = schedule_timeout_interruptible(timeout);
> +               timeout = schedule_timeout(timeout);
>         }
>         __set_current_state(TASK_RUNNING);
>
> --
> 2.7.4
>


This patch is:
Acked-by: Oded Gabbay <oded.gabbay at gmail.com>


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux