Lines Matching full:instance
48 /* Some per-instance constants */
95 static int vchiq_proc_add_instance(VCHIQ_INSTANCE_T instance);
96 static void vchiq_proc_remove_instance(VCHIQ_INSTANCE_T instance);
103 VCHIQ_INSTANCE_T instance; member
205 add_completion(VCHIQ_INSTANCE_T instance, VCHIQ_REASON_T reason, in add_completion() argument
213 insert = instance->completion_insert; in add_completion()
214 while ((insert - instance->completion_remove) >= MAX_COMPLETIONS) { in add_completion()
221 if (down_interruptible(&instance->remove_event) != 0) { in add_completion()
227 if (instance->closing) { in add_completion()
235 completion = &instance->completions[insert & (MAX_COMPLETIONS - 1)]; in add_completion()
247 if (instance->use_close_delivered) in add_completion()
258 instance->completion_insert = ++insert; in add_completion()
260 up(&instance->insert_event); in add_completion()
282 VCHIQ_INSTANCE_T instance; in service_callback() local
291 instance = user_service->instance; in service_callback()
293 if (!instance || instance->closing) in service_callback()
298 "instance %lx, bulk_userdata %lx", in service_callback()
302 (unsigned long)instance, (unsigned long)bulk_userdata); in service_callback()
317 instance->completion_remove) < 0) { in service_callback()
322 status = add_completion(instance, reason, in service_callback()
337 } else if (instance->closing) { in service_callback()
356 instance->completion_remove) >= 0) || in service_callback()
376 return add_completion(instance, reason, header, user_service, in service_callback()
428 VCHIQ_INSTANCE_T instance; in vchiq_ioctl() local
435 if ((ret = devfs_get_cdevpriv((void**)&instance))) { in vchiq_ioctl()
445 "vchiq_ioctl - instance %x, cmd %s, arg %p", in vchiq_ioctl()
446 (unsigned int)instance, in vchiq_ioctl()
453 if (!instance->connected) in vchiq_ioctl()
458 while ((service = next_service_by_instance(instance->state, in vchiq_ioctl()
459 instance, &i)) != NULL) { in vchiq_ioctl()
469 instance->closing = 1; in vchiq_ioctl()
470 up(&instance->insert_event); in vchiq_ioctl()
476 if (instance->connected) { in vchiq_ioctl()
480 rc = lmutex_lock_interruptible(&instance->state->mutex); in vchiq_ioctl()
485 instance->state->id, rc); in vchiq_ioctl()
489 status = vchiq_connect_internal(instance->state, instance); in vchiq_ioctl()
490 lmutex_unlock(&instance->state->mutex); in vchiq_ioctl()
493 instance->connected = 1; in vchiq_ioctl()
514 if (!instance->connected) { in vchiq_ioctl()
522 instance->connected ? in vchiq_ioctl()
531 instance->state, in vchiq_ioctl()
533 instance, user_service_free); in vchiq_ioctl()
538 user_service->instance = instance; in vchiq_ioctl()
543 instance->completion_remove - 1; in vchiq_ioctl()
552 (service, instance->pid); in vchiq_ioctl()
587 service = find_service_for_instance(instance, handle); in vchiq_ioctl()
619 service = find_service_for_instance(instance, handle); in vchiq_ioctl()
653 service = find_service_for_instance(instance, handle); in vchiq_ioctl()
684 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
711 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
727 lmutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_ioctl()
728 list_for_each(pos, &instance->bulk_waiter_list) { in vchiq_ioctl()
739 lmutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_ioctl()
775 lmutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_ioctl()
776 list_add(&waiter->list, &instance->bulk_waiter_list); in vchiq_ioctl()
777 lmutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_ioctl()
795 if (!instance->connected) { in vchiq_ioctl()
802 lmutex_lock(&instance->completion_mutex); in vchiq_ioctl()
805 while ((instance->completion_remove == in vchiq_ioctl()
806 instance->completion_insert) in vchiq_ioctl()
807 && !instance->closing) { in vchiq_ioctl()
810 lmutex_unlock(&instance->completion_mutex); in vchiq_ioctl()
811 rc = down_interruptible(&instance->insert_event); in vchiq_ioctl()
812 lmutex_lock(&instance->completion_mutex); in vchiq_ioctl()
827 remove = instance->completion_remove; in vchiq_ioctl()
835 if (remove == instance->completion_insert) in vchiq_ioctl()
838 completion = &instance->completions[ in vchiq_ioctl()
909 !instance->use_close_delivered) in vchiq_ioctl()
926 instance->completion_remove = ++remove; in vchiq_ioctl()
946 up(&instance->remove_event); in vchiq_ioctl()
948 if ((ret == 0) && instance->closing) in vchiq_ioctl()
958 lmutex_unlock(&instance->completion_mutex); in vchiq_ioctl()
969 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
1060 status = vchiq_get_config(instance, args.config_size, &config); in vchiq_ioctl()
1075 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
1101 instance->use_close_delivered = 1; in vchiq_ioctl()
1108 service = find_closed_service_for_instance(instance, handle); in vchiq_ioctl()
1136 " ioctl instance %lx, cmd %s -> status %d, %d", in vchiq_ioctl()
1137 (unsigned long)instance, in vchiq_ioctl()
1144 " ioctl instance %lx, cmd %s -> status %d, %d", in vchiq_ioctl()
1145 (unsigned long)instance, in vchiq_ioctl()
1178 VCHIQ_INSTANCE_T instance; in vchiq_open() local
1186 instance = kmalloc(sizeof(*instance), GFP_KERNEL); in vchiq_open()
1187 if (!instance) in vchiq_open()
1190 instance->state = state; in vchiq_open()
1192 instance->pid = td->td_proc->p_pid; in vchiq_open()
1195 ret = vchiq_proc_add_instance(instance); in vchiq_open()
1197 kfree(instance); in vchiq_open()
1202 _sema_init(&instance->insert_event, 0); in vchiq_open()
1203 _sema_init(&instance->remove_event, 0); in vchiq_open()
1204 lmutex_init(&instance->completion_mutex); in vchiq_open()
1205 lmutex_init(&instance->bulk_waiter_list_mutex); in vchiq_open()
1206 INIT_LIST_HEAD(&instance->bulk_waiter_list); in vchiq_open()
1208 devfs_set_cdevpriv(instance, instance_dtr); in vchiq_open()
1231 VCHIQ_INSTANCE_T instance; in vchiq_close() local
1236 if ((ret = devfs_get_cdevpriv((void**)&instance))) { in vchiq_close()
1242 "vchiq_release: instance=%lx", in vchiq_close()
1243 (unsigned long)instance); in vchiq_close()
1251 vchiq_use_internal(instance->state, NULL, in vchiq_close()
1254 lmutex_lock(&instance->completion_mutex); in vchiq_close()
1257 instance->closing = 1; in vchiq_close()
1258 up(&instance->insert_event); in vchiq_close()
1260 lmutex_unlock(&instance->completion_mutex); in vchiq_close()
1263 up(&instance->remove_event); in vchiq_close()
1267 while ((service = next_service_by_instance(state, instance, in vchiq_close()
1280 while ((service = next_service_by_instance(state, instance, &i)) in vchiq_close()
1311 while (instance->completion_remove != in vchiq_close()
1312 instance->completion_insert) { in vchiq_close()
1315 completion = &instance->completions[ in vchiq_close()
1316 instance->completion_remove & in vchiq_close()
1325 if (instance->use_close_delivered) in vchiq_close()
1329 instance->completion_remove++; in vchiq_close()
1333 vchiq_release_internal(instance->state, NULL); in vchiq_close()
1338 &instance->bulk_waiter_list) { in vchiq_close()
1421 VCHIQ_INSTANCE_T instance; in vchiq_dump_platform_instances() local
1424 instance = service->instance; in vchiq_dump_platform_instances()
1425 if (instance) in vchiq_dump_platform_instances()
1426 instance->mark = 0; in vchiq_dump_platform_instances()
1432 VCHIQ_INSTANCE_T instance; in vchiq_dump_platform_instances() local
1435 instance = service->instance; in vchiq_dump_platform_instances()
1436 if (instance && !instance->mark) { in vchiq_dump_platform_instances()
1438 "Instance %x: pid %d,%s completions " in vchiq_dump_platform_instances()
1440 (unsigned int)instance, instance->pid, in vchiq_dump_platform_instances()
1441 instance->connected ? " connected, " : in vchiq_dump_platform_instances()
1443 instance->completion_insert - in vchiq_dump_platform_instances()
1444 instance->completion_remove, in vchiq_dump_platform_instances()
1449 instance->mark = 1; in vchiq_dump_platform_instances()
1468 len = snprintf(buf, sizeof(buf), " instance %x", in vchiq_dump_platform_service_state()
1469 (unsigned int)service->instance); in vchiq_dump_platform_service_state()
1652 VCHIQ_INSTANCE_T instance; in vchiq_keepalive_thread_func() local
1662 status = vchiq_initialise(&instance); in vchiq_keepalive_thread_func()
1669 status = vchiq_connect(instance); in vchiq_keepalive_thread_func()
1676 status = vchiq_add_service(instance, ¶ms, &ka_handle); in vchiq_keepalive_thread_func()
1720 vchiq_shutdown(instance); in vchiq_keepalive_thread_func()
2722 "--- Overall vchiq instance use count %d", vc_use_count); in vchiq_dump_service_use_state()
2844 static int vchiq_instance_get_use_count(VCHIQ_INSTANCE_T instance) in vchiq_instance_get_use_count() argument
2849 while ((service = next_service_by_instance(instance->state, in vchiq_instance_get_use_count()
2850 instance, &i)) != NULL) { in vchiq_instance_get_use_count()
2862 VCHIQ_INSTANCE_T instance = data; in proc_read_use_count() local
2865 use_count = vchiq_instance_get_use_count(instance); in proc_read_use_count()
2871 /* add an instance (process) to the proc entries */
2872 static int vchiq_proc_add_instance(VCHIQ_INSTANCE_T instance) in vchiq_proc_add_instance() argument
2877 int pid = instance->pid; in vchiq_proc_add_instance()
2887 instance); in vchiq_proc_add_instance()
2891 instance->proc_entry = top; in vchiq_proc_add_instance()
2901 static void vchiq_proc_remove_instance(VCHIQ_INSTANCE_T instance) in vchiq_proc_remove_instance() argument
2904 remove_proc_entry("use_count", instance->proc_entry); in vchiq_proc_remove_instance()
2905 remove_proc_entry(instance->proc_entry->name, clients); in vchiq_proc_remove_instance()