Linux 3.4.107-rt134-rc1
cover Linux 3.4.107-rt134-rc1
Dear RT Folks,
This is the RT stable review cycle of patch 3.4.107-rt134-rc1.
Please scream at me if I messed something up. Please test the patches too.
The -rc release will be uploaded to kernel.org and will be deleted when the final release is out. This is just a review release (or release candidate).
The pre-releases will not be pushed to the git repository, only the final release is.
If all goes well, this patch will be converted to the next main release on 5/18/2015.
Enjoy,
-- Steve
To build 3.4.107-rt134-rc1 directly, the following patches should be applied:
http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.xz
http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.4.107.xz
http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4.107-rt134-rc1.patch.xz
You can also build from 3.4.107-rt133 by applying the incremental patch:
http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/incr/patch-3.4.107-rt133-rt134-rc1.patch.xz
Changes from 3.4.107-rt133:
---
Marcelo Tosatti (1):
KVM: lapic: mark LAPIC timer handler as irqsafe
Steven Rostedt (Red Hat) (1):
Linux 3.4.107-rt134-rc1
----
arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++++++++++++++++++--- localversion-rt | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-)
PATCH 1/2 KVM: lapic: mark LAPIC timer handler as irqsafe
3.4.107-rt134-rc1 stable review patch.
If anyone has any objections, please let me know.
------------------
From: Marcelo Tosatti <[email protected]>
Since lapic timer handler only wakes up a simple waitqueue, it can be executed from hardirq context.
Also handle the case where hrtimer_start_expires fails due to -ETIME, by injecting the interrupt to the guest immediately.
Reduces average cyclictest latency by 3us.
--- arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-)
arch/x86/kvm/lapic.c +39 -3
@@ -683,8 +683,38 @@ static void update_divide_count(struct kvm_lapic *apic) apic->divide_count); } + +static enum hrtimer_restart apic_timer_fn (struct hrtimer *data); + +static void apic_timer_expired (struct hrtimer *data) +{ +int ret, i =0 ; +enum hrtimer_restart r; + struct kvm_timer *ktimer = container_of(data, struct kvm_timer, timer); + + r =apic_timer_fn (data); + +if (r ==HRTIMER_RESTART ) { +do { + ret =hrtimer_start_expires (data,HRTIMER_MODE_ABS ); +if (ret == -ETIME ) +hrtimer_add_expires_ns (&ktimer->timer, + ktimer->period); + i++; + }while (ret == -ETIME && i <10 ); + +if (ret == -ETIME ) { +printk_once (KERN_ERR "%s: failed to reprogram timer\n" , + __func__); +WARN_ON_ONCE (1 ); + } + } +} + +static void start_apic_timer (struct kvm_lapic *apic) { +int ret;ktime_t now;atomic_set (&apic->lapic_timer.pending,0 );
@@ -714,9 +744,11 @@ static void start_apic_timer(struct kvm_lapic *apic) } } -hrtimer_start (&apic->lapic_timer.timer, + ret =hrtimer_start (&apic->lapic_timer.timer,ktime_add_ns (now, apic->lapic_timer.period),HRTIMER_MODE_ABS ); +if (ret == -ETIME ) +apic_timer_expired (&apic->lapic_timer.timer);apic_debug ("%s: bus cycle is %" PRId64"ns, now 0x%016" PRIx64 ", "
@@ -746,8 +778,10 @@ static void start_apic_timer(struct kvm_lapic *apic) ns = (tscdeadline - guest_tsc) *1000000ULL ;do_div (ns, this_tsc_khz); } -hrtimer_start (&apic->lapic_timer.timer, + ret =hrtimer_start (&apic->lapic_timer.timer,ktime_add_ns (now, ns),HRTIMER_MODE_ABS ); +if (ret == -ETIME ) +apic_timer_expired (&apic->lapic_timer.timer);local_irq_restore (flags); }
@@ -1177,6 +1211,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu)hrtimer_init (&apic->lapic_timer.timer,CLOCK_MONOTONIC ,HRTIMER_MODE_ABS ); apic->lapic_timer.timer.function = kvm_timer_fn; + apic->lapic_timer.timer.irqsafe =1 ; apic->lapic_timer.t_ops = &lapic_timer_ops; apic->lapic_timer.kvm = vcpu->kvm; apic->lapic_timer.vcpu = vcpu;
@@ -1273,7 +1308,8 @@ void __kvm_migrate_apic_timer(struct kvm_vcpu *vcpu) timer = &apic->lapic_timer.timer;if (hrtimer_cancel (timer)) -hrtimer_start_expires (timer,HRTIMER_MODE_ABS ); +if (hrtimer_start_expires (timer,HRTIMER_MODE_ABS ) == -ETIME ) +apic_timer_expired (timer); }void kvm_lapic_sync_from_vapic (struct kvm_vcpu *vcpu)
Signature · 1 line
2.1.4
PATCH 2/2 Linux 3.4.107-rt134-rc1
In reply to Steven Rostedt3.4.107-rt134-rc1 stable review patch.
If anyone has any objections, please let me know.
------------------
From: "Steven Rostedt (Red Hat)" <[email protected]>
--- localversion-rt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
localversion-rt +1 -1
@@ -1 +1 @@ --rt133 +-rt134-rc1
Signature · 1 line
2.1.4