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;