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;

Reply via email to