Module Name:    src
Committed By:   thorpej
Date:           Mon Jan 15 18:14:24 UTC 2024

Modified Files:
        src/sys/sys: device.h evcnt.h

Log Message:
Provide an ev_count32 field for situations where a 32-bit counter is
sufficient (and, notably, might be desirable to avoid 64-bit math on
an older 32-bit platform).  This is overlaid on the 64-bit counter
field, and simply references the correct half based on byte order.


To generate a diff of this commit:
cvs rdiff -u -r1.186 -r1.187 src/sys/sys/device.h
cvs rdiff -u -r1.10 -r1.11 src/sys/sys/evcnt.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/sys/device.h
diff -u src/sys/sys/device.h:1.186 src/sys/sys/device.h:1.187
--- src/sys/sys/device.h:1.186	Mon May 22 14:58:22 2023
+++ src/sys/sys/device.h	Mon Jan 15 18:14:23 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: device.h,v 1.186 2023/05/22 14:58:22 riastradh Exp $ */
+/* $NetBSD: device.h,v 1.187 2024/01/15 18:14:23 thorpej Exp $ */
 
 /*
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -622,11 +622,16 @@ bool		devhandle_is_valid(devhandle_t);
 devhandle_t	devhandle_invalid(void);
 devhandle_type_t devhandle_type(devhandle_t);
 int		devhandle_compare(devhandle_t, devhandle_t);
+devhandle_t	devhandle_subclass(devhandle_t, struct devhandle_impl *,
+		    device_call_t (*)(devhandle_t, const char *,
+				      devhandle_t *));
 
 device_call_t	devhandle_lookup_device_call(devhandle_t, const char *,
 		    devhandle_t *);
-void		devhandle_impl_inherit(struct devhandle_impl *,
-		    const struct devhandle_impl *);
+void		devhandle_impl_subclass(struct devhandle_impl *,
+		    const struct devhandle_impl *,
+		    device_call_t (*)(devhandle_t, const char *,
+				      devhandle_t *));
 
 device_t	deviter_first(deviter_t *, deviter_flags_t);
 void		deviter_init(deviter_t *, deviter_flags_t);
@@ -717,10 +722,13 @@ struct device_call_generic {
 	void *args;
 };
 
-int	device_call_generic(device_t, const struct device_call_generic *);
+int		device_call_generic(device_t, devhandle_t,
+		    const struct device_call_generic *);
 
 #define	device_call(dev, call)						\
-	device_call_generic((dev), &(call)->generic)
+	device_call_generic((dev), device_handle(dev), &(call)->generic)
+#define	devhandle_call(handle, call)					\
+	device_call_generic(NULL, (handle), &(call)->generic)
 
 #endif /* _KERNEL */
 

Index: src/sys/sys/evcnt.h
diff -u src/sys/sys/evcnt.h:1.10 src/sys/sys/evcnt.h:1.11
--- src/sys/sys/evcnt.h:1.10	Tue Aug  3 23:12:14 2021
+++ src/sys/sys/evcnt.h	Mon Jan 15 18:14:23 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: evcnt.h,v 1.10 2021/08/03 23:12:14 andvar Exp $	*/
+/*	$NetBSD: evcnt.h,v 1.11 2024/01/15 18:14:23 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1996, 2000 Christopher G. Demetriou
@@ -83,7 +83,10 @@
  */
 
 struct evcnt {
-	uint64_t	ev_count;	/* how many have occurred */
+	union {
+		uint64_t ev_count;	/* how many have occurred */
+		uint32_t ev__count32[2];
+	};
 	TAILQ_ENTRY(evcnt) ev_list;	/* entry on list of all counters */
 	unsigned char	ev_type;	/* counter type; see below */
 	unsigned char	ev_grouplen;	/* 'group' len, excluding NUL */
@@ -95,6 +98,16 @@ struct evcnt {
 };
 TAILQ_HEAD(evcntlist, evcnt);
 
+/*
+ * For 32-bit counters, ev_count32 is the correct half of the 64-bit
+ * counter field.
+ */
+#if _BYTE_ORDER == _BIG_ENDIAN
+#define	ev_count32	ev__count32[1]
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+#define	ev_count32	ev__count32[0]
+#endif
+
 /* maximum group/name lengths, including trailing NUL */
 #define	EVCNT_STRING_MAX	255
 

Reply via email to