Lines Matching refs:ev
95 struct kfd_event *ev) in allocate_event_notification_slot() argument
113 id = idr_alloc(&p->event_idr, ev, 0, p->signal_mapped_size / 8, in allocate_event_notification_slot()
118 ev->event_id = id; in allocate_event_notification_slot()
153 struct kfd_event *ev; in lookup_signaled_event_by_partial_id() local
171 for (ev = NULL; id < KFD_SIGNAL_EVENT_LIMIT && !ev; id += 1U << bits) { in lookup_signaled_event_by_partial_id()
175 ev = idr_find(&p->event_idr, id); in lookup_signaled_event_by_partial_id()
178 return ev; in lookup_signaled_event_by_partial_id()
183 struct kfd_event *ev) in create_signal_event() argument
196 ret = allocate_event_notification_slot(p, ev); in create_signal_event()
204 ev->user_signal_address = &p->signal_page->user_address[ev->event_id]; in create_signal_event()
206 p->signal_event_count, ev->event_id, in create_signal_event()
207 ev->user_signal_address); in create_signal_event()
212 static int create_other_event(struct kfd_process *p, struct kfd_event *ev) in create_other_event() argument
219 int id = idr_alloc(&p->event_idr, ev, KFD_FIRST_NONSIGNAL_EVENT_ID, in create_other_event()
225 ev->event_id = id; in create_other_event()
238 static void destroy_event(struct kfd_process *p, struct kfd_event *ev) in destroy_event() argument
243 list_for_each_entry(waiter, &ev->wq.head, wait.entry) in destroy_event()
245 wake_up_all(&ev->wq); in destroy_event()
247 if (ev->type == KFD_EVENT_TYPE_SIGNAL || in destroy_event()
248 ev->type == KFD_EVENT_TYPE_DEBUG) in destroy_event()
251 idr_remove(&p->event_idr, ev->event_id); in destroy_event()
252 kfree(ev); in destroy_event()
257 struct kfd_event *ev; in destroy_events() local
260 idr_for_each_entry(&p->event_idr, ev, id) in destroy_events()
261 destroy_event(p, ev); in destroy_events()
287 static bool event_can_be_gpu_signaled(const struct kfd_event *ev) in event_can_be_gpu_signaled() argument
289 return ev->type == KFD_EVENT_TYPE_SIGNAL || in event_can_be_gpu_signaled()
290 ev->type == KFD_EVENT_TYPE_DEBUG; in event_can_be_gpu_signaled()
293 static bool event_can_be_cpu_signaled(const struct kfd_event *ev) in event_can_be_cpu_signaled() argument
295 return ev->type == KFD_EVENT_TYPE_SIGNAL; in event_can_be_cpu_signaled()
328 struct kfd_event *ev = kzalloc(sizeof(*ev), GFP_KERNEL); in kfd_event_create() local
330 if (!ev) in kfd_event_create()
333 ev->type = event_type; in kfd_event_create()
334 ev->auto_reset = auto_reset; in kfd_event_create()
335 ev->signaled = false; in kfd_event_create()
337 init_waitqueue_head(&ev->wq); in kfd_event_create()
346 ret = create_signal_event(devkfd, p, ev); in kfd_event_create()
349 *event_slot_index = ev->event_id; in kfd_event_create()
353 ret = create_other_event(p, ev); in kfd_event_create()
358 *event_id = ev->event_id; in kfd_event_create()
359 *event_trigger_data = ev->event_id; in kfd_event_create()
361 kfree(ev); in kfd_event_create()
372 struct kfd_event *ev; in kfd_event_destroy() local
377 ev = lookup_event_by_id(p, event_id); in kfd_event_destroy()
379 if (ev) in kfd_event_destroy()
380 destroy_event(p, ev); in kfd_event_destroy()
388 static void set_event(struct kfd_event *ev) in set_event() argument
397 ev->signaled = !ev->auto_reset || !waitqueue_active(&ev->wq); in set_event()
399 list_for_each_entry(waiter, &ev->wq.head, wait.entry) in set_event()
402 wake_up_all(&ev->wq); in set_event()
409 struct kfd_event *ev; in kfd_set_event() local
413 ev = lookup_event_by_id(p, event_id); in kfd_set_event()
415 if (ev && event_can_be_cpu_signaled(ev)) in kfd_set_event()
416 set_event(ev); in kfd_set_event()
424 static void reset_event(struct kfd_event *ev) in reset_event() argument
426 ev->signaled = false; in reset_event()
433 struct kfd_event *ev; in kfd_reset_event() local
437 ev = lookup_event_by_id(p, event_id); in kfd_reset_event()
439 if (ev && event_can_be_cpu_signaled(ev)) in kfd_reset_event()
440 reset_event(ev); in kfd_reset_event()
449 static void acknowledge_signal(struct kfd_process *p, struct kfd_event *ev) in acknowledge_signal() argument
451 page_slots(p->signal_page)[ev->event_id] = UNSIGNALED_EVENT_SLOT; in acknowledge_signal()
455 struct kfd_event *ev) in set_event_from_interrupt() argument
457 if (ev && event_can_be_gpu_signaled(ev)) { in set_event_from_interrupt()
458 acknowledge_signal(p, ev); in set_event_from_interrupt()
459 set_event(ev); in set_event_from_interrupt()
466 struct kfd_event *ev = NULL; in kfd_signal_event_interrupt() local
481 ev = lookup_signaled_event_by_partial_id(p, partial_id, in kfd_signal_event_interrupt()
483 if (ev) { in kfd_signal_event_interrupt()
484 set_event_from_interrupt(p, ev); in kfd_signal_event_interrupt()
502 idr_for_each_entry(&p->event_idr, ev, id) { in kfd_signal_event_interrupt()
507 set_event_from_interrupt(p, ev); in kfd_signal_event_interrupt()
516 ev = lookup_event_by_id(p, id); in kfd_signal_event_interrupt()
517 set_event_from_interrupt(p, ev); in kfd_signal_event_interrupt()
547 struct kfd_event *ev = lookup_event_by_id(p, event_id); in init_event_waiter_get_status() local
549 if (!ev) in init_event_waiter_get_status()
552 waiter->event = ev; in init_event_waiter_get_status()
553 waiter->activated = ev->signaled; in init_event_waiter_get_status()
554 ev->signaled = ev->signaled && !ev->auto_reset; in init_event_waiter_get_status()
561 struct kfd_event *ev = waiter->event; in init_event_waiter_add_to_waitlist() local
567 add_wait_queue(&ev->wq, &waiter->wait); in init_event_waiter_add_to_waitlist()
834 struct kfd_event *ev; in lookup_events_by_type_and_signal() local
841 idr_for_each_entry_continue(&p->event_idr, ev, id) in lookup_events_by_type_and_signal()
842 if (ev->type == type) { in lookup_events_by_type_and_signal()
846 ev->event_id, ev->type); in lookup_events_by_type_and_signal()
847 set_event(ev); in lookup_events_by_type_and_signal()
848 if (ev->type == KFD_EVENT_TYPE_MEMORY && ev_data) in lookup_events_by_type_and_signal()
849 ev->memory_exception_data = *ev_data; in lookup_events_by_type_and_signal()
977 struct kfd_event *ev; in kfd_signal_vm_fault_event() local
1001 idr_for_each_entry_continue(&p->event_idr, ev, id) in kfd_signal_vm_fault_event()
1002 if (ev->type == KFD_EVENT_TYPE_MEMORY) { in kfd_signal_vm_fault_event()
1003 ev->memory_exception_data = memory_exception_data; in kfd_signal_vm_fault_event()
1004 set_event(ev); in kfd_signal_vm_fault_event()
1016 struct kfd_event *ev; in kfd_signal_reset_event() local
1038 idr_for_each_entry_continue(&p->event_idr, ev, id) { in kfd_signal_reset_event()
1039 if (ev->type == KFD_EVENT_TYPE_HW_EXCEPTION) { in kfd_signal_reset_event()
1040 ev->hw_exception_data = hw_exception_data; in kfd_signal_reset_event()
1041 set_event(ev); in kfd_signal_reset_event()
1043 if (ev->type == KFD_EVENT_TYPE_MEMORY && in kfd_signal_reset_event()
1045 ev->memory_exception_data = memory_exception_data; in kfd_signal_reset_event()
1046 set_event(ev); in kfd_signal_reset_event()
1059 struct kfd_event *ev; in kfd_signal_poison_consumed_event() local
1076 idr_for_each_entry_continue(&p->event_idr, ev, id) { in kfd_signal_poison_consumed_event()
1077 if (ev->type == KFD_EVENT_TYPE_HW_EXCEPTION) { in kfd_signal_poison_consumed_event()
1078 ev->hw_exception_data = hw_exception_data; in kfd_signal_poison_consumed_event()
1079 set_event(ev); in kfd_signal_poison_consumed_event()
1082 if (ev->type == KFD_EVENT_TYPE_MEMORY) { in kfd_signal_poison_consumed_event()
1083 ev->memory_exception_data = memory_exception_data; in kfd_signal_poison_consumed_event()
1084 set_event(ev); in kfd_signal_poison_consumed_event()