[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#542275: kernel error message for #542275 + patch



On Wed, 2010-02-03 at 01:43 +0100, Benjamin Cama wrote:
> Hi,
> 
> I tested Ben Hutchings' patch and got this result (on a PowerBook6,8) :
> 
>  rtc-generic rtc-generic: hctosys: unable to read the hardware clock
> (-22)
> 
> Hope this can help solve this bug.

Error 22 is EINVAL and actually indicates an invalid time.

If you don't mind applying another patch, this would help debug this
further:

diff --git a/arch/powerpc/platforms/powermac/time.c b/arch/powerpc/platforms/powermac/time.c
index 1810e42..2b60d12 100644
--- a/arch/powerpc/platforms/powermac/time.c
+++ b/arch/powerpc/platforms/powermac/time.c
@@ -108,8 +108,10 @@ static unsigned long cuda_get_time(void)
 	struct adb_request req;
 	unsigned int now;
 
-	if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0)
+	if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0) {
+		printk(KERN_ERR "cuda_get_time: cuda_request failed\n");
 		return 0;
+	}
 	while (!req.complete)
 		cuda_poll();
 	if (req.reply_len != 7)
@@ -117,6 +119,7 @@ static unsigned long cuda_get_time(void)
 		       req.reply_len);
 	now = (req.reply[3] << 24) + (req.reply[4] << 16)
 		+ (req.reply[5] << 8) + req.reply[6];
+	printk(KERN_ERR "cuda_get_time: now = %u\n", now);
 	return ((unsigned long)now) - RTC_OFFSET;
 }
 
@@ -152,14 +155,17 @@ static unsigned long pmu_get_time(void)
 	struct adb_request req;
 	unsigned int now;
 
-	if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0)
+	if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0) {
+		printk(KERN_ERR "pmu_get_time: pmu_request failed\n");
 		return 0;
+	}
 	pmu_wait_complete(&req);
 	if (req.reply_len != 4)
 		printk(KERN_ERR "pmu_get_time: got %d byte reply from PMU\n",
 		       req.reply_len);
 	now = (req.reply[0] << 24) + (req.reply[1] << 16)
 		+ (req.reply[2] << 8) + req.reply[3];
+	printk(KERN_ERR "pmu_get_time: now = %u\n", now);
 	return ((unsigned long)now) - RTC_OFFSET;
 }
 
--- a/drivers/macintosh/smu.c
+++ b/drivers/macintosh/smu.c
@@ -385,14 +385,20 @@ int smu_get_rtc_time(struct rtc_time *time, int spinwait)
 	struct smu_simple_cmd cmd;
 	int rc;
 
-	if (smu == NULL)
+	if (smu == NULL) {
+		printk(KERN_ERR "smu_get_rtc_time: SMU not present\n");
 		return -ENODEV;
+	}
 
 	memset(time, 0, sizeof(struct rtc_time));
 	rc = smu_queue_simple(&cmd, SMU_CMD_RTC_COMMAND, 1, NULL, NULL,
 			      SMU_CMD_RTC_GET_DATETIME);
-	if (rc)
+	if (rc) {
+		printk(KERN_ERR
+		       "smu_get_rtc_time: smu_queue_simple returned %d\n",
+		       rc);
 		return rc;
+	}
 	smu_spinwait_simple(&cmd);
 
 	time->tm_sec = bcd2hex(cmd.buffer[0]);
--- a/drivers/rtc/rtc-lib.c
+++ b/drivers/rtc/rtc-lib.c
@@ -99,8 +99,13 @@ int rtc_valid_tm(struct rtc_time *tm)
 		|| tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900)
 		|| ((unsigned)tm->tm_hour) >= 24
 		|| ((unsigned)tm->tm_min) >= 60
-		|| ((unsigned)tm->tm_sec) >= 60)
+		|| ((unsigned)tm->tm_sec) >= 60) {
+		printk(KERN_ERR "rtc_valid_tm: invalid time"
+		       " { %d, %d, %d, %d, %d, %d }\n",
+		       tm->tm_year, tm->tm_mon, tm->tm_mday,
+		       tm->tm_hour, tm->tm_min, tm->tm_sec);
 		return -EINVAL;
+	}
 
 	return 0;
 }
--- END ---

Ben.

-- 
Ben Hutchings
I'm not a reverse psychological virus.  Please don't copy me into your sig.

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: