All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Wu <wudxw@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/4] rtc: fix 12-hour mode
Date: Tue, 22 Nov 2011 14:39:21 +0800	[thread overview]
Message-ID: <4ECB4399.3090603@linux.vnet.ibm.com> (raw)
In-Reply-To: <1321898431-18449-2-git-send-email-pbonzini@redhat.com>

On 11/22/2011 02:00 AM, Paolo Bonzini wrote:
> Hours in 12-hour mode are in the 1-12 range, not 0-11.
Interesting. I would like to know how you could find this problem. It 
seems linux driver never changes the format  and 24-hour is default in 
rtc emulation code. So how did it expose and how to test it?

Thanks.
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
> ---
>   hw/mc146818rtc.c |   11 +++++++----
>   1 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
> index 2aaca2f..14c8cb9 100644
> --- a/hw/mc146818rtc.c
> +++ b/hw/mc146818rtc.c
> @@ -296,9 +296,11 @@ static void rtc_set_time(RTCState *s)
>       tm->tm_sec = rtc_from_bcd(s, s->cmos_data[RTC_SECONDS]);
>       tm->tm_min = rtc_from_bcd(s, s->cmos_data[RTC_MINUTES]);
>       tm->tm_hour = rtc_from_bcd(s, s->cmos_data[RTC_HOURS]&  0x7f);
> -    if (!(s->cmos_data[RTC_REG_B]&  REG_B_24H)&&
> -        (s->cmos_data[RTC_HOURS]&  0x80)) {
> -        tm->tm_hour += 12;
> +    if (!(s->cmos_data[RTC_REG_B]&  REG_B_24H)) {
> +        tm->tm_hour %= 12;
> +        if (s->cmos_data[RTC_HOURS]&  0x80) {
> +            tm->tm_hour += 12;
> +        }
>       }
>       tm->tm_wday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_WEEK]) - 1;
>       tm->tm_mday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_MONTH]);
> @@ -320,7 +324,8 @@ static void rtc_copy_date(RTCState *s)
>           s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, tm->tm_hour);
>       } else {
>           /* 12 hour format */
> -        s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, tm->tm_hour % 12);
> +        int h = (tm->tm_hour % 12) ? tm->tm_hour % 12 : 12;
> +        s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, h);
>           if (tm->tm_hour>= 12)
>               s->cmos_data[RTC_HOURS] |= 0x80;
>       }

  reply	other threads:[~2011-11-22  6:39 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-21 18:00 [Qemu-devel] [PATCH 0/4] Fixes to the rtc device model Paolo Bonzini
2011-11-21 18:00 ` [Qemu-devel] [PATCH 1/4] rtc: fix 12-hour mode Paolo Bonzini
2011-11-22  6:39   ` Mark Wu [this message]
2011-11-22  7:30     ` Paolo Bonzini
2012-01-01 14:53   ` Avi Kivity
2012-01-01 19:53     ` Paolo Bonzini
2011-11-21 18:00 ` [Qemu-devel] [PATCH 2/4] rtc: raise AF bit when the alarm is encountered but AIE=0 Paolo Bonzini
2011-11-21 18:00 ` [Qemu-devel] [PATCH 3/4] rtc: raise PF bit when the periodic timer triggers but PIE=0 Paolo Bonzini
2011-11-21 18:00 ` [Qemu-devel] [PATCH 4/4] rtc: clear non-PF bits when reinjecting on ack Paolo Bonzini
2011-12-30 15:58 ` [Qemu-devel] [PATCH 0/4] Fixes to the rtc device model Paolo Bonzini
2012-01-13 15:54   ` Paolo Bonzini
2012-01-13 16:54 ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ECB4399.3090603@linux.vnet.ibm.com \
    --to=wudxw@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.