patch-2.4.22 linux-2.4.22/include/asm-mips64/param.h

Next file: linux-2.4.22/include/asm-mips64/pci.h
Previous file: linux-2.4.22/include/asm-mips64/page.h
Back to the patch index
Back to the overall index

diff -urN linux-2.4.21/include/asm-mips64/param.h linux-2.4.22/include/asm-mips64/param.h
@@ -10,13 +10,56 @@
 #define _ASM_PARAM_H
 
 #ifndef HZ
-#define HZ 100
-#  define HZ 100
+
 #ifdef __KERNEL__
-#  define hz_to_std(a) (a)
-#endif
+
+/* Safeguard against user stupidity  */
+#ifdef _SYS_PARAM_H
+#error Do not include <asm/param.h> with __KERNEL__ defined!
 #endif
 
+#include <linux/config.h>
+
+#ifdef CONFIG_DECSTATION
+   /*
+    * log2(HZ), change this here if you want another HZ value. This is also
+    * used in dec_time_init.  Minimum is 1, Maximum is 15.
+    */
+#  define LOG_2_HZ 7
+#  define HZ (1 << LOG_2_HZ)
+   /*
+    * Ye olde division-by-multiplication trick.
+    * This works only if 100 / HZ <= 1
+    */
+#  define QUOTIENT ((1UL << (64 - LOG_2_HZ)) * 100)
+#  define hz_to_std(a)				\
+   ({ unsigned long __res;			\
+      unsigned long __lo;			\
+	__asm__("dmultu\t%2,%3\n\t"		\
+		:"=h" (__res), "=l" (__lo)	\
+		:"r" (a), "r" (QUOTIENT));	\
+	(__typeof__(a)) __res;})
+
+#else /* Not a DECstation  */
+
+/* This is the internal value of HZ, that is the rate at which the jiffies
+   counter is increasing.  This value is independent from the external value
+   and can be changed in order to suit the hardware and application
+   requirements.  */
+#  define HZ 100
+#  define hz_to_std(a) (a)
+
+#endif /* Not a DECstation  */
+
+#else /* defined(__KERNEL__)  */
+
+/* This is the external value of HZ as seen by user programs.  Don't change
+   unless you know what you're doing - changing breaks binary compatibility.  */
+#define HZ 100
+
+#endif /* defined(__KERNEL__)  */
+#endif /* defined(HZ)  */
+
 #define EXEC_PAGESIZE	4096
 
 #ifndef NGROUPS

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)