git: 9d1e7a7e8e8b - main - kinfo_knote: add knt_kq_fd member

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 24 Mar 2025 02:24:47 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=9d1e7a7e8e8bde5b343226ce0fefc583932d5af3

commit 9d1e7a7e8e8bde5b343226ce0fefc583932d5af3
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-03-13 23:34:40 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-03-24 02:24:13 +0000

    kinfo_knote: add knt_kq_fd member
    
    Note: this breaks kinfo_knote ABI
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D49372
---
 sys/kern/kern_event.c | 19 ++++++++++++-------
 sys/sys/user.h        |  1 +
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index b0106b5fa9ce..e9808e3c6e19 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -2873,7 +2873,7 @@ knote_status_export(int kn_status)
 
 static int
 kern_proc_kqueue_report_one(struct sbuf *s, struct proc *p,
-    struct kqueue *kq, struct knote *kn)
+    int kq_fd, struct kqueue *kq, struct knote *kn)
 {
 	struct kinfo_knote kin;
 	int error;
@@ -2882,6 +2882,7 @@ kern_proc_kqueue_report_one(struct sbuf *s, struct proc *p,
 		return (0);
 
 	memset(&kin, 0, sizeof(kin));
+	kin.knt_kq_fd = kq_fd;
 	memcpy(&kin.knt_event, &kn->kn_kevent, sizeof(struct kevent));
 	kin.knt_status = knote_status_export(kn->kn_status);
 	kn_enter_flux(kn);
@@ -2895,7 +2896,8 @@ kern_proc_kqueue_report_one(struct sbuf *s, struct proc *p,
 }
 
 static int
-kern_proc_kqueue_report(struct sbuf *s, struct proc *p, struct kqueue *kq)
+kern_proc_kqueue_report(struct sbuf *s, struct proc *p, int kq_fd,
+    struct kqueue *kq)
 {
 	struct knote *kn;
 	int error, i;
@@ -2904,7 +2906,8 @@ kern_proc_kqueue_report(struct sbuf *s, struct proc *p, struct kqueue *kq)
 	KQ_LOCK(kq);
 	for (i = 0; i < kq->kq_knlistsize; i++) {
 		SLIST_FOREACH(kn, &kq->kq_knlist[i], kn_link) {
-			error = kern_proc_kqueue_report_one(s, p, kq, kn);
+			error = kern_proc_kqueue_report_one(s, p, kq_fd,
+			    kq, kn);
 			if (error != 0)
 				goto out;
 		}
@@ -2913,7 +2916,8 @@ kern_proc_kqueue_report(struct sbuf *s, struct proc *p, struct kqueue *kq)
 		goto out;
 	for (i = 0; i <= kq->kq_knhashmask; i++) {
 		SLIST_FOREACH(kn, &kq->kq_knhash[i], kn_link) {
-			error = kern_proc_kqueue_report_one(s, p, kq, kn);
+			error = kern_proc_kqueue_report_one(s, p, kq_fd,
+			    kq, kn);
 			if (error != 0)
 				goto out;
 		}
@@ -2931,7 +2935,7 @@ sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS)
 	struct file *fp;
 	struct kqueue *kq;
 	struct sbuf *s, sm;
-	int error, error1, *name;
+	int error, error1, kq_fd, *name;
 
 	name = (int *)arg1;
 	if ((u_int)arg2 != 2)
@@ -2949,7 +2953,8 @@ sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS)
 #endif
 
 	td = curthread;
-	error = fget_remote(td, p, name[1] /* kqfd */, &fp);
+	kq_fd = name[1];
+	error = fget_remote(td, p, kq_fd, &fp);
 	if (error != 0)
 		goto out1;
 	if (fp->f_type != DTYPE_KQUEUE) {
@@ -2965,7 +2970,7 @@ sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS)
 	sbuf_clear_flags(s, SBUF_INCLUDENUL);
 
 	kq = fp->f_data;
-	error = kern_proc_kqueue_report(s, p, kq);
+	error = kern_proc_kqueue_report(s, p, kq_fd, kq);
 	error1 = sbuf_finish(s);
 	if (error == 0)
 		error = error1;
diff --git a/sys/sys/user.h b/sys/sys/user.h
index cf42412af66f..c053441c9e6a 100644
--- a/sys/sys/user.h
+++ b/sys/sys/user.h
@@ -677,6 +677,7 @@ struct kinfo_vm_layout {
 #define	KNOTE_EXTDATA_PIPE		2
 
 struct kinfo_knote {
+	int		knt_kq_fd;
 	struct kevent	knt_event;
 	int		knt_status;
 	int		knt_extdata;