Module Name:    src
Committed By:   martin
Date:           Wed Jan 28 11:24:31 UTC 2015

Modified Files:
        src/sys/external/bsd/vchiq/dist/interface/vchiq_arm [netbsd-7]:
            vchiq_arm.c vchiq_kern_lib.c

Log Message:
Pull up following revision(s) (requested by skrll in ticket #464):
        sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c: 
revision 1.6
        sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c: revision 
1.16
It turns out we needed to track pid all along, so revert the lwp tracking
I did ages ago.
quake has a chance of working now.


To generate a diff of this commit:
cvs rdiff -u -r1.13.2.2 -r1.13.2.3 \
    src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c
cvs rdiff -u -r1.5 -r1.5.2.1 \
    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.13.2.2 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c:1.13.2.3
--- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c:1.13.2.2	Fri Jan 23 16:29:36 2015
+++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_arm.c	Wed Jan 28 11:24:31 2015
@@ -120,7 +120,7 @@ typedef struct user_service_struct {
 
 struct bulk_waiter_node {
 	struct bulk_waiter bulk_waiter;
-	struct lwp *l;
+	int pid;
 	struct list_head list;
 };
 
@@ -135,7 +135,7 @@ struct vchiq_instance_struct {
 
 	int connected;
 	int closing;
-	struct lwp *l;
+	int pid;
 	int mark;
 
 	struct list_head bulk_waiter_list;
@@ -527,7 +527,7 @@ vchiq_ioctl(struct file *fp, u_long cmd,
 
 			if (pargs->is_open) {
 				status = vchiq_open_service_internal
-					(service, (uintptr_t)instance->l);
+					(service, instance->pid);
 				if (status != VCHIQ_SUCCESS) {
 					vchiq_remove_service(service->handle);
 					service = NULL;
@@ -660,7 +660,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)->l == current) {
+					list)->pid == current->l_proc->p_pid) {
 					waiter = list_entry(pos,
 						struct bulk_waiter_node,
 						list);
@@ -672,14 +672,14 @@ vchiq_ioctl(struct file *fp, u_long cmd,
 			lmutex_unlock(&instance->bulk_waiter_list_mutex);
 			if (!waiter) {
 				vchiq_log_error(vchiq_arm_log_level,
-					"no bulk_waiter found for lwp %p",
-					current);
+					"no bulk_waiter found for pid %d",
+					current->l_proc->p_pid);
 				ret = -ESRCH;
 				break;
 			}
 			vchiq_log_info(vchiq_arm_log_level,
-				"found bulk_waiter %x for lwp %p",
-				(unsigned int)waiter, current);
+				"found bulk_waiter %x for pid %d",
+				(unsigned int)waiter, current->l_proc->p_pid);
 			pargs->userdata = &waiter->bulk_waiter;
 		}
 		status = vchiq_bulk_transfer
@@ -704,13 +704,13 @@ vchiq_ioctl(struct file *fp, u_long cmd,
 		} else {
 			const VCHIQ_BULK_MODE_T mode_waiting =
 				VCHIQ_BULK_MODE_WAITING;
-			waiter->l = current;
+			waiter->pid = current->l_proc->p_pid;
 			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 lwp %p",
-				(unsigned int)waiter, current);
+				"saved bulk_waiter %x for pid %d",
+				(unsigned int)waiter, current->l_proc->p_pid);
 
 			pargs->mode = mode_waiting;
 		}
@@ -1064,7 +1064,7 @@ vchiq_open(dev_t dev, int flags, int mod
 		}
 
 		instance->state = state;
-		instance->l = l;
+		instance->pid = current->l_proc->p_pid;
 
 #ifdef notyet
 		ret = vchiq_proc_add_instance(instance);
@@ -1205,8 +1205,8 @@ vchiq_close(struct file *fp)
 				list_del(pos);
 				vchiq_log_info(vchiq_arm_log_level,
 					"bulk_waiter - cleaned up %x "
-					"for lwp %p",
-					(unsigned int)waiter, waiter->l);
+					"for pid %d",
+					(unsigned int)waiter, waiter->pid);
 		                _sema_destroy(&waiter->bulk_waiter.event);
 				kfree(waiter);
 			}
@@ -1297,9 +1297,9 @@ vchiq_dump_platform_instances(void *dump
 			instance = service->instance;
 			if (instance && !instance->mark) {
 				len = snprintf(buf, sizeof(buf),
-					"Instance %x: lwp %p,%s completions "
+					"Instance %x: pid %d,%s completions "
 						"%d/%d",
-					(unsigned int)instance, instance->l,
+					(unsigned int)instance, instance->pid,
 					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.5 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c:1.5.2.1
--- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c:1.5	Wed Jul 16 23:59:58 2014
+++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_kern_lib.c	Wed Jan 28 11:24:31 2015
@@ -42,7 +42,7 @@
 
 struct bulk_waiter_node {
 	struct bulk_waiter bulk_waiter;
-	struct lwp *l;
+	int pid;
 	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 lwp %p",
-					(unsigned int)waiter, waiter->l);
+					"for pid %d",
+					(unsigned int)waiter, waiter->pid);
 			_sema_destroy(&waiter->bulk_waiter.event);
 
 			kfree(waiter);
@@ -290,7 +290,7 @@ VCHIQ_STATUS_T vchiq_open_service(
 	if (service) {
 		*phandle = service->handle;
 		status = vchiq_open_service_internal(service,
-		    (uintptr_t)current);
+		    current->l_proc->p_pid);
 		if (status != VCHIQ_SUCCESS) {
 			vchiq_remove_service(service->handle);
 			*phandle = VCHIQ_SERVICE_HANDLE_INVALID;
@@ -396,7 +396,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)->l == current) {
+				list)->pid == current->l_proc->p_pid) {
 			waiter = list_entry(pos,
 				struct bulk_waiter_node,
 				list);
@@ -448,13 +448,13 @@ vchiq_blocking_bulk_transfer(VCHIQ_SERVI
 
 		kfree(waiter);
 	} else {
-		waiter->l = current;
+		waiter->pid = current->l_proc->p_pid;
 		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 lwp %p",
-				(unsigned int)waiter, current);
+				"saved bulk_waiter %x for pid %d",
+				(unsigned int)waiter, current->l_proc->p_pid);
 	}
 
 	return status;

Reply via email to