Lines Matching defs:event
137 * memcg which the event belongs to.
141 * eventfd to signal userspace about the event.
150 * waiter for changes related to this event. Use eventfd_signal()
163 * All fields below needed to unregister event when
506 * because their event counter is not touched.
692 /* Subset of vm_event_item to report for memcg event stats */
923 * @idx: the event item
944 static unsigned long memcg_events(struct mem_cgroup *memcg, int event)
946 int index = memcg_events_index(event);
953 static unsigned long memcg_events_local(struct mem_cgroup *memcg, int event)
955 int index = memcg_events_index(event);
966 /* pagein of a big page is an event. So, ignore page size */
971 nr_pages = -nr_pages; /* for event */
1011 /* threshold event is triggered in finer grain than soft limit */
1601 * well as cumulative event counters that show past behavior.
2787 * a MEMCG_MAX event.
4519 struct mem_cgroup_eventfd_list *event;
4521 event = kmalloc(sizeof(*event), GFP_KERNEL);
4522 if (!event)
4527 event->eventfd = eventfd;
4528 list_add(&event->list, &memcg->oom_notify);
4809 * Unregister event and free resources.
4815 struct mem_cgroup_event *event =
4817 struct mem_cgroup *memcg = event->memcg;
4819 remove_wait_queue(event->wqh, &event->wait);
4821 event->unregister_event(memcg, event->eventfd);
4823 /* Notify userspace the event is going away. */
4824 eventfd_signal(event->eventfd, 1);
4826 eventfd_ctx_put(event->eventfd);
4827 kfree(event);
4839 struct mem_cgroup_event *event =
4841 struct mem_cgroup *memcg = event->memcg;
4846 * If the event has been detached at cgroup removal, we
4850 * We can't race against event freeing since the other
4855 if (!list_empty(&event->list)) {
4856 list_del_init(&event->list);
4861 schedule_work(&event->remove);
4872 struct mem_cgroup_event *event =
4875 event->wqh = wqh;
4876 add_wait_queue(wqh, &event->wait);
4882 * Parse input and register new cgroup event handler.
4892 struct mem_cgroup_event *event;
4917 event = kzalloc(sizeof(*event), GFP_KERNEL);
4918 if (!event)
4921 event->memcg = memcg;
4922 INIT_LIST_HEAD(&event->list);
4923 init_poll_funcptr(&event->pt, memcg_event_ptable_queue_proc);
4924 init_waitqueue_func_entry(&event->wait, memcg_event_wake);
4925 INIT_WORK(&event->remove, memcg_event_remove);
4933 event->eventfd = eventfd_ctx_fileget(efile.file);
4934 if (IS_ERR(event->eventfd)) {
4935 ret = PTR_ERR(event->eventfd);
4962 * Determine the event callbacks and set them in @event. This used
4972 event->register_event = mem_cgroup_usage_register_event;
4973 event->unregister_event = mem_cgroup_usage_unregister_event;
4975 event->register_event = mem_cgroup_oom_register_event;
4976 event->unregister_event = mem_cgroup_oom_unregister_event;
4978 event->register_event = vmpressure_register_event;
4979 event->unregister_event = vmpressure_unregister_event;
4981 event->register_event = memsw_cgroup_usage_register_event;
4982 event->unregister_event = memsw_cgroup_usage_unregister_event;
5003 ret = event->register_event(memcg, event->eventfd, buf);
5007 vfs_poll(efile.file, &event->pt);
5010 list_add(&event->list, &memcg->event_list);
5023 eventfd_ctx_put(event->eventfd);
5027 kfree(event);
5508 struct mem_cgroup_event *event, *tmp;
5525 list_for_each_entry_safe(event, tmp, &memcg->event_list, list) {
5526 list_del_init(&event->list);
5527 schedule_work(&event->remove);