sys/event.h: use freebsd32_uint64_t for kevent32 64bit members

Reviewed by:	brooks
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D55135
This commit is contained in:
Konstantin Belousov
2026-02-05 21:22:44 +02:00
parent 9ce0c190d8
commit ad639400dc
3 changed files with 11 additions and 39 deletions
+6 -32
View File
@@ -713,31 +713,16 @@ freebsd32_pselect(struct thread *td, struct freebsd32_pselect_args *uap)
static void
freebsd32_kevent_to_kevent32(const struct kevent *kevp, struct kevent32 *ks32)
{
uint64_t e;
int j;
CP(*kevp, *ks32, ident);
CP(*kevp, *ks32, filter);
CP(*kevp, *ks32, flags);
CP(*kevp, *ks32, fflags);
#if BYTE_ORDER == LITTLE_ENDIAN
ks32->data1 = kevp->data;
ks32->data2 = kevp->data >> 32;
#else
ks32->data1 = kevp->data >> 32;
ks32->data2 = kevp->data;
#endif
FU64_CP(*kevp, *ks32, data);
PTROUT_CP(*kevp, *ks32, udata);
for (j = 0; j < nitems(kevp->ext); j++) {
e = kevp->ext[j];
#if BYTE_ORDER == LITTLE_ENDIAN
ks32->ext64[2 * j] = e;
ks32->ext64[2 * j + 1] = e >> 32;
#else
ks32->ext64[2 * j] = e >> 32;
ks32->ext64[2 * j + 1] = e;
#endif
}
for (j = 0; j < nitems(kevp->ext); j++)
FU64_CP(*kevp, *ks32, ext[j]);
}
void
@@ -819,7 +804,6 @@ freebsd32_kevent_copyin(void *arg, struct kevent *kevp, int count)
{
struct freebsd32_kevent_args *uap;
struct kevent32 ks32[KQ_NEVENTS];
uint64_t e;
int i, j, error;
KASSERT(count <= KQ_NEVENTS, ("count (%d) > KQ_NEVENTS", count));
@@ -835,20 +819,10 @@ freebsd32_kevent_copyin(void *arg, struct kevent *kevp, int count)
CP(ks32[i], kevp[i], filter);
CP(ks32[i], kevp[i], flags);
CP(ks32[i], kevp[i], fflags);
kevp[i].data = PAIR32TO64(uint64_t, ks32[i].data);
FU64_CP(ks32[i], kevp[i], data);
PTRIN_CP(ks32[i], kevp[i], udata);
for (j = 0; j < nitems(kevp->ext); j++) {
#if BYTE_ORDER == LITTLE_ENDIAN
e = ks32[i].ext64[2 * j + 1];
e <<= 32;
e += ks32[i].ext64[2 * j];
#else
e = ks32[i].ext64[2 * j];
e <<= 32;
e += ks32[i].ext64[2 * j + 1];
#endif
kevp[i].ext[j] = e;
}
for (j = 0; j < nitems(kevp->ext); j++)
FU64_CP(ks32[i], kevp[i], ext[j]);
}
done:
return (error);
+4 -2
View File
@@ -104,6 +104,8 @@ struct freebsd11_kevent {
#endif
#if defined(_WANT_KEVENT32) || defined(_KERNEL)
#include <sys/abi_compat.h>
struct kevent32 {
__uint32_t ident; /* identifier for this event */
short filter; /* filter for event */
@@ -112,12 +114,12 @@ struct kevent32 {
#ifndef __amd64__
__uint32_t pad0;
#endif
__uint32_t data1, data2;
freebsd32_uint64_t data;
__uint32_t udata; /* opaque user data identifier */
#ifndef __amd64__
__uint32_t pad1;
#endif
__uint32_t ext64[8];
freebsd32_uint64_t ext[4];
};
#ifdef _WANT_FREEBSD11_KEVENT
+1 -5
View File
@@ -2404,11 +2404,7 @@ ktrstructarray(struct ktr_struct_array *ksa, size_t buflen)
kev.filter = kev32.filter;
kev.flags = kev32.flags;
kev.fflags = kev32.fflags;
#if BYTE_ORDER == BIG_ENDIAN
kev.data = kev32.data2 | ((int64_t)kev32.data1 << 32);
#else
kev.data = kev32.data1 | ((int64_t)kev32.data2 << 32);
#endif
memcpy(&kev.data, &kev32.data, sizeof(kev.data));
kev.udata = (void *)(uintptr_t)kev32.udata;
ktrkevent(&kev);
} else if (strcmp(name, "freebsd11_kevent32") == 0) {