Lines Matching refs: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;
206 add_completion(VCHIQ_INSTANCE_T instance, VCHIQ_REASON_T reason,
214 insert = instance->completion_insert;
215 while ((insert - instance->completion_remove) >= MAX_COMPLETIONS) {
222 if (down_interruptible(&instance->remove_event) != 0) {
228 if (instance->closing) {
236 completion = &instance->completions[insert & (MAX_COMPLETIONS - 1)];
248 if (instance->use_close_delivered)
259 instance->completion_insert = ++insert;
261 up(&instance->insert_event);
283 VCHIQ_INSTANCE_T instance;
292 instance = user_service->instance;
294 if (!instance || instance->closing)
299 "instance %lx, bulk_userdata %lx",
303 (unsigned long)instance, (unsigned long)bulk_userdata);
318 instance->completion_remove) < 0) {
323 status = add_completion(instance, reason,
338 } else if (instance->closing) {
357 instance->completion_remove) >= 0) ||
377 return add_completion(instance, reason, header, user_service,
429 VCHIQ_INSTANCE_T instance;
436 if ((ret = devfs_get_cdevpriv((void**)&instance))) {
446 "vchiq_ioctl - instance %x, cmd %s, arg %p",
447 (unsigned int)instance,
454 if (!instance->connected)
459 while ((service = next_service_by_instance(instance->state,
460 instance, &i)) != NULL) {
470 instance->closing = 1;
471 up(&instance->insert_event);
477 if (instance->connected) {
481 rc = lmutex_lock_interruptible(&instance->state->mutex);
486 instance->state->id, rc);
490 status = vchiq_connect_internal(instance->state, instance);
491 lmutex_unlock(&instance->state->mutex);
494 instance->connected = 1;
515 if (!instance->connected) {
523 instance->connected ?
532 instance->state,
534 instance, user_service_free);
539 user_service->instance = instance;
544 instance->completion_remove - 1;
553 (service, instance->pid);
588 service = find_service_for_instance(instance, handle);
620 service = find_service_for_instance(instance, handle);
654 service = find_service_for_instance(instance, handle);
685 service = find_service_for_instance(instance, args.handle);
712 service = find_service_for_instance(instance, args.handle);
728 lmutex_lock(&instance->bulk_waiter_list_mutex);
729 list_for_each(pos, &instance->bulk_waiter_list) {
740 lmutex_unlock(&instance->bulk_waiter_list_mutex);
776 lmutex_lock(&instance->bulk_waiter_list_mutex);
777 list_add(&waiter->list, &instance->bulk_waiter_list);
778 lmutex_unlock(&instance->bulk_waiter_list_mutex);
796 if (!instance->connected) {
803 lmutex_lock(&instance->completion_mutex);
806 while ((instance->completion_remove ==
807 instance->completion_insert)
808 && !instance->closing) {
811 lmutex_unlock(&instance->completion_mutex);
812 rc = down_interruptible(&instance->insert_event);
813 lmutex_lock(&instance->completion_mutex);
828 remove = instance->completion_remove;
836 if (remove == instance->completion_insert)
839 completion = &instance->completions[
910 !instance->use_close_delivered)
927 instance->completion_remove = ++remove;
947 up(&instance->remove_event);
949 if ((ret == 0) && instance->closing)
959 lmutex_unlock(&instance->completion_mutex);
970 service = find_service_for_instance(instance, args.handle);
1061 status = vchiq_get_config(instance, args.config_size, &config);
1076 service = find_service_for_instance(instance, args.handle);
1102 instance->use_close_delivered = 1;
1109 service = find_closed_service_for_instance(instance, handle);
1137 " ioctl instance %lx, cmd %s -> status %d, %d",
1138 (unsigned long)instance,
1145 " ioctl instance %lx, cmd %s -> status %d, %d",
1146 (unsigned long)instance,
1179 VCHIQ_INSTANCE_T instance;
1187 instance = kmalloc(sizeof(*instance), GFP_KERNEL);
1188 if (!instance)
1191 instance->state = state;
1193 instance->pid = td->td_proc->p_pid;
1196 ret = vchiq_proc_add_instance(instance);
1198 kfree(instance);
1203 _sema_init(&instance->insert_event, 0);
1204 _sema_init(&instance->remove_event, 0);
1205 lmutex_init(&instance->completion_mutex);
1206 lmutex_init(&instance->bulk_waiter_list_mutex);
1207 INIT_LIST_HEAD(&instance->bulk_waiter_list);
1209 devfs_set_cdevpriv(instance, instance_dtr);
1232 VCHIQ_INSTANCE_T instance;
1237 if ((ret = devfs_get_cdevpriv((void**)&instance))) {
1243 "vchiq_release: instance=%lx",
1244 (unsigned long)instance);
1252 vchiq_use_internal(instance->state, NULL,
1255 lmutex_lock(&instance->completion_mutex);
1258 instance->closing = 1;
1259 up(&instance->insert_event);
1261 lmutex_unlock(&instance->completion_mutex);
1264 up(&instance->remove_event);
1268 while ((service = next_service_by_instance(state, instance,
1281 while ((service = next_service_by_instance(state, instance, &i))
1312 while (instance->completion_remove !=
1313 instance->completion_insert) {
1316 completion = &instance->completions[
1317 instance->completion_remove &
1326 if (instance->use_close_delivered)
1330 instance->completion_remove++;
1334 vchiq_release_internal(instance->state, NULL);
1339 &instance->bulk_waiter_list) {
1422 VCHIQ_INSTANCE_T instance;
1425 instance = service->instance;
1426 if (instance)
1427 instance->mark = 0;
1433 VCHIQ_INSTANCE_T instance;
1436 instance = service->instance;
1437 if (instance && !instance->mark) {
1441 (unsigned int)instance, instance->pid,
1442 instance->connected ? " connected, " :
1444 instance->completion_insert -
1445 instance->completion_remove,
1450 instance->mark = 1;
1469 len = snprintf(buf, sizeof(buf), " instance %x",
1470 (unsigned int)service->instance);
1653 VCHIQ_INSTANCE_T instance;
1663 status = vchiq_initialise(&instance);
1670 status = vchiq_connect(instance);
1677 status = vchiq_add_service(instance, &params, &ka_handle);
1721 vchiq_shutdown(instance);
2723 "--- Overall vchiq instance use count %d", vc_use_count);
2845 static int vchiq_instance_get_use_count(VCHIQ_INSTANCE_T instance)
2850 while ((service = next_service_by_instance(instance->state,
2851 instance, &i)) != NULL) {
2863 VCHIQ_INSTANCE_T instance = data;
2866 use_count = vchiq_instance_get_use_count(instance);
2872 /* add an instance (process) to the proc entries */
2873 static int vchiq_proc_add_instance(VCHIQ_INSTANCE_T instance)
2878 int pid = instance->pid;
2888 instance);
2892 instance->proc_entry = top;
2902 static void vchiq_proc_remove_instance(VCHIQ_INSTANCE_T instance)
2905 remove_proc_entry("use_count", instance->proc_entry);
2906 remove_proc_entry(instance->proc_entry->name, clients);