user_service
struct vchiq_header *header, struct user_service *user_service,
completion->service_userdata = user_service->service;
vchiq_service_get(user_service->service);
user_service->close_pending = 1;
user_service->message_available_pos = insert;
struct user_service *user_service;
user_service = (struct user_service *)service->base.userdata;
if ((user_service->message_available_pos -
ret = add_completion(instance, reason, NULL, user_service,
if (wait_for_completion_interruptible(&user_service->remove_event)) {
struct user_service *user_service;
user_service = (struct user_service *)service->base.userdata;
user_service, service->localport, user_service->userdata,
if (header && user_service->is_vchi) {
while (user_service->msg_insert ==
(user_service->msg_remove + MSG_QUEUE_SIZE)) {
user_service->msg_queue[user_service->msg_insert &
user_service->msg_insert++;
if (((user_service->message_available_pos -
user_service->dequeue_pending) {
user_service->dequeue_pending = 0;
complete(&user_service->insert_event);
return add_completion(instance, reason, header, user_service,
struct user_service *user_service =
(struct user_service *)service->base.userdata;
if ((service->base.callback == service_callback) && user_service->is_vchi) {
user_service->msg_insert - user_service->msg_remove,
if (user_service->dequeue_pending)
struct user_service *user_service = service->base.userdata;
complete(&user_service->remove_event);
struct user_service *user_service = service->base.userdata;
while (user_service->msg_remove != user_service->msg_insert) {
int m = user_service->msg_remove & (MSG_QUEUE_SIZE - 1);
header = user_service->msg_queue[m];
user_service->msg_remove++;
struct user_service *user_service =
complete(&user_service->close_event);
struct user_service *user_service = NULL;
user_service = kmalloc_obj(*user_service);
if (!user_service)
.userdata = user_service,
kfree(user_service);
user_service->service = service;
user_service->userdata = args->params.userdata;
user_service->instance = instance;
user_service->is_vchi = (args->is_vchi != 0);
user_service->dequeue_pending = 0;
user_service->close_pending = 0;
user_service->message_available_pos = instance->completion_remove - 1;
user_service->msg_insert = 0;
user_service->msg_remove = 0;
init_completion(&user_service->insert_event);
init_completion(&user_service->remove_event);
init_completion(&user_service->close_event);
struct user_service *user_service;
user_service = (struct user_service *)service->base.userdata;
if (user_service->is_vchi == 0) {
if (user_service->msg_remove == user_service->msg_insert) {
user_service->dequeue_pending = 1;
if (wait_for_completion_interruptible(&user_service->insert_event)) {
} while (user_service->msg_remove == user_service->msg_insert);
if (WARN_ON_ONCE((int)(user_service->msg_insert -
user_service->msg_remove) < 0)) {
header = user_service->msg_queue[user_service->msg_remove &
user_service->msg_remove++;
complete(&user_service->remove_event);
struct user_service *user_service;
static void close_delivered(struct user_service *user_service)
user_service = service->base.userdata;
.service_userdata = user_service->userdata,
dev_dbg(user_service->service->state->dev,
"arm: (handle=%x)\n", user_service->service->handle);
if (user_service->close_pending) {
vchiq_service_put(user_service->service);
complete(&user_service->close_event);
user_service->close_pending = 0;
struct user_service *user_service;
user_service = service->base.userdata;
if (!user_service->close_pending) {
if (user_service->close_pending &&
wait_for_completion_interruptible(&user_service->close_event))
struct user_service *user_service =
(struct user_service *)service->base.userdata;
close_delivered(user_service);