linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 08/14] KVM: ARM: World-switch implementation
Date: Mon, 03 Dec 2012 10:33:11 +0000	[thread overview]
Message-ID: <50BC7FE7.6050006@arm.com> (raw)
In-Reply-To: <CANM98qJQBD3+iW0uCptXBgsPBuBBfuaT1FN3EivMywwD-oNi=Q@mail.gmail.com>

On 30/11/12 18:49, Christoffer Dall wrote:
> On Fri, Nov 30, 2012 at 12:14 PM, Will Deacon <will.deacon@arm.com> wrote:
>> On Fri, Nov 30, 2012 at 04:47:40PM +0000, Christoffer Dall wrote:
>>> On Fri, Nov 30, 2012 at 10:15 AM, Will Deacon <will.deacon@arm.com> wrote:
>>>> At this point, VM1 is running and VM0:VCPU1 is running. VM0:VCPU0 is not
>>>> running because physical CPU0 is handling an interrupt. The problem is that
>>>> when VCPU0 *is* resumed, it will update the VMID of VM0 and could be
>>>> scheduled in parallel with VCPU1 but with a different VMID.
>>>>
>>>> How do you avoid this in the current code?
>>>>
>>> I don't. Nice catch. Please apply your interesting brain to the following fix:)
>>
>> I'm far too sober to look at your patch right now, but I'll think about it
>> over the weekend [I can't break it at a quick glance] :)
>>
>> In the meantime, can you think about whether the TLB operations need to run
>> on every CPU please?
>>
> they don't we can invalidate the TLB and the icache using the inner
> shareability domain. Here's a patch:
> 
> diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
> index ad1390f..df1b753 100644
> --- a/arch/arm/include/asm/kvm_host.h
> +++ b/arch/arm/include/asm/kvm_host.h
> @@ -146,6 +146,7 @@ struct kvm_one_reg;
>  int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg);
>  int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg);
>  u64 kvm_call_hyp(void *hypfn, ...);
> +void force_vm_exit(const cpumask_t *mask);
> 
>  #define KVM_ARCH_WANT_MMU_NOTIFIER
>  struct kvm;
> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
> index c4f631e..674592e 100644
> --- a/arch/arm/kvm/arm.c
> +++ b/arch/arm/kvm/arm.c
> @@ -405,9 +405,14 @@ int kvm_arch_vcpu_in_guest_mode(struct kvm_vcpu *v)
>  	return v->mode == IN_GUEST_MODE;
>  }
> 
> -static void reset_vm_context(void *info)
> +/* Just ensure a guest exit from a particular CPU */
> +static void exit_vm_noop(void *info)
>  {
> -	kvm_call_hyp(__kvm_flush_vm_context);
> +}
> +
> +void force_vm_exit(const cpumask_t *mask)
> +{
> +	smp_call_function_many(mask, exit_vm_noop, NULL, true);
>  }

Care to update the do_nothing() call in emulate.c to use this as well?

	M.
-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2012-12-03 10:33 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-10 15:42 [PATCH v4 00/14] KVM/ARM Implementation Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 01/14] ARM: Add page table and page defines needed by KVM Christoffer Dall
2012-11-19 14:14   ` Will Deacon
2012-11-29 15:57     ` Christoffer Dall
2012-11-30 11:46       ` Will Deacon
2012-11-30 15:54         ` Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 02/14] ARM: Section based HYP idmap Christoffer Dall
2012-11-19 14:16   ` Will Deacon
2012-11-29 18:59     ` Christoffer Dall
2012-11-30 10:58       ` Will Deacon
2012-11-30 16:29         ` Christoffer Dall
2012-11-19 14:25   ` Rob Herring
2012-11-10 15:42 ` [PATCH v4 03/14] ARM: Factor out cpuid implementor and part number Christoffer Dall
2012-11-19 14:21   ` Will Deacon
2012-11-29 21:38     ` Christoffer Dall
2012-11-30 10:21       ` Will Deacon
2012-11-30 15:42         ` Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 04/14] KVM: ARM: Initial skeleton to compile KVM support Christoffer Dall
2012-11-19 14:41   ` Will Deacon
2012-11-29 22:36     ` Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 05/14] KVM: ARM: Hypervisor inititalization Christoffer Dall
2012-11-19 14:51   ` Will Deacon
2012-11-19 15:27     ` Cyril Chemparathy
2012-11-30  5:41     ` Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 06/14] KVM: ARM: Memory virtualization setup Christoffer Dall
2012-11-19 14:53   ` Will Deacon
2012-11-19 15:05     ` Christoffer Dall
2012-11-10 15:42 ` [PATCH v4 07/14] KVM: ARM: Inject IRQs and FIQs from userspace Christoffer Dall
2012-11-19 14:55   ` Will Deacon
2012-11-19 15:04     ` Christoffer Dall
2012-11-19 15:26       ` Will Deacon
2012-11-19 16:09         ` Christoffer Dall
2012-11-19 16:21           ` Will Deacon
2012-11-30  6:13             ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 08/14] KVM: ARM: World-switch implementation Christoffer Dall
2012-11-19 14:57   ` Will Deacon
2012-11-30  6:37     ` Christoffer Dall
2012-11-30 15:15       ` Will Deacon
2012-11-30 16:47         ` Christoffer Dall
2012-11-30 17:14           ` Will Deacon
2012-11-30 18:49             ` Christoffer Dall
2012-12-03 10:33               ` Marc Zyngier [this message]
2012-12-03 15:05                 ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 09/14] KVM: ARM: Emulation framework and CP15 emulation Christoffer Dall
2012-11-19 15:01   ` Will Deacon
2012-11-19 15:27     ` [kvmarm] " Peter Maydell
2012-11-20  2:18       ` Rusty Russell
2012-11-30 20:22     ` Christoffer Dall
2012-12-03 11:05       ` Will Deacon
2012-12-03 19:09         ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 10/14] KVM: ARM: User space API for getting/setting co-proc registers Christoffer Dall
2012-11-19 15:02   ` Will Deacon
2012-11-30  6:42     ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 11/14] KVM: ARM: Demux CCSIDR in the userspace API Christoffer Dall
2012-11-19 15:03   ` Will Deacon
2012-11-30  6:45     ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 12/14] KVM: ARM: VFP userspace interface Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 13/14] KVM: ARM: Handle guest faults in KVM Christoffer Dall
2012-11-19 15:07   ` Will Deacon
2012-11-30 21:40     ` Christoffer Dall
2012-12-03 13:06       ` Will Deacon
2012-12-03 15:02         ` Christoffer Dall
2012-11-10 15:43 ` [PATCH v4 14/14] KVM: ARM: Handle I/O aborts Christoffer Dall
2012-11-19 15:09   ` Will Deacon
2012-11-30 14:46     ` Dave Martin

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=50BC7FE7.6050006@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).