Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 340e01248478ba8b78a6d4d1809b1eff > files > 87

kvm-83-270.el5_11.src.rpm

From bb05a1869e7ab73bd9f7785d333aff59fa493990 Mon Sep 17 00:00:00 2001
From: Ulrich Obergfell <uobergfe@redhat.com>
Date: Tue, 18 Oct 2011 06:43:23 +0200
Subject: [PATCH 4/5] BZ725876: make RTC alarm work

RH-Author: Ulrich Obergfell <uobergfe@redhat.com>
Message-id: <1318920204-3733-2-git-send-email-uobergfe@redhat.com>
Patchwork-id: 34341
O-Subject: [PATCH RHEL-5.8 qemu-kvm 1/2] BZ725876: make RTC alarm work
Bugzilla: 725876
RH-Acked-by: Gleb Natapov <gleb@redhat.com>
RH-Acked-by: Ronen Hod <rhod@redhat.com>
RH-Acked-by: Amos Kong <akong@redhat.com>

Upstream: commit f292787d9addffd5f0a2df9516c158bfb5792b61
Bugzilla: 725876

The format of the alarm time stored in 'cmos_data' can either be
binary or BCD, depending on the data mode bit in control register C.
Hence, rtc_update_second2() needs to convert 'cmos_data' to binary
before comparing the alarm time with 'current_tm'. The upstream
version of the patch calls rtc_from_bcd() to do the conversion.
Since rtc_from_bcd() does not exist in RHEL5 qemu-kvm code, we
utilize from_bcd() instead.

Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com>
---
 qemu/hw/mc146818rtc.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

Signed-off-by: Michal Novotny <mignov@gmail.com>
---
 qemu/hw/mc146818rtc.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/qemu/hw/mc146818rtc.c b/qemu/hw/mc146818rtc.c
index 247b56a..ab412c6 100644
--- a/qemu/hw/mc146818rtc.c
+++ b/qemu/hw/mc146818rtc.c
@@ -204,7 +204,6 @@ static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)
         case RTC_SECONDS_ALARM:
         case RTC_MINUTES_ALARM:
         case RTC_HOURS_ALARM:
-            /* XXX: not supported */
             s->cmos_data[s->cmos_index] = data;
             break;
         case RTC_SECONDS:
@@ -410,11 +409,11 @@ static void rtc_update_second2(void *opaque)
     /* check alarm */
     if (s->cmos_data[RTC_REG_B] & REG_B_AIE) {
         if (((s->cmos_data[RTC_SECONDS_ALARM] & 0xc0) == 0xc0 ||
-             s->cmos_data[RTC_SECONDS_ALARM] == s->current_tm.tm_sec) &&
+             from_bcd(s, s->cmos_data[RTC_SECONDS_ALARM]) == s->current_tm.tm_sec) &&
             ((s->cmos_data[RTC_MINUTES_ALARM] & 0xc0) == 0xc0 ||
-             s->cmos_data[RTC_MINUTES_ALARM] == s->current_tm.tm_mon) &&
+             from_bcd(s, s->cmos_data[RTC_MINUTES_ALARM]) == s->current_tm.tm_min) &&
             ((s->cmos_data[RTC_HOURS_ALARM] & 0xc0) == 0xc0 ||
-             s->cmos_data[RTC_HOURS_ALARM] == s->current_tm.tm_hour)) {
+             from_bcd(s, s->cmos_data[RTC_HOURS_ALARM]) == s->current_tm.tm_hour)) {
 
             s->cmos_data[RTC_REG_C] |= 0xa0;
             rtc_irq_raise(s->irq);
-- 
1.7.4.4