From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>
Cc: kvm-devel <kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Subject: Re: [PATCH 0/8] KVM updates for 2.6.20-rc2
Date: Thu, 28 Dec 2006 13:04:23 +0200 [thread overview]
Message-ID: <4593A4B7.2070404@qumranet.com> (raw)
In-Reply-To: <20061228103345.GA4708-X9Un+BFzKDI@public.gmane.org>
Ingo Molnar wrote:
> btw., we've got a problem with KVM in -rt:
>
> BUG: scheduling while atomic: qemu/0x00000001/11445, CPU#0
> [<c0104fce>] dump_trace+0x63/0x1e8
> [<c010516c>] show_trace_log_lvl+0x19/0x2e
> [<c0105541>] show_trace+0x12/0x14
> [<c0105557>] dump_stack+0x14/0x16
> [<c0322662>] __schedule+0xae/0xd9f
> [<c0323597>] schedule+0xec/0x10f
> [<c0324017>] rt_spin_lock_slowlock+0xd2/0x15b
> [<c03244a6>] rt_spin_lock+0x1e/0x20
> [<c0169d94>] kunmap_high+0x11/0x99
> [<c0121139>] kunmap+0x40/0x42
> [<c0121171>] kunmap_virt+0x36/0x38
> [<f8f017b7>] emulator_read_std+0x92/0xaf [kvm]
> [<f8f05292>] x86_emulate_memop+0xc6/0x295c [kvm]
> [<f8f018c3>] emulate_instruction+0xef/0x202 [kvm]
> [<f8e0f2a7>] handle_exception+0x107/0x1c8 [kvm_intel]
> [<f8e0ef0c>] kvm_vmx_return+0x145/0x18d [kvm_intel]
> [<f8f0253c>] kvm_dev_ioctl+0x253/0xd76 [kvm]
> [<c01874f1>] do_ioctl+0x21/0x66
> [<c018778b>] vfs_ioctl+0x255/0x268
> [<c01877e6>] sys_ioctl+0x48/0x62
> [<c0103f8d>] syscall_call+0x7/0xb
> [<4a4538b2>] 0x4a4538b2
>
> NOTE: this is not a worry for upstream kernel, it is caused by
> PREEMPT_RT scheduling in previously atomic APIs like kunmap(). But KVM
> used to work pretty nicely in -rt and this problem got introduced fairly
> recently, related to some big-page changes IIRC.
>
This is not a recent change. The x86 emulator is fetching an
instruction or a memory operand.
> Any suggestions of how to best fix this in -rt? Basically, it would be
> nice to decouple KVM from get_cpu/preempt_disable type of interfaces as
> much as possible, to make it fully preemptible.
kvm on intel uses hidden cpu registers, so it can't be migrated as a
normal process. We'd need a hook on context switch to check if we
migrated to another cpu, issue an ipi to unload the registers on the
previous cpu, and reload the registers on the current cpu. The hook
would need to be protected from context switches. See
vmx.c:vmx_vcpu_load() for the gory details. The actual launch would
require a small non-preemptible section as well, on both intel and AMD.
Talking about the scheduler (and to the scheduler's author :), it would
be nice to hook the migration weight algorithm too. kvm guests are
considerably more expensive to migrate, at least on intel.
> Below are my current
> fixups for KVM, but the problem above looks harder to fix.
>
These make sense for mainline (especially the first hunk), so I'll apply
them.
> Ingo
>
> ---
> drivers/kvm/vmx.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> Index: linux/drivers/kvm/vmx.c
> ===================================================================
> --- linux.orig/drivers/kvm/vmx.c
> +++ linux/drivers/kvm/vmx.c
> @@ -117,7 +117,7 @@ static void vmcs_clear(struct vmcs *vmcs
> static void __vcpu_clear(void *arg)
> {
> struct kvm_vcpu *vcpu = arg;
> - int cpu = smp_processor_id();
> + int cpu = raw_smp_processor_id();
>
> if (vcpu->cpu == cpu)
> vmcs_clear(vcpu->vmcs);
> @@ -576,7 +576,7 @@ static struct vmcs *alloc_vmcs_cpu(int c
>
> static struct vmcs *alloc_vmcs(void)
> {
> - return alloc_vmcs_cpu(smp_processor_id());
> + return alloc_vmcs_cpu(raw_smp_processor_id());
> }
>
> static void free_vmcs(struct vmcs *vmcs)
>
--
error compiling committee.c: too many arguments to function
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
next prev parent reply other threads:[~2006-12-28 11:04 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-28 10:07 [PATCH 0/8] KVM updates for 2.6.20-rc2 Avi Kivity
2006-12-28 10:08 ` [PATCH 1/8] KVM: Use boot_cpu_data instead of current_cpu_data Avi Kivity
2006-12-28 10:09 ` [PATCH 2/8] KVM: Simplify is_long_mode() Avi Kivity
2006-12-28 10:12 ` [PATCH 5/8] KVM: Move common msr handling to arch independent code Avi Kivity
2006-12-28 10:13 ` [PATCH 6/8] KVM: More msr misery Avi Kivity
[not found] ` <45939755.7010603-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 10:10 ` [PATCH 3/8] KVM: Initialize kvm_arch_ops on unload Avi Kivity
2006-12-28 10:11 ` [PATCH 4/8] KVM: Implement a few system configuration msrs Avi Kivity
[not found] ` <20061228101117.65A392500F7-LjA0eNSCdXrQnzwC+xcbyw@public.gmane.org>
2007-01-01 0:07 ` Ingo Oeser
[not found] ` <200701010107.18008.ioe-lkml-MFZNYGWX9eyELgA04lAiVw@public.gmane.org>
2007-01-01 8:20 ` Avi Kivity
2006-12-28 10:14 ` [PATCH 7/8] KVM: Rename some msrs Avi Kivity
2006-12-28 10:15 ` [PATCH 8/8] KVM: Fix oops on oom Avi Kivity
2006-12-28 10:33 ` [PATCH 0/8] KVM updates for 2.6.20-rc2 Ingo Molnar
[not found] ` <20061228103345.GA4708-X9Un+BFzKDI@public.gmane.org>
2006-12-28 11:04 ` Avi Kivity [this message]
[not found] ` <4593A4B7.2070404-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 11:23 ` Ingo Molnar
[not found] ` <20061228112356.GA14386-X9Un+BFzKDI@public.gmane.org>
2006-12-28 12:21 ` Avi Kivity
2006-12-28 13:15 ` Ingo Molnar
2006-12-28 11:30 ` Ingo Molnar
[not found] ` <20061228113038.GA16190-X9Un+BFzKDI@public.gmane.org>
2006-12-28 12:32 ` Avi Kivity
[not found] ` <4593B948.5090009-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 13:37 ` Ingo Molnar
[not found] ` <20061228133746.GC3392-X9Un+BFzKDI@public.gmane.org>
2006-12-28 13:49 ` Avi Kivity
[not found] ` <4593CB61.5050709-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 13:50 ` Ingo Molnar
[not found] ` <20061228135020.GA7606-X9Un+BFzKDI@public.gmane.org>
2006-12-28 13:58 ` Avi Kivity
[not found] ` <4593CD74.6060202-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 14:07 ` Ingo Molnar
[not found] ` <20061228140742.GA10033-X9Un+BFzKDI@public.gmane.org>
2006-12-28 14:18 ` Avi Kivity
[not found] ` <4593D243.1030301-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 15:01 ` Ingo Molnar
[not found] ` <20061228150104.GB16057-X9Un+BFzKDI@public.gmane.org>
2006-12-28 15:09 ` Avi Kivity
[not found] ` <4593DE1D.8010701-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 15:11 ` Ingo Molnar
[not found] ` <20061228151159.GA20279-X9Un+BFzKDI@public.gmane.org>
2006-12-28 15:25 ` Avi Kivity
[not found] ` <4593E1E3.2020800-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-12-28 15:28 ` Avi Kivity
2006-12-28 12:42 ` [patch] kvm: fix GFP_KERNEL allocation in atomic section in kvm_dev_ioctl_create_vcpu() Ingo Molnar
2006-12-28 12:56 ` Avi Kivity
2006-12-28 12:55 ` Ingo Molnar
[not found] ` <20061228125544.GA31207-X9Un+BFzKDI@public.gmane.org>
2006-12-28 13:08 ` [patch, try#2] " Ingo Molnar
2006-12-28 13:14 ` Avi Kivity
2006-12-28 13:23 ` Ingo Molnar
2006-12-28 13:30 ` Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4593A4B7.2070404@qumranet.com \
--to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=mingo-X9Un+BFzKDI@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox