Module Name: src Committed By: skrll Date: Thu Sep 19 15:13:43 UTC 2013
Modified Files: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm: vchiq_arm.c vchiq_kern_lib.c Log Message: Track waiters/clients via lwp pointer and not pid. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c diff -u src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c:1.5 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c:1.6 --- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c:1.5 Thu Sep 19 13:51:44 2013 +++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c Thu Sep 19 15:13:43 2013 @@ -119,7 +119,7 @@ typedef struct user_service_struct { struct bulk_waiter_node { struct bulk_waiter bulk_waiter; - int pid; + struct lwp *l; struct list_head list; }; @@ -134,7 +134,7 @@ struct vchiq_instance_struct { int connected; int closing; - int pid; + struct lwp *l; int mark; struct list_head bulk_waiter_list; @@ -508,7 +508,7 @@ vchiq_ioctl(struct file *fp, u_long cmd, if (pargs->is_open) { status = vchiq_open_service_internal - (service, instance->pid); + (service, (uintptr_t)instance->l); if (status != VCHIQ_SUCCESS) { vchiq_remove_service(service->handle); service = NULL; @@ -643,7 +643,7 @@ vchiq_ioctl(struct file *fp, u_long cmd, lmutex_lock(&instance->bulk_waiter_list_mutex); list_for_each(pos, &instance->bulk_waiter_list) { if (list_entry(pos, struct bulk_waiter_node, - list)->pid == current->l_proc->p_pid) { + list)->l == current) { waiter = list_entry(pos, struct bulk_waiter_node, list); @@ -687,7 +687,7 @@ vchiq_ioctl(struct file *fp, u_long cmd, } else { const VCHIQ_BULK_MODE_T mode_waiting = VCHIQ_BULK_MODE_WAITING; - waiter->pid = current->l_proc->p_pid; + waiter->l = current; lmutex_lock(&instance->bulk_waiter_list_mutex); list_add(&waiter->list, &instance->bulk_waiter_list); lmutex_unlock(&instance->bulk_waiter_list_mutex); @@ -1050,8 +1050,7 @@ vchiq_open(dev_t dev, int flags, int mod } instance->state = state; - /* XXXBSD: PID or thread ID? */ - instance->pid = l->l_proc->p_pid; + instance->l = l; #ifdef notyet ret = vchiq_proc_add_instance(instance); @@ -1195,8 +1194,8 @@ vchiq_close(struct file *fp) list_del(pos); vchiq_log_info(vchiq_arm_log_level, "bulk_waiter - cleaned up %x " - "for pid %d", - (unsigned int)waiter, waiter->pid); + "for lwp %p", + (unsigned int)waiter, waiter->l); _sema_destroy(&waiter->bulk_waiter.event); kfree(waiter); } @@ -1291,9 +1290,9 @@ vchiq_dump_platform_instances(void *dump instance = service->instance; if (instance && !instance->mark) { len = snprintf(buf, sizeof(buf), - "Instance %x: pid %d,%s completions " + "Instance %x: lwp %p,%s completions " "%d/%d", - (unsigned int)instance, instance->pid, + (unsigned int)instance, instance->l, instance->connected ? " connected, " : "", instance->completion_insert - Index: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c diff -u src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c:1.2 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c:1.3 --- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c:1.2 Thu Sep 19 13:51:44 2013 +++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c Thu Sep 19 15:13:43 2013 @@ -42,7 +42,7 @@ struct bulk_waiter_node { struct bulk_waiter bulk_waiter; - int pid; + struct lwp *l; struct list_head list; }; @@ -151,8 +151,8 @@ VCHIQ_STATUS_T vchiq_shutdown(VCHIQ_INST list_del(pos); vchiq_log_info(vchiq_arm_log_level, "bulk_waiter - cleaned up %x " - "for pid %d", - (unsigned int)waiter, waiter->pid); + "for lwp %p", + (unsigned int)waiter, waiter->l); _sema_destroy(&waiter->bulk_waiter.event); kfree(waiter); @@ -287,7 +287,7 @@ VCHIQ_STATUS_T vchiq_open_service( if (service) { status = vchiq_open_service_internal(service, - current->l_proc->p_pid); + (uintptr_t)current); if (status == VCHIQ_SUCCESS) *phandle = service->handle; else @@ -393,7 +393,7 @@ vchiq_blocking_bulk_transfer(VCHIQ_SERVI lmutex_lock(&instance->bulk_waiter_list_mutex); list_for_each(pos, &instance->bulk_waiter_list) { if (list_entry(pos, struct bulk_waiter_node, - list)->pid == current->l_proc->p_pid) { + list)->l == current) { waiter = list_entry(pos, struct bulk_waiter_node, list); @@ -445,13 +445,13 @@ vchiq_blocking_bulk_transfer(VCHIQ_SERVI kfree(waiter); } else { - waiter->pid = current->l_proc->p_pid; + waiter->l = current; lmutex_lock(&instance->bulk_waiter_list_mutex); list_add(&waiter->list, &instance->bulk_waiter_list); lmutex_unlock(&instance->bulk_waiter_list_mutex); vchiq_log_info(vchiq_arm_log_level, - "saved bulk_waiter %x for pid %d", - (unsigned int)waiter, current->l_proc->p_pid); + "saved bulk_waiter %x for lwp %p", + (unsigned int)waiter, current); } return status;