• Home
  • Raw
  • Download

Lines Matching refs:ev

222 	struct kfd_event *ev;  in lookup_event_by_id()  local
224 hash_for_each_possible(p->events, ev, events, id) in lookup_event_by_id()
225 if (ev->event_id == id) in lookup_event_by_id()
226 return ev; in lookup_event_by_id()
291 struct kfd_event *ev) in create_signal_event() argument
298 if (!allocate_event_notification_slot(devkfd, p, &ev->signal_page, in create_signal_event()
299 &ev->signal_slot_index)) { in create_signal_event()
306 ev->user_signal_address = in create_signal_event()
307 &ev->signal_page->user_address[ev->signal_slot_index]; in create_signal_event()
309 ev->event_id = make_signal_event_id(ev->signal_page, in create_signal_event()
310 ev->signal_slot_index); in create_signal_event()
313 p->signal_event_count, ev->event_id, in create_signal_event()
314 ev->user_signal_address); in create_signal_event()
317 p->signal_event_count, ev->event_id, in create_signal_event()
318 ev->user_signal_address); in create_signal_event()
328 static int create_other_event(struct kfd_process *p, struct kfd_event *ev) in create_other_event() argument
330 ev->event_id = make_nonsignal_event_id(p); in create_other_event()
331 if (ev->event_id == 0) in create_other_event()
346 static void destroy_event(struct kfd_process *p, struct kfd_event *ev) in destroy_event() argument
348 if (ev->signal_page != NULL) { in destroy_event()
349 release_event_notification_slot(ev->signal_page, in destroy_event()
350 ev->signal_slot_index); in destroy_event()
358 list_del(&ev->waiters); in destroy_event()
360 hash_del(&ev->events); in destroy_event()
361 kfree(ev); in destroy_event()
366 struct kfd_event *ev; in destroy_events() local
370 hash_for_each_safe(p->events, hash_bkt, tmp, ev, events) in destroy_events()
371 destroy_event(p, ev); in destroy_events()
396 static bool event_can_be_gpu_signaled(const struct kfd_event *ev) in event_can_be_gpu_signaled() argument
398 return ev->type == KFD_EVENT_TYPE_SIGNAL || in event_can_be_gpu_signaled()
399 ev->type == KFD_EVENT_TYPE_DEBUG; in event_can_be_gpu_signaled()
402 static bool event_can_be_cpu_signaled(const struct kfd_event *ev) in event_can_be_cpu_signaled() argument
404 return ev->type == KFD_EVENT_TYPE_SIGNAL; in event_can_be_cpu_signaled()
413 struct kfd_event *ev = kzalloc(sizeof(*ev), GFP_KERNEL); in kfd_event_create() local
415 if (!ev) in kfd_event_create()
418 ev->type = event_type; in kfd_event_create()
419 ev->auto_reset = auto_reset; in kfd_event_create()
420 ev->signaled = false; in kfd_event_create()
422 INIT_LIST_HEAD(&ev->waiters); in kfd_event_create()
431 ret = create_signal_event(devkfd, p, ev); in kfd_event_create()
433 *event_page_offset = (ev->signal_page->page_index | in kfd_event_create()
436 *event_slot_index = ev->signal_slot_index; in kfd_event_create()
440 ret = create_other_event(p, ev); in kfd_event_create()
445 hash_add(p->events, &ev->events, ev->event_id); in kfd_event_create()
447 *event_id = ev->event_id; in kfd_event_create()
448 *event_trigger_data = ev->event_id; in kfd_event_create()
450 kfree(ev); in kfd_event_create()
461 struct kfd_event *ev; in kfd_event_destroy() local
466 ev = lookup_event_by_id(p, event_id); in kfd_event_destroy()
468 if (ev) in kfd_event_destroy()
469 destroy_event(p, ev); in kfd_event_destroy()
477 static void set_event(struct kfd_event *ev) in set_event() argument
483 ev->signaled = !ev->auto_reset || list_empty(&ev->waiters); in set_event()
485 list_for_each_entry_safe(waiter, next, &ev->waiters, waiters) { in set_event()
499 struct kfd_event *ev; in kfd_set_event() local
503 ev = lookup_event_by_id(p, event_id); in kfd_set_event()
505 if (ev && event_can_be_cpu_signaled(ev)) in kfd_set_event()
506 set_event(ev); in kfd_set_event()
514 static void reset_event(struct kfd_event *ev) in reset_event() argument
516 ev->signaled = false; in reset_event()
523 struct kfd_event *ev; in kfd_reset_event() local
527 ev = lookup_event_by_id(p, event_id); in kfd_reset_event()
529 if (ev && event_can_be_cpu_signaled(ev)) in kfd_reset_event()
530 reset_event(ev); in kfd_reset_event()
539 static void acknowledge_signal(struct kfd_process *p, struct kfd_event *ev) in acknowledge_signal() argument
541 page_slots(ev->signal_page)[ev->signal_slot_index] = in acknowledge_signal() local
551 struct kfd_event *ev) in set_event_from_interrupt() argument
553 if (ev && event_can_be_gpu_signaled(ev)) { in set_event_from_interrupt()
554 acknowledge_signal(p, ev); in set_event_from_interrupt()
555 set_event(ev); in set_event_from_interrupt()
562 struct kfd_event *ev; in kfd_signal_event_interrupt() local
578 ev = lookup_event_by_id(p, partial_id); in kfd_signal_event_interrupt()
579 set_event_from_interrupt(p, ev); in kfd_signal_event_interrupt()
592 ev = lookup_event_by_page_slot(p, in kfd_signal_event_interrupt()
594 set_event_from_interrupt(p, ev); in kfd_signal_event_interrupt()
625 struct kfd_event *ev = lookup_event_by_id(p, event_id); in init_event_waiter() local
627 if (!ev) in init_event_waiter()
630 waiter->event = ev; in init_event_waiter()
632 waiter->activated = ev->signaled; in init_event_waiter()
633 ev->signaled = ev->signaled && !ev->auto_reset; in init_event_waiter()
635 list_add(&waiter->waiters, &ev->waiters); in init_event_waiter()
862 struct kfd_event *ev; in lookup_events_by_type_and_signal() local
868 hash_for_each(p->events, bkt, ev, events) in lookup_events_by_type_and_signal()
869 if (ev->type == type) { in lookup_events_by_type_and_signal()
873 ev->event_id, ev->type); in lookup_events_by_type_and_signal()
874 set_event(ev); in lookup_events_by_type_and_signal()
875 if (ev->type == KFD_EVENT_TYPE_MEMORY && ev_data) in lookup_events_by_type_and_signal()
876 ev->memory_exception_data = *ev_data; in lookup_events_by_type_and_signal()