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) {
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);
u8 value = ioport__read8(data);
kvm->nmi_disabled = value & (1UL << 7);
-
rtc.cmos_idx = value & ~(1UL << 7);
return true;
.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