Skip to content

Commit

Permalink
m68k/mac: Fix compiler warning in via_read_time()
Browse files Browse the repository at this point in the history
The algorithm described in the comment compares two reads from the RTC but
the code actually reads once and compares the result to an uninitialized
value. This causes the compiler to warn, "last_result maybe used
uninitialized". Make the code match the comment, fix the warning and
perhaps improve reliability. Tested on a Quadra 700.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
  • Loading branch information
Finn Thain authored and Geert Uytterhoeven committed Oct 24, 2011
1 parent d996e9d commit 75a2385
Showing 1 changed file with 23 additions and 17 deletions.
40 changes: 23 additions & 17 deletions arch/m68k/mac/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,35 +304,41 @@ static void via_write_pram(int offset, __u8 data)
static long via_read_time(void)
{
union {
__u8 cdata[4];
long idata;
__u8 cdata[4];
long idata;
} result, last_result;
int ct;
int count = 1;

via_pram_command(0x81, &last_result.cdata[3]);
via_pram_command(0x85, &last_result.cdata[2]);
via_pram_command(0x89, &last_result.cdata[1]);
via_pram_command(0x8D, &last_result.cdata[0]);

/*
* The NetBSD guys say to loop until you get the same reading
* twice in a row.
*/

ct = 0;
do {
if (++ct > 10) {
printk("via_read_time: couldn't get valid time, "
"last read = 0x%08lx and 0x%08lx\n",
last_result.idata, result.idata);
break;
}

last_result.idata = result.idata;
result.idata = 0;

while (1) {
via_pram_command(0x81, &result.cdata[3]);
via_pram_command(0x85, &result.cdata[2]);
via_pram_command(0x89, &result.cdata[1]);
via_pram_command(0x8D, &result.cdata[0]);
} while (result.idata != last_result.idata);

return result.idata - RTC_OFFSET;
if (result.idata == last_result.idata)
return result.idata - RTC_OFFSET;

if (++count > 10)
break;

last_result.idata = result.idata;
}

pr_err("via_read_time: failed to read a stable value; "
"got 0x%08lx then 0x%08lx\n",
last_result.idata, result.idata);

return 0;
}

/*
Expand Down

0 comments on commit 75a2385

Please sign in to comment.