]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Fixes for rtc module
authorSasha Levin <levinsasha928@gmail.com>
Mon, 19 Dec 2011 09:28:17 +0000 (11:28 +0200)
committerSasha Levin <levinsasha928@gmail.com>
Sun, 29 Jan 2012 14:38:04 +0000 (09:38 -0500)
Fixes include:
 - Error handling
 - Cleanup
 - Standard init/uninit

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
tools/kvm/builtin-run.c
tools/kvm/hw/rtc.c
tools/kvm/include/kvm/rtc.h

index 7fd8303157f809967704844a6faf7d9714713a05..d18efceb4b60e92cd11488f21f973ade0b16ad67 100644 (file)
@@ -1117,7 +1117,11 @@ static int kvm_cmd_run_init(int argc, const char **argv)
 
        ioport__setup_arch();
 
-       rtc__init();
+       r = rtc__init(kvm);
+       if (r < 0) {
+               pr_err("rtc__init() failed with error %d\n", r);
+               goto fail;
+       }
 
        r = serial8250__init(kvm);
        if (r < 0) {
@@ -1278,6 +1282,10 @@ static void kvm_cmd_run_exit(int guest_ret)
        if (r < 0)
                pr_warning("serial8250__exit() failed with error %d\n", r);
 
+       r = rtc__exit(kvm);
+       if (r < 0)
+               pr_warning("rtc__exit() failed with error %d\n", r);
+
        r = kvm__arch_free_firmware(kvm);
        if (r < 0)
                pr_warning("kvm__arch_free_firmware() failed with error %d\n", r);
index 6d4a05af7029838c4889d3afce2dde92920b3c15..b4f9f1f2ece8cdfe2d801d852bc24a26b858fe8b 100644 (file)
@@ -100,7 +100,6 @@ static bool cmos_ram_index_out(struct ioport *ioport, struct kvm *kvm, u16 port,
        u8 value = ioport__read8(data);
 
        kvm->nmi_disabled       = value & (1UL << 7);
-
        rtc.cmos_idx            = value & ~(1UL << 7);
 
        return true;
@@ -110,9 +109,29 @@ static struct ioport_operations cmos_ram_index_ioport_ops = {
        .io_out         = cmos_ram_index_out,
 };
 
-void rtc__init(void)
+int rtc__init(struct kvm *kvm)
 {
+       int r = 0;
+
        /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */
-       ioport__register(0x0070, &cmos_ram_index_ioport_ops, 1, NULL);
-       ioport__register(0x0071, &cmos_ram_data_ioport_ops, 1, NULL);
+       r = ioport__register(0x0070, &cmos_ram_index_ioport_ops, 1, NULL);
+       if (r < 0)
+               return r;
+
+       r = ioport__register(0x0071, &cmos_ram_data_ioport_ops, 1, NULL);
+       if (r < 0) {
+               ioport__unregister(0x0071);
+               return r;
+       }
+
+       return r;
 }
+
+int rtc__exit(struct kvm *kvm)
+{
+       /* PORT 0070-007F - CMOS RAM/RTC (REAL TIME CLOCK) */
+       ioport__unregister(0x0070);
+       ioport__unregister(0x0071);
+
+       return 0;
+}
\ No newline at end of file
index 0b8d9f9d2b1635105b887c306872ea6c861b6381..6aa929913c6a9b6841554ba3ed2d0b711518ce09 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef KVM__RTC_H
 #define KVM__RTC_H
 
-void rtc__init(void);
+struct kvm;
+
+int rtc__init(struct kvm *kvm);
+int rtc__exit(struct kvm *kvm);
 
 #endif /* KVM__RTC_H */