svn commit: r191966 - in head/sys: amd64/linux32 compat/linux i386/linux

Dmitry Chagin dchagin at FreeBSD.org
Sun May 10 18:16:08 UTC 2009


Author: dchagin
Date: Sun May 10 18:16:07 2009
New Revision: 191966
URL: http://svn.freebsd.org/changeset/base/191966

Log:
  Rework r189362, r191883.
  The frequency of the statistics clock is given by stathz.
  Use stathz if it is available, otherwise use hz.
  
  Pointed out by:	bde
  
  Approved by:	kib (mentor)

Modified:
  head/sys/amd64/linux32/linux32_sysvec.c
  head/sys/compat/linux/linux_misc.c
  head/sys/compat/linux/linux_misc.h
  head/sys/i386/linux/linux_sysvec.c

Modified: head/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- head/sys/amd64/linux32/linux32_sysvec.c	Sun May 10 18:11:14 2009	(r191965)
+++ head/sys/amd64/linux32/linux32_sysvec.c	Sun May 10 18:16:07 2009	(r191966)
@@ -261,7 +261,7 @@ elf_linux_fixup(register_t **stack_base,
 	pos = base + (imgp->args->argc + imgp->args->envc + 2);
 
 	AUXARGS_ENTRY_32(pos, LINUX_AT_HWCAP, cpu_feature);
-	AUXARGS_ENTRY_32(pos, LINUX_AT_CLKTCK, hz);
+	AUXARGS_ENTRY_32(pos, LINUX_AT_CLKTCK, stclohz);
 	AUXARGS_ENTRY_32(pos, AT_PHDR, args->phdr);
 	AUXARGS_ENTRY_32(pos, AT_PHENT, args->phent);
 	AUXARGS_ENTRY_32(pos, AT_PHNUM, args->phnum);
@@ -1125,6 +1125,7 @@ linux_elf_modevent(module_t mod, int typ
 			linux_szplatform = roundup(strlen(linux_platform) + 1,
 			    sizeof(char *));
 			linux_osd_jail_register();
+			stclohz = (stathz ? stathz : hz);
 			if (bootverbose)
 				printf("Linux ELF exec handler installed\n");
 		} else

Modified: head/sys/compat/linux/linux_misc.c
==============================================================================
--- head/sys/compat/linux/linux_misc.c	Sun May 10 18:11:14 2009	(r191965)
+++ head/sys/compat/linux/linux_misc.c	Sun May 10 18:16:07 2009	(r191966)
@@ -92,6 +92,8 @@ __FBSDID("$FreeBSD$");
 #include <compat/linux/linux_emul.h>
 #include <compat/linux/linux_misc.h>
 
+int stclohz;				/* Statistics clock frequency */
+
 #define BSD_TO_LINUX_SIGNAL(sig)	\
 	(((sig) <= LINUX_SIGTBLSZ) ? bsd_to_linux_signal[_SIG_IDX(sig)] : sig)
 
@@ -659,7 +661,7 @@ struct l_times_argv {
 	l_clock_t	tms_cstime;
 };
 
-#define CONVTCK(r)	(r.tv_sec * hz + r.tv_usec / (1000000 / hz))
+#define CONVTCK(r)	(r.tv_sec * stclohz + r.tv_usec / (1000000 / stclohz))
 
 int
 linux_times(struct thread *td, struct linux_times_args *args)

Modified: head/sys/compat/linux/linux_misc.h
==============================================================================
--- head/sys/compat/linux/linux_misc.h	Sun May 10 18:11:14 2009	(r191965)
+++ head/sys/compat/linux/linux_misc.h	Sun May 10 18:16:07 2009	(r191966)
@@ -65,4 +65,6 @@ extern const char *linux_platform;
 #define	__LINUX_NPXCW__		0x37f
 #endif
 
+extern int stclohz;
+
 #endif	/* _LINUX_MISC_H_ */

Modified: head/sys/i386/linux/linux_sysvec.c
==============================================================================
--- head/sys/i386/linux/linux_sysvec.c	Sun May 10 18:11:14 2009	(r191965)
+++ head/sys/i386/linux/linux_sysvec.c	Sun May 10 18:16:07 2009	(r191966)
@@ -255,7 +255,7 @@ elf_linux_fixup(register_t **stack_base,
 	pos = *stack_base + (imgp->args->argc + imgp->args->envc + 2);
 
 	AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature);
-	AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, hz);
+	AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz);
 	AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
 	AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
 	AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum);
@@ -1092,6 +1092,7 @@ linux_elf_modevent(module_t mod, int typ
 			linux_szplatform = roundup(strlen(linux_platform) + 1,
 			    sizeof(char *));
 			linux_osd_jail_register();
+			stclohz = (stathz ? stathz : hz);
 			if (bootverbose)
 				printf("Linux ELF exec handler installed\n");
 		} else


More information about the svn-src-head mailing list