Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > main-src > by-pkgid > 276c4c69ed5efcebe43ee6121194cf59 > files > 12

kernel22-2.2.20-9mdk.src.rpm

diff -urN 2.2.20pre8/arch/alpha/kernel/time.c z/arch/alpha/kernel/time.c
--- 2.2.20pre8/arch/alpha/kernel/time.c	Mon Dec 11 16:57:43 2000
+++ z/arch/alpha/kernel/time.c	Tue Aug  7 16:19:57 2001
@@ -236,7 +236,7 @@
 time_init(void)
 {
 	void (*irq_handler)(int, void *, struct pt_regs *);
-	unsigned int year, mon, day, hour, min, sec, cc1, cc2;
+	unsigned int year, mon, day, hour, min, sec, cc1, cc2, epoch;
 	unsigned long cycle_freq, ppm_error;
 	long diff;
 
@@ -311,16 +311,23 @@
 		BCD_TO_BIN(mon);
 		BCD_TO_BIN(year);
 	}
-#ifdef ALPHA_PRE_V1_2_SRM_CONSOLE
-	/*
-	 * The meaning of life, the universe, and everything. Plus
-	 * this makes the year come out right on SRM consoles earlier
-	 * than v1.2.
-	 */
-	year -= 42;
-#endif
-	if ((year += 1900) < 1970)
+
+	/* PC-like is standard; used for year < 20 || year >= 70 */
+	epoch = 1900;
+	if (year < 20)
+		epoch = 2000;
+	else if (year >= 20 && year < 48)
+		/* NT epoch */
+		epoch = 1980;
+	else if (year >= 48 && year < 70)
+		/* Digital UNIX epoch */
+		epoch = 1952;
+
+	printk(KERN_INFO "Using epoch = %d\n", epoch);
+
+	if ((year += epoch) < 1970)
 		year += 100;
+
 	xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
 	xtime.tv_usec = 0;
 
diff -urN 2.2.20pre8/drivers/char/rtc.c z/drivers/char/rtc.c
--- 2.2.20pre8/drivers/char/rtc.c	Mon Dec 11 16:57:50 2000
+++ z/drivers/char/rtc.c	Tue Aug  7 16:19:55 2001
@@ -554,12 +554,24 @@
 	if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
 		BCD_TO_BIN(year);       /* This should never happen... */
 	
-	if (year > 10 && year < 44) {
+	if (year < 20) {
+		epoch = 2000;
+		guess = "SRM (post-2000)";
+	} else if (year >= 20 && year < 48) {
 		epoch = 1980;
 		guess = "ARC console";
-	} else if (year < 96) {
+	} else if (year >= 48 && year < 70) {
 		epoch = 1952;
 		guess = "Digital UNIX";
+#if defined(__mips__)
+	} else if (year >= 70 && year < 100) {
+		epoch = 1928;
+		guess = "Digital DECstation";
+#else
+	} else if (year >= 70) {
+		epoch = 1900;
+		guess = "Standard PC (1900)";
+#endif
 	}
 	if (guess)
 		printk("rtc: %s epoch (%lu) detected\n", guess, epoch);