[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v4 01/12] x86/rtc: drop code related to strict mode
Xen has been for a long time setting the WAET ACPI table "RTC good" flag, which implies there's no need to perform a read of the RTC REG_C register in order to get further interrupts after having received one. This is hardcoded in the static ACPI tables, and in the RTC emulation in Xen. Drop the support for the alternative (strict) mode, it's been unused for a long (since Xen 4.3) time without any complains. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- Further changes in the series will require that no registering or unregistering of callback is done inside of the handlers themselves, like it was done in rtc_pf_callback when in strict_mode. --- Changes since v3: - New in this version. --- xen/arch/x86/hvm/rtc.c | 27 +-------------------------- xen/arch/x86/hvm/vpt.c | 4 +--- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index 3150f5f1479..9992595c45a 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -46,15 +46,6 @@ #define epoch_year 1900 #define get_year(x) (x + epoch_year) -enum rtc_mode { - rtc_mode_no_ack, - rtc_mode_strict -}; - -/* This must be in sync with how hvmloader sets the ACPI WAET flags. */ -#define mode_is(d, m) ((void)(d), rtc_mode_##m == rtc_mode_no_ack) -#define rtc_mode_is(s, m) mode_is(vrtc_domain(s), m) - static void rtc_copy_date(RTCState *s); static void rtc_set_time(RTCState *s); static inline int from_bcd(RTCState *s, int a); @@ -64,9 +55,6 @@ static void rtc_update_irq(RTCState *s) { ASSERT(spin_is_locked(&s->lock)); - if ( rtc_mode_is(s, strict) && (s->hw.cmos_data[RTC_REG_C] & RTC_IRQF) ) - return; - /* IRQ is raised if any source is both raised & enabled */ if ( !(s->hw.cmos_data[RTC_REG_B] & s->hw.cmos_data[RTC_REG_C] & @@ -74,8 +62,7 @@ static void rtc_update_irq(RTCState *s) return; s->hw.cmos_data[RTC_REG_C] |= RTC_IRQF; - if ( rtc_mode_is(s, no_ack) ) - hvm_isa_irq_deassert(vrtc_domain(s), RTC_IRQ); + hvm_isa_irq_deassert(vrtc_domain(s), RTC_IRQ); hvm_isa_irq_assert(vrtc_domain(s), RTC_IRQ, NULL); } @@ -86,19 +73,7 @@ static void rtc_pf_callback(struct vcpu *v, void *opaque) RTCState *s = opaque; spin_lock(&s->lock); - - if ( !rtc_mode_is(s, no_ack) - && (s->hw.cmos_data[RTC_REG_C] & RTC_IRQF) - && ++(s->pt_dead_ticks) >= 10 ) - { - /* VM is ignoring its RTC; no point in running the timer */ - TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER); - destroy_periodic_time(&s->pt); - s->period = 0; - } - s->hw.cmos_data[RTC_REG_C] |= RTC_PF|RTC_IRQF; - spin_unlock(&s->lock); } diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 4cc0a0848bd..24d90c0a186 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -21,7 +21,6 @@ #include <asm/hvm/vpt.h> #include <asm/event.h> #include <asm/apic.h> -#include <asm/mc146818rtc.h> #include <public/hvm/params.h> #define mode_is(d, name) \ @@ -337,8 +336,7 @@ int pt_update_irq(struct vcpu *v) { if ( pt->pending_intr_nr ) { - /* RTC code takes care of disabling the timer itself. */ - if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) && + if ( pt_irq_masked(pt) && /* Level interrupts should be asserted even if masked. */ !pt->level ) { -- 2.30.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |