• Home
  • Raw
  • Download

Lines Matching refs:u

109 	} u;  member
126 struct xenbus_file_priv *u = filp->private_data; in xenbus_file_read() local
131 mutex_lock(&u->reply_mutex); in xenbus_file_read()
133 while (list_empty(&u->read_buffers)) { in xenbus_file_read()
134 mutex_unlock(&u->reply_mutex); in xenbus_file_read()
138 ret = wait_event_interruptible(u->read_waitq, in xenbus_file_read()
139 !list_empty(&u->read_buffers)); in xenbus_file_read()
142 mutex_lock(&u->reply_mutex); in xenbus_file_read()
145 rb = list_entry(u->read_buffers.next, struct read_buffer, list); in xenbus_file_read()
165 if (list_empty(&u->read_buffers)) in xenbus_file_read()
167 rb = list_entry(u->read_buffers.next, in xenbus_file_read()
175 mutex_unlock(&u->reply_mutex); in xenbus_file_read()
305 struct xenbus_file_priv *u; in xenbus_worker() local
310 u = container_of(wq, struct xenbus_file_priv, wq); in xenbus_worker()
317 list_for_each_entry_safe(trans, tmp, &u->transactions, list) { in xenbus_worker()
323 list_for_each_entry_safe(watch, tmp_watch, &u->watches, list) { in xenbus_worker()
329 list_for_each_entry_safe(rb, tmp_rb, &u->read_buffers, list) { in xenbus_worker()
333 kfree(u); in xenbus_worker()
338 struct xenbus_file_priv *u; in xenbus_file_free() local
344 u = container_of(kref, struct xenbus_file_priv, kref); in xenbus_file_free()
345 schedule_work(&u->wq); in xenbus_file_free()
349 struct xenbus_file_priv *u, uint32_t tx_id) in xenbus_get_transaction() argument
353 list_for_each_entry(trans, &u->transactions, list) in xenbus_get_transaction()
362 struct xenbus_file_priv *u = req->par; in xenbus_dev_queue_reply() local
369 mutex_lock(&u->msgbuffer_mutex); in xenbus_dev_queue_reply()
372 trans = xenbus_get_transaction(u, 0); in xenbus_dev_queue_reply()
384 trans = xenbus_get_transaction(u, req->msg.tx_id); in xenbus_dev_queue_reply()
391 mutex_unlock(&u->msgbuffer_mutex); in xenbus_dev_queue_reply()
393 mutex_lock(&u->reply_mutex); in xenbus_dev_queue_reply()
398 list_splice_tail(&staging_q, &u->read_buffers); in xenbus_dev_queue_reply()
399 wake_up(&u->read_waitq); in xenbus_dev_queue_reply()
403 mutex_unlock(&u->reply_mutex); in xenbus_dev_queue_reply()
408 kref_put(&u->kref, xenbus_file_free); in xenbus_dev_queue_reply()
413 mutex_unlock(&u->msgbuffer_mutex); in xenbus_dev_queue_reply()
416 static int xenbus_command_reply(struct xenbus_file_priv *u, in xenbus_command_reply() argument
425 msg.hdr = u->u.msg; in xenbus_command_reply()
432 mutex_lock(&u->reply_mutex); in xenbus_command_reply()
433 rc = queue_reply(&u->read_buffers, &msg, sizeof(msg.hdr) + msg.hdr.len); in xenbus_command_reply()
434 wake_up(&u->read_waitq); in xenbus_command_reply()
435 mutex_unlock(&u->reply_mutex); in xenbus_command_reply()
438 kref_put(&u->kref, xenbus_file_free); in xenbus_command_reply()
444 struct xenbus_file_priv *u) in xenbus_write_transaction() argument
455 list_add(&trans->list, &u->transactions); in xenbus_write_transaction()
456 } else if (u->u.msg.tx_id != 0 && in xenbus_write_transaction()
457 !xenbus_get_transaction(u, u->u.msg.tx_id)) in xenbus_write_transaction()
458 return xenbus_command_reply(u, XS_ERROR, "ENOENT"); in xenbus_write_transaction()
460 rc = xenbus_dev_request_and_reply(&u->u.msg, u); in xenbus_write_transaction()
470 static int xenbus_write_watch(unsigned msg_type, struct xenbus_file_priv *u) in xenbus_write_watch() argument
477 path = u->u.buffer + sizeof(u->u.msg); in xenbus_write_watch()
478 token = memchr(path, 0, u->u.msg.len); in xenbus_write_watch()
480 rc = xenbus_command_reply(u, XS_ERROR, "EINVAL"); in xenbus_write_watch()
484 if (memchr(token, 0, u->u.msg.len - (token - path)) == NULL) { in xenbus_write_watch()
485 rc = xenbus_command_reply(u, XS_ERROR, "EINVAL"); in xenbus_write_watch()
497 watch->dev_data = u; in xenbus_write_watch()
505 list_add(&watch->list, &u->watches); in xenbus_write_watch()
507 list_for_each_entry(watch, &u->watches, list) { in xenbus_write_watch()
519 rc = xenbus_command_reply(u, msg_type, "OK"); in xenbus_write_watch()
529 struct xenbus_file_priv *u = filp->private_data; in xenbus_file_write() local
550 mutex_lock(&u->msgbuffer_mutex); in xenbus_file_write()
557 if (len > sizeof(u->u.buffer) - u->len) { in xenbus_file_write()
559 u->len = 0; in xenbus_file_write()
564 ret = copy_from_user(u->u.buffer + u->len, ubuf, len); in xenbus_file_write()
575 u->len += len; in xenbus_file_write()
578 if (u->len < sizeof(u->u.msg)) in xenbus_file_write()
583 if ((sizeof(u->u.msg) + u->u.msg.len) > sizeof(u->u.buffer)) { in xenbus_file_write()
585 u->len = 0; in xenbus_file_write()
589 if (u->len < (sizeof(u->u.msg) + u->u.msg.len)) in xenbus_file_write()
596 kref_get(&u->kref); in xenbus_file_write()
598 msg_type = u->u.msg.type; in xenbus_file_write()
604 ret = xenbus_write_watch(msg_type, u); in xenbus_file_write()
609 ret = xenbus_write_transaction(msg_type, u); in xenbus_file_write()
614 kref_put(&u->kref, xenbus_file_free); in xenbus_file_write()
618 u->len = 0; in xenbus_file_write()
621 mutex_unlock(&u->msgbuffer_mutex); in xenbus_file_write()
627 struct xenbus_file_priv *u; in xenbus_file_open() local
634 u = kzalloc(sizeof(*u), GFP_KERNEL); in xenbus_file_open()
635 if (u == NULL) in xenbus_file_open()
638 kref_init(&u->kref); in xenbus_file_open()
640 INIT_LIST_HEAD(&u->transactions); in xenbus_file_open()
641 INIT_LIST_HEAD(&u->watches); in xenbus_file_open()
642 INIT_LIST_HEAD(&u->read_buffers); in xenbus_file_open()
643 init_waitqueue_head(&u->read_waitq); in xenbus_file_open()
644 INIT_WORK(&u->wq, xenbus_worker); in xenbus_file_open()
646 mutex_init(&u->reply_mutex); in xenbus_file_open()
647 mutex_init(&u->msgbuffer_mutex); in xenbus_file_open()
649 filp->private_data = u; in xenbus_file_open()
656 struct xenbus_file_priv *u = filp->private_data; in xenbus_file_release() local
658 kref_put(&u->kref, xenbus_file_free); in xenbus_file_release()
665 struct xenbus_file_priv *u = file->private_data; in xenbus_file_poll() local
667 poll_wait(file, &u->read_waitq, wait); in xenbus_file_poll()
668 if (!list_empty(&u->read_buffers)) in xenbus_file_poll()