From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [RFC 11/12] kvm tools: Fixes for rtc module Date: Mon, 19 Dec 2011 15:58:33 +0200 Message-ID: <1324303114-5948-12-git-send-email-levinsasha928@gmail.com> References: <1324303114-5948-1-git-send-email-levinsasha928@gmail.com> Cc: mingo@elte.hu, gorcunov@gmail.com, asias.hejun@gmail.com, kvm@vger.kernel.org, Sasha Levin To: penberg@kernel.org Return-path: Received: from mail-we0-f174.google.com ([74.125.82.174]:46752 "EHLO mail-we0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753104Ab1LSN7W (ORCPT ); Mon, 19 Dec 2011 08:59:22 -0500 Received: by mail-we0-f174.google.com with SMTP id m1so1284807wer.19 for ; Mon, 19 Dec 2011 05:59:22 -0800 (PST) In-Reply-To: <1324303114-5948-1-git-send-email-levinsasha928@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Fixes include: - Error handling - Cleanup - Standard init/uninit Signed-off-by: Sasha Levin --- tools/kvm/builtin-run.c | 10 +++++++++- tools/kvm/hw/rtc.c | 27 +++++++++++++++++++++++---- tools/kvm/include/kvm/rtc.h | 5 ++++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c index 0b94ef0..5b198e0 100644 --- a/tools/kvm/builtin-run.c +++ b/tools/kvm/builtin-run.c @@ -1076,7 +1076,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_error("rtc__init() failed with error %d\n", r); + goto fail; + } r = serial8250__init(kvm); if (r < 0) { @@ -1244,6 +1248,10 @@ static void kvm_cmd_run_uninit(int guest_ret) if (r < 0) pr_warning("serial8250__uninit() failed with error %d\n", r); + r = rtc__uninit(kvm); + if (r < 0) + pr_warning("rtc__uninit() 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); diff --git a/tools/kvm/hw/rtc.c b/tools/kvm/hw/rtc.c index 6d4a05a..affc5ee 100644 --- a/tools/kvm/hw/rtc.c +++ b/tools/kvm/hw/rtc.c @@ -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__uninit(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 diff --git a/tools/kvm/include/kvm/rtc.h b/tools/kvm/include/kvm/rtc.h index 0b8d9f9..a13db59a 100644 --- a/tools/kvm/include/kvm/rtc.h +++ b/tools/kvm/include/kvm/rtc.h @@ -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__uninit(struct kvm *kvm); #endif /* KVM__RTC_H */ -- 1.7.8