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 *);

Reply via email to