Module Name:    src
Committed By:   pgoyette
Date:           Sun Mar 22 13:30:11 UTC 2020

Modified Files:
        src/lib/librumpuser: rumpuser_dl.c
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpkern: rump.c

Log Message:
Teach rump to process __link_set_evcnts entries.  (Second part of
fix for PR kern/55088)


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/lib/librumpuser/rumpuser_dl.c
cvs rdiff -u -r1.115 -r1.116 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.342 -r1.343 src/sys/rump/librump/rumpkern/rump.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/librumpuser/rumpuser_dl.c
diff -u src/lib/librumpuser/rumpuser_dl.c:1.32 src/lib/librumpuser/rumpuser_dl.c:1.33
--- src/lib/librumpuser/rumpuser_dl.c:1.32	Sat Mar 21 04:48:37 2020
+++ src/lib/librumpuser/rumpuser_dl.c	Sun Mar 22 13:30:10 2020
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpuser_dl.c,v 1.32 2020/03/21 04:48:37 pgoyette Exp $	*/
+/*      $NetBSD: rumpuser_dl.c,v 1.33 2020/03/22 13:30:10 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -40,15 +40,12 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_dl.c,v 1.32 2020/03/21 04:48:37 pgoyette Exp $");
+__RCSID("$NetBSD: rumpuser_dl.c,v 1.33 2020/03/22 13:30:10 pgoyette Exp $");
 #endif /* !lint */
 
 #include <sys/types.h>
 #include <sys/time.h>
-
-#ifdef NOTYET
 #include <sys/evcnt.h>
-#endif
 
 #include <assert.h>
 
@@ -353,7 +350,8 @@ getsymbols(struct link_map *map, int ism
 
 static void
 process_object(void *handle,
-	rump_modinit_fn domodinit, rump_compload_fn docompload)
+	rump_modinit_fn domodinit, rump_compload_fn docompload,
+	rump_evcntattach_fn doevcntattach)
 {
 	const struct modinfo *const *mi_start, *const *mi_end;
 	struct rump_component *const *rc, *const *rc_end;
@@ -362,9 +360,7 @@ process_object(void *handle,
 	typedef void sysctl_setup_func(struct sysctllog **);
 	sysctl_setup_func *const *sfp, *const *sfp_end;
 
-#ifdef NOTYET	/* We don't yet handle link_set_evcnts */
 	struct evcnt *const *evp, *const *evp_end;
-#endif
 
 	mi_start = dlsym(handle, "__start_link_set_modules");
 	mi_end = dlsym(handle, "__stop_link_set_modules");
@@ -388,16 +384,14 @@ process_object(void *handle,
 		assert(sfp == sfp_end);
 	}
 
-#ifdef NOTYET
 	/* handle link_set_evcnts */
 	evp = dlsym(handle, "__start_link_set_evcnts");
 	evp_end = dlsym(handle, "__stop_link_set_evcnts");
 	if (evp && evp_end) {
 		for (; evp < evp_end; evp++)
-			evcnt_attach_static(*evp);
+			doevcntattach(*evp);
 		assert(evp == evp_end);
 	}
-#endif
 }
 
 /*
@@ -406,7 +400,8 @@ process_object(void *handle,
  */
 void
 rumpuser_dl_bootstrap(rump_modinit_fn domodinit,
-	rump_symload_fn symload, rump_compload_fn compload)
+	rump_symload_fn symload, rump_compload_fn compload,
+	rump_evcntattach_fn doevcntattach)
 {
 	struct link_map *map, *origmap, *mainmap;
 	void *mainhandle;
@@ -501,7 +496,7 @@ rumpuser_dl_bootstrap(rump_modinit_fn do
 			if (handle == NULL)
 				continue;
 		}
-		process_object(handle, domodinit, compload);
+		process_object(handle, domodinit, compload, doevcntattach);
 		if (map != mainmap)
 			dlclose(handle);
 	}
@@ -512,7 +507,8 @@ rumpuser_dl_bootstrap(rump_modinit_fn do
  */
 void
 rumpuser_dl_bootstrap(rump_modinit_fn domodinit,
-	rump_symload_fn symload, rump_compload_fn compload)
+	rump_symload_fn symload, rump_compload_fn compload,
+	rump_evcntattach_fn doevcntattach)
 {
 
 	return;

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.115 src/sys/rump/include/rump/rumpuser.h:1.116
--- src/sys/rump/include/rump/rumpuser.h:1.115	Wed Dec 27 09:01:53 2017
+++ src/sys/rump/include/rump/rumpuser.h	Sun Mar 22 13:30:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.115 2017/12/27 09:01:53 ozaki-r Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.116 2020/03/22 13:30:10 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2007-2013 Antti Kantee.  All Rights Reserved.
@@ -224,10 +224,13 @@ void rumpuser_cv_has_waiters(struct rump
 
 struct modinfo;
 struct rump_component;
+struct evcnt;
 typedef void (*rump_modinit_fn)(const struct modinfo *const *, size_t);
 typedef int (*rump_symload_fn)(void *, uint64_t, char *, uint64_t);
 typedef void (*rump_compload_fn)(const struct rump_component *);
-void rumpuser_dl_bootstrap(rump_modinit_fn, rump_symload_fn, rump_compload_fn);
+typedef void (*rump_evcntattach_fn)(struct evcnt *);
+void rumpuser_dl_bootstrap(rump_modinit_fn, rump_symload_fn, rump_compload_fn,
+    rump_evcntattach_fn);
 
 /*
  * misc management

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.342 src/sys/rump/librump/rumpkern/rump.c:1.343
--- src/sys/rump/librump/rumpkern/rump.c:1.342	Sat Feb 22 21:45:34 2020
+++ src/sys/rump/librump/rumpkern/rump.c	Sun Mar 22 13:30:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.342 2020/02/22 21:45:34 ad Exp $	*/
+/*	$NetBSD: rump.c,v 1.343 2020/03/22 13:30:10 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.342 2020/02/22 21:45:34 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.343 2020/03/22 13:30:10 pgoyette Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -129,6 +129,7 @@ rump_proc_vfs_init_fn rump_proc_vfs_init
 rump_proc_vfs_release_fn rump_proc_vfs_release = (void *)nullop;
 
 static void add_linkedin_modules(const struct modinfo *const *, size_t);
+static void add_static_evcnt(struct evcnt *);
 
 static pid_t rspo_wrap_getpid(void) {
 	return rump_sysproxy_hyp_getpid();
@@ -423,7 +424,7 @@ rump_init(void)
 
 	/* process dso's */
 	rumpuser_dl_bootstrap(add_linkedin_modules,
-	    rump_kernelfsym_load, rump_component_load);
+	    rump_kernelfsym_load, rump_component_load, add_static_evcnt);
 
 	rump_component_addlocal();
 	rump_component_init(RUMP_COMPONENT_KERN);
@@ -645,6 +646,18 @@ add_linkedin_modules(const struct modinf
 	module_builtin_add(mip, nmodinfo, false);
 }
 
+/*
+ * Add an evcnt.  Just in case it might already have been added, remove
+ * it first.
+ */
+static void
+add_static_evcnt(struct evcnt *ev)
+{
+
+	evcnt_detach(ev);
+	evcnt_attach_static(ev);
+}
+
 int
 rump_kernelfsym_load(void *symtab, uint64_t symsize,
 	char *strtab, uint64_t strsize)

Reply via email to