Module Name: src Committed By: simonb Date: Tue Jul 21 05:33:51 UTC 2020
Modified Files: src/sys/compat/netbsd32: netbsd32_ioctl.c netbsd32_ioctl.h Log Message: Add lockstat(1) ioctl handling. mrg@: "looks ok." To generate a diff of this commit: cvs rdiff -u -r1.113 -r1.114 src/sys/compat/netbsd32/netbsd32_ioctl.c cvs rdiff -u -r1.71 -r1.72 src/sys/compat/netbsd32/netbsd32_ioctl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/netbsd32/netbsd32_ioctl.c diff -u src/sys/compat/netbsd32/netbsd32_ioctl.c:1.113 src/sys/compat/netbsd32/netbsd32_ioctl.c:1.114 --- src/sys/compat/netbsd32/netbsd32_ioctl.c:1.113 Sat Jul 18 12:46:19 2020 +++ src/sys/compat/netbsd32/netbsd32_ioctl.c Tue Jul 21 05:33:51 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_ioctl.c,v 1.113 2020/07/18 12:46:19 jmcneill Exp $ */ +/* $NetBSD: netbsd32_ioctl.c,v 1.114 2020/07/21 05:33:51 simonb Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.113 2020/07/18 12:46:19 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.114 2020/07/21 05:33:51 simonb Exp $"); #if defined(_KERNEL_OPT) #include "opt_ntp.h" @@ -1043,6 +1043,54 @@ netbsd32_from_dkwedge_list(const struct s32p->dkwl_ncopied = p->dkwl_ncopied; } +static inline void +netbsd32_to_lsenable(struct netbsd32_lsenable *le32, struct lsenable *le, + u_long cmd) +{ + + le->le_csstart = le32->le_csstart; + le->le_csend = le32->le_csend; + le->le_lockstart = le32->le_lockstart; + le->le_lockend = le32->le_lockend; + le->le_nbufs = le32->le_nbufs; + le->le_flags = le32->le_flags; + le->le_mask = le32->le_mask; +} + +static inline void +netbsd32_from_lsenable(struct lsenable *le, struct netbsd32_lsenable *le32, + u_long cmd) +{ + + le32->le_csstart = le->le_csstart; + le32->le_csend = le->le_csend; + le32->le_lockstart = le->le_lockstart; + le32->le_lockend = le->le_lockend; + le32->le_nbufs = le->le_nbufs; + le32->le_flags = le->le_flags; + le32->le_mask = le->le_mask; +} + +static inline void +netbsd32_to_lsdisable(struct netbsd32_lsdisable *ld32, struct lsdisable *ld, + u_long cmd) +{ + + ld->ld_size = ld32->ld_size; + netbsd32_to_timespec(&ld32->ld_time, &ld->ld_time); + memcpy(&ld->ld_time, &ld32->ld_time, sizeof(ld->ld_time)); +} + +static inline void +netbsd32_from_lsdisable(struct lsdisable *ld, struct netbsd32_lsdisable *ld32, + u_long cmd) +{ + + ld->ld_size = ld32->ld_size; + netbsd32_from_timespec(&ld->ld_time, &ld32->ld_time); + memcpy(&ld->ld_time, &ld32->ld_time, sizeof(ld->ld_time)); +} + #ifdef NTP static int netbsd32_do_clockctl_ntp_adjtime(struct file *fp, @@ -1540,6 +1588,11 @@ netbsd32_ioctl(struct lwp *l, case DIOCLWEDGES32: IOCTL_STRUCT_CONV_TO(DIOCLWEDGES, dkwedge_list); + case IOC_LOCKSTAT_ENABLE32: + IOCTL_STRUCT_CONV_TO(IOC_LOCKSTAT_ENABLE, lsenable); + case IOC_LOCKSTAT_DISABLE32: + IOCTL_STRUCT_CONV_TO(IOC_LOCKSTAT_DISABLE, lsdisable); + default: #ifdef NETBSD32_DRMKMS if (IOCGROUP(com) == 'd') { Index: src/sys/compat/netbsd32/netbsd32_ioctl.h diff -u src/sys/compat/netbsd32/netbsd32_ioctl.h:1.71 src/sys/compat/netbsd32/netbsd32_ioctl.h:1.72 --- src/sys/compat/netbsd32/netbsd32_ioctl.h:1.71 Sat Jul 18 12:46:19 2020 +++ src/sys/compat/netbsd32/netbsd32_ioctl.h Tue Jul 21 05:33:51 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_ioctl.h,v 1.71 2020/07/18 12:46:19 jmcneill Exp $ */ +/* $NetBSD: netbsd32_ioctl.h,v 1.72 2020/07/21 05:33:51 simonb Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -35,6 +35,7 @@ #include <dev/dkvar.h> #include <dev/vndvar.h> +#include <dev/lockstat.h> #include <dev/wscons/wsconsio.h> #include <net/route.h> #include <netinet/in.h> @@ -629,4 +630,24 @@ struct netbsd32_disk_strategy { #define DIOCGSTRATEGY32 _IOR('d', 125, struct netbsd32_disk_strategy) #define DIOCSSTRATEGY32 _IOW('d', 126, struct netbsd32_disk_strategy) +/* from <dev/lockstat.h> */ +struct netbsd32_lsenable { + netbsd32_uintptr_t le_csstart; /* callsite start */ + netbsd32_uintptr_t le_csend; /* callsite end */ + netbsd32_uintptr_t le_lockstart; /* lock address start */ + netbsd32_uintptr_t le_lockend; /* lock address end */ + netbsd32_uintptr_t le_nbufs; /* buffers to allocate, 0 = default */ + u_int le_flags; /* request flags */ + u_int le_mask; /* event mask (LB_*) */ +}; + +struct netbsd32_lsdisable { + netbsd32_size_t ld_size; /* buffer space allocated */ + struct netbsd32_timespec ld_time; /* time spent enabled */ + uint64_t ld_freq[64]; /* counter HZ by CPU number */ +} __packed; + +#define IOC_LOCKSTAT_ENABLE32 _IOW('L', 1, struct netbsd32_lsenable) +#define IOC_LOCKSTAT_DISABLE32 _IOR('L', 2, struct netbsd32_lsdisable) + int netbsd32_drm_ioctl(struct file *, unsigned long, void *, struct lwp *);