mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-18 12:19:11 +08:00
drm/amdkfd: update user space last_event_age
Update user space last_event_age when event age is enabled. It is only for KFD_EVENT_TYPE_SIGNAL which is checked by user space. Signed-off-by: James Zhu <James.Zhu@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -865,22 +865,29 @@ static int copy_signaled_event_data(uint32_t num_events,
|
||||
struct kfd_event_waiter *event_waiters,
|
||||
struct kfd_event_data __user *data)
|
||||
{
|
||||
struct kfd_hsa_memory_exception_data *src;
|
||||
struct kfd_hsa_memory_exception_data __user *dst;
|
||||
void *src;
|
||||
void __user *dst;
|
||||
struct kfd_event_waiter *waiter;
|
||||
struct kfd_event *event;
|
||||
uint32_t i;
|
||||
uint32_t i, size = 0;
|
||||
|
||||
for (i = 0; i < num_events; i++) {
|
||||
waiter = &event_waiters[i];
|
||||
event = waiter->event;
|
||||
if (!event)
|
||||
return -EINVAL; /* event was destroyed */
|
||||
if (waiter->activated && event->type == KFD_EVENT_TYPE_MEMORY) {
|
||||
dst = &data[i].memory_exception_data;
|
||||
src = &event->memory_exception_data;
|
||||
if (copy_to_user(dst, src,
|
||||
sizeof(struct kfd_hsa_memory_exception_data)))
|
||||
if (waiter->activated) {
|
||||
if (event->type == KFD_EVENT_TYPE_MEMORY) {
|
||||
dst = &data[i].memory_exception_data;
|
||||
src = &event->memory_exception_data;
|
||||
size = sizeof(struct kfd_hsa_memory_exception_data);
|
||||
} else if (event->type == KFD_EVENT_TYPE_SIGNAL &&
|
||||
waiter->event_age_enabled) {
|
||||
dst = &data[i].signal_event_data.last_event_age;
|
||||
src = &event->event_age;
|
||||
size = sizeof(u64);
|
||||
}
|
||||
if (size && copy_to_user(dst, src, size))
|
||||
return -EFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user