* [PATCH RT 0/2] Linux 3.4.107-rt134-rc1
@ 2015-05-14 14:07 Steven Rostedt
2015-05-14 14:07 ` [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe Steven Rostedt
2015-05-14 14:07 ` [PATCH RT 2/2] Linux 3.4.107-rt134-rc1 Steven Rostedt
0 siblings, 2 replies; 4+ messages in thread
From: Steven Rostedt @ 2015-05-14 14:07 UTC (permalink / raw)
To: linux-kernel, linux-rt-users
Cc: Thomas Gleixner, Carsten Emde, Sebastian Andrzej Siewior,
John Kacur, Paul Gortmaker
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(-)
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe 2015-05-14 14:07 [PATCH RT 0/2] Linux 3.4.107-rt134-rc1 Steven Rostedt @ 2015-05-14 14:07 ` Steven Rostedt 2015-05-14 14:07 ` [PATCH RT 2/2] Linux 3.4.107-rt134-rc1 Steven Rostedt 1 sibling, 0 replies; 4+ messages in thread From: Steven Rostedt @ 2015-05-14 14:07 UTC (permalink / raw) To: linux-kernel, linux-rt-users Cc: Thomas Gleixner, Carsten Emde, Sebastian Andrzej Siewior, John Kacur, Paul Gortmaker, stable-rt, Marcelo Tosatti [-- Attachment #1: 0001-KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch --] [-- Type: text/plain, Size: 3333 bytes --] 3.4.107-rt134-rc1 stable review patch. If anyone has any objections, please let me know. ------------------ From: Marcelo Tosatti <mtosatti@redhat.com> 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. Cc: stable-rt@vger.kernel.org Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 578613da251e..b4bdc60f171f 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -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) -- 2.1.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH RT 2/2] Linux 3.4.107-rt134-rc1 2015-05-14 14:07 [PATCH RT 0/2] Linux 3.4.107-rt134-rc1 Steven Rostedt 2015-05-14 14:07 ` [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe Steven Rostedt @ 2015-05-14 14:07 ` Steven Rostedt 1 sibling, 0 replies; 4+ messages in thread From: Steven Rostedt @ 2015-05-14 14:07 UTC (permalink / raw) To: linux-kernel, linux-rt-users Cc: Thomas Gleixner, Carsten Emde, Sebastian Andrzej Siewior, John Kacur, Paul Gortmaker [-- Attachment #1: 0002-Linux-3.4.107-rt134-rc1.patch --] [-- Type: text/plain, Size: 417 bytes --] 3.4.107-rt134-rc1 stable review patch. If anyone has any objections, please let me know. ------------------ From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org> --- localversion-rt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localversion-rt b/localversion-rt index c2c7e0fb6685..74bebbe8d7ed 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt133 +-rt134-rc1 -- 2.1.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH RT 0/2] Linux 3.2.68-rt100-rc1
@ 2015-05-14 14:08 Steven Rostedt
2015-05-14 14:08 ` [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe Steven Rostedt
0 siblings, 1 reply; 4+ messages in thread
From: Steven Rostedt @ 2015-05-14 14:08 UTC (permalink / raw)
To: linux-kernel, linux-rt-users
Cc: Thomas Gleixner, Carsten Emde, Sebastian Andrzej Siewior,
John Kacur, Paul Gortmaker
Dear RT Folks,
This is the RT stable review cycle of patch 3.2.68-rt100-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.2.68-rt100-rc1 directly, the following patches should be applied:
http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.xz
http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.2.68.xz
http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/patch-3.2.68-rt100-rc1.patch.xz
You can also build from 3.2.68-rt99 by applying the incremental patch:
http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/incr/patch-3.2.68-rt99-rt100-rc1.patch.xz
Changes from 3.2.68-rt99:
---
Marcelo Tosatti (1):
KVM: lapic: mark LAPIC timer handler as irqsafe
Steven Rostedt (Red Hat) (1):
Linux 3.2.68-rt100-rc1
----
arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++++++++++++++++++---
localversion-rt | 2 +-
2 files changed, 40 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe 2015-05-14 14:08 [PATCH RT 0/2] Linux 3.2.68-rt100-rc1 Steven Rostedt @ 2015-05-14 14:08 ` Steven Rostedt 0 siblings, 0 replies; 4+ messages in thread From: Steven Rostedt @ 2015-05-14 14:08 UTC (permalink / raw) To: linux-kernel, linux-rt-users Cc: Thomas Gleixner, Carsten Emde, Sebastian Andrzej Siewior, John Kacur, Paul Gortmaker, stable-rt, Marcelo Tosatti [-- Attachment #1: 0001-KVM-lapic-mark-LAPIC-timer-handler-as-irqsafe.patch --] [-- Type: text/plain, Size: 3332 bytes --] 3.2.68-rt100-rc1 stable review patch. If anyone has any objections, please let me know. ------------------ From: Marcelo Tosatti <mtosatti@redhat.com> 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. Cc: stable-rt@vger.kernel.org Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 176205ab0ca8..745cbfe4b51c 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -679,8 +679,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); @@ -710,9 +740,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 ", " @@ -742,8 +774,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); } @@ -1173,6 +1207,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; @@ -1269,7 +1304,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) -- 2.1.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-05-14 14:09 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-05-14 14:07 [PATCH RT 0/2] Linux 3.4.107-rt134-rc1 Steven Rostedt 2015-05-14 14:07 ` [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe Steven Rostedt 2015-05-14 14:07 ` [PATCH RT 2/2] Linux 3.4.107-rt134-rc1 Steven Rostedt 2015-05-14 14:08 [PATCH RT 0/2] Linux 3.2.68-rt100-rc1 Steven Rostedt 2015-05-14 14:08 ` [PATCH RT 1/2] KVM: lapic: mark LAPIC timer handler as irqsafe Steven Rostedt
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome