[PATCH v2 3/3] drm/amdkfd: don't sleep when event age unmatch

James Zhu jamesz at amd.com
Wed Jun 7 17:49:36 UTC 2023


On 2023-06-07 13:27, Felix Kuehling wrote:
> On 2023-06-06 12:24, James Zhu wrote:
>> Don't sleep when event age unmatch, and update last_event_age.
>> It is only for KFD_EVENT_TYPE_SIGNAL which is checked by user space.
>>
>> Signed-off-by: James Zhu <James.Zhu at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdkfd/kfd_events.c | 15 +++++++++++++++
>>   1 file changed, 15 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c 
>> b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
>> index c7689181cc22..f4ceb5be78ed 100644
>> --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
>> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
>> @@ -952,6 +952,21 @@ int kfd_wait_on_events(struct kfd_process *p,
>>                       event_data.event_id);
>>           if (ret)
>>               goto out_unlock;
>> +
>> +        /* last_event_age = 0 reserved for backward compatible */
>> +        if (event_data.signal_event_data.last_event_age &&
>> +            event_waiters[i].event->event_age !=
>> +                event_data.signal_event_data.last_event_age) {
>> +            event_data.signal_event_data.last_event_age =
>> +                event_waiters[i].event->event_age;
>
> The event_age is updated in set_event under the event->spin_lock. You 
> need to take that lock for this check here as well.
>
> I think the easiest way to do this would be to move the check into 
> init_event_waiter. That way you can initialize the waiter as activated 
> if the event age is not up to date.
[JZ] Sure
>
>
>> + WRITE_ONCE(event_waiters[i].activated, true);
>> +
>> +            if (copy_to_user(&events[i], &event_data,
>> +                sizeof(struct kfd_event_data))) {
>> +                ret = -EFAULT;
>> +                goto out_unlock;
>> +            }
>> +        }
>
> I think we also need to update the event age in event data after an 
> event has signaled. You should probably move updating and copying of 
> the event age to user mode into copy_signaled_event_data. That way it 
> would handle all the cases.
[JZ] Sure
>
> Regards,
>   Felix
>
>
>>       }
>>         /* Check condition once. */


More information about the amd-gfx mailing list