Lines Matching full:list
41 static inline bool hidraw_is_revoked(struct hidraw_list *list) in hidraw_is_revoked() argument
43 return list->revoked; in hidraw_is_revoked()
48 struct hidraw_list *list = file->private_data; in hidraw_read() local
52 if (hidraw_is_revoked(list)) in hidraw_read()
55 mutex_lock(&list->read_mutex); in hidraw_read()
58 if (list->head == list->tail) { in hidraw_read()
59 add_wait_queue(&list->hidraw->wait, &wait); in hidraw_read()
62 while (list->head == list->tail) { in hidraw_read()
67 if (!list->hidraw->exist) { in hidraw_read()
77 mutex_unlock(&list->read_mutex); in hidraw_read()
79 mutex_lock(&list->read_mutex); in hidraw_read()
84 remove_wait_queue(&list->hidraw->wait, &wait); in hidraw_read()
90 len = list->buffer[list->tail].len > count ? in hidraw_read()
91 count : list->buffer[list->tail].len; in hidraw_read()
93 if (list->buffer[list->tail].value) { in hidraw_read()
94 if (copy_to_user(buffer, list->buffer[list->tail].value, len)) { in hidraw_read()
101 kfree(list->buffer[list->tail].value); in hidraw_read()
102 list->buffer[list->tail].value = NULL; in hidraw_read()
103 list->tail = (list->tail + 1) & (HIDRAW_BUFFER_SIZE - 1); in hidraw_read()
106 mutex_unlock(&list->read_mutex); in hidraw_read()
172 struct hidraw_list *list = file->private_data; in hidraw_write() local
175 if (hidraw_is_revoked(list)) in hidraw_write()
265 struct hidraw_list *list = file->private_data; in hidraw_poll() local
268 poll_wait(file, &list->hidraw->wait, wait); in hidraw_poll()
269 if (list->head != list->tail) in hidraw_poll()
271 if (!list->hidraw->exist || hidraw_is_revoked(list)) in hidraw_poll()
280 struct hidraw_list *list; in hidraw_open() local
284 if (!(list = kzalloc(sizeof(struct hidraw_list), GFP_KERNEL))) { in hidraw_open()
316 list->hidraw = hidraw_table[minor]; in hidraw_open()
317 mutex_init(&list->read_mutex); in hidraw_open()
319 list_add_tail(&list->node, &hidraw_table[minor]->list); in hidraw_open()
321 file->private_data = list; in hidraw_open()
326 kfree(list); in hidraw_open()
333 struct hidraw_list *list = file->private_data; in hidraw_fasync() local
335 if (hidraw_is_revoked(list)) in hidraw_fasync()
338 return fasync_helper(fd, file, on, &list->fasync); in hidraw_fasync()
369 struct hidraw_list *list = file->private_data; in hidraw_release() local
375 while (list->tail != list->head) { in hidraw_release()
376 kfree(list->buffer[list->tail].value); in hidraw_release()
377 list->buffer[list->tail].value = NULL; in hidraw_release()
378 list->tail = (list->tail + 1) & (HIDRAW_BUFFER_SIZE - 1); in hidraw_release()
380 list_del(&list->node); in hidraw_release()
382 kfree(list); in hidraw_release()
390 static int hidraw_revoke(struct hidraw_list *list) in hidraw_revoke() argument
392 list->revoked = true; in hidraw_revoke()
404 struct hidraw_list *list = file->private_data; in hidraw_ioctl() local
409 if (!dev || !dev->exist || hidraw_is_revoked(list)) { in hidraw_ioctl()
452 ret = hidraw_revoke(list); in hidraw_ioctl()
553 struct hidraw_list *list; in hidraw_report_event() local
558 list_for_each_entry(list, &dev->list, node) { in hidraw_report_event()
559 int new_head = (list->head + 1) & (HIDRAW_BUFFER_SIZE - 1); in hidraw_report_event()
561 if (hidraw_is_revoked(list) || new_head == list->tail) in hidraw_report_event()
564 if (!(list->buffer[list->head].value = kmemdup(data, len, GFP_ATOMIC))) { in hidraw_report_event()
568 list->buffer[list->head].len = len; in hidraw_report_event()
569 list->head = new_head; in hidraw_report_event()
570 kill_fasync(&list->fasync, SIGIO, POLL_IN); in hidraw_report_event()
621 INIT_LIST_HEAD(&dev->list); in hidraw_connect()