diff --git a/sys/dev/ntsync/ntsync.c b/sys/dev/ntsync/ntsync.c index 8b0984d12c75..a7b002de7cb6 100644 --- a/sys/dev/ntsync/ntsync.c +++ b/sys/dev/ntsync/ntsync.c @@ -19,6 +19,7 @@ #include #include #include +#include #include static struct cdev *ntsync_cdev; @@ -484,7 +485,19 @@ static int ntsync_sem_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp) { - // XXXKIB + struct ntsync_obj *obj; + struct ntsync_obj_sem *sem; + + MPASS(fp->f_type == DTYPE_NTSYNC); + obj = fp->f_data; + MPASS(obj->type == NTSYNC_OBJ_SEM); + sem = OBJ_TO_SEM(obj); + + kif->kf_type = KF_TYPE_NTSYNC; + kif->kf_un.kf_ntsync.kf_ntsync_type = KF_NTSYNC_TYPE_SEM; + kif->kf_un.kf_ntsync.kf_ntsync_dev = (uintptr_t)obj->owner; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_sem.count = sem->a.count; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_sem.max = sem->a.max; return (0); } @@ -778,7 +791,21 @@ static int ntsync_mutex_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp) { - // XXXKIB + struct ntsync_obj *obj; + struct ntsync_obj_mutex *mutex; + + MPASS(fp->f_type == DTYPE_NTSYNC); + obj = fp->f_data; + MPASS(obj->type == NTSYNC_OBJ_MUTEX); + mutex = OBJ_TO_MUTEX(obj); + + kif->kf_type = KF_TYPE_NTSYNC; + kif->kf_un.kf_ntsync.kf_ntsync_type = KF_NTSYNC_TYPE_MUTEX; + kif->kf_un.kf_ntsync.kf_ntsync_dev = (uintptr_t)obj->owner; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_mutex.owner = + mutex->a.owner; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_mutex.count = + mutex->a.count; return (0); } @@ -1053,7 +1080,21 @@ static int ntsync_event_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp) { - // XXXKIB + struct ntsync_obj *obj; + struct ntsync_obj_event *event; + + MPASS(fp->f_type == DTYPE_NTSYNC); + obj = fp->f_data; + MPASS(obj->type == NTSYNC_OBJ_EVENT); + event = OBJ_TO_EVENT(obj); + + kif->kf_type = KF_TYPE_NTSYNC; + kif->kf_un.kf_ntsync.kf_ntsync_type = KF_NTSYNC_TYPE_EVENT; + kif->kf_un.kf_ntsync.kf_ntsync_dev = (uintptr_t)obj->owner; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_event.signaled = + event->a.signaled; + kif->kf_un.kf_ntsync.kf_ntsync_un.kf_ntsync_event.manual = + event->a.manual; return (0); } diff --git a/sys/sys/user.h b/sys/sys/user.h index e1a3897cd319..75e76f622c0d 100644 --- a/sys/sys/user.h +++ b/sys/sys/user.h @@ -269,6 +269,7 @@ struct user { #define KF_TYPE_TIMERFD 14 #define KF_TYPE_INOTIFY 15 #define KF_TYPE_JAILDESC 16 +#define KF_TYPE_NTSYNC 17 #define KF_TYPE_UNKNOWN 255 #define KF_VTYPE_VNON 0 @@ -289,6 +290,11 @@ struct user { #define KF_FD_TYPE_TEXT -5 /* Text vnode */ #define KF_FD_TYPE_CTTY -6 /* Controlling terminal */ +#define KF_NTSYNC_TYPE_DEV 1 /* Not reported, reserved */ +#define KF_NTSYNC_TYPE_SEM 2 +#define KF_NTSYNC_TYPE_MUTEX 3 +#define KF_NTSYNC_TYPE_EVENT 4 + #define KF_FLAG_READ 0x00000001 #define KF_FLAG_WRITE 0x00000002 #define KF_FLAG_APPEND 0x00000004 @@ -467,6 +473,24 @@ struct kinfo_file { uint64_t kf_inotify_npending; uint64_t kf_inotify_nbpending; } kf_inotify; + struct { + uint32_t kf_ntsync_type; + uint64_t kf_ntsync_dev; + union { + struct { + uint32_t count; + uint32_t max; + } kf_ntsync_sem; + struct{ + uint32_t owner; + uint32_t count; + } kf_ntsync_mutex; + struct { + uint32_t signaled; + uint32_t manual; + } kf_ntsync_event; + } kf_ntsync_un; + } kf_ntsync; } kf_un; }; uint16_t kf_status; /* Status flags. */