All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
To: Sean Christopherson <seanjc@google.com>
Cc: James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Atish Patra <atish.patra@wdc.com>,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-mips@vger.kernel.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
	kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org, Ben Gardon <bgardon@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
	Paul Mackerras <paulus@ozlabs.org>,
	Anup Patel <anup.patel@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones
Date: Sat, 13 Nov 2021 16:22:48 +0100	[thread overview]
Message-ID: <d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com> (raw)
In-Reply-To: <YY26dxv2kM3m2H7Z@google.com>

On 12.11.2021 01:51, Sean Christopherson wrote:
> On Fri, Nov 12, 2021, Maciej S. Szmigiero wrote:
>> On 04.11.2021 01:25, Sean Christopherson wrote:
>>> -	/*
>>> -	 * Remove the old memslot from the hash list and interval tree, copying
>>> -	 * the node data would corrupt the structures.
>>> -	 */
>>> +	int as_id = kvm_memslots_get_as_id(old, new);
>>> +	struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);
>>> +	int idx = slots->node_idx;
>>> +
>>>    	if (old) {
>>> -		hash_del(&old->id_node);
>>> -		interval_tree_remove(&old->hva_node, &slots->hva_tree);
>>> +		hash_del(&old->id_node[idx]);
>>> +		interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);
>>> -		if (!new)
>>> +		if ((long)old == atomic_long_read(&slots->last_used_slot))
>>> +			atomic_long_set(&slots->last_used_slot, (long)new);
>>
>> Open-coding cmpxchg() is way less readable than a direct call.
> 
> Doh, I meant to call this out and/or add a comment.
> 
> My objection to cmpxchg() is that it implies atomicity is required (the kernel's
> version adds the lock), which is very much not the case.  So this isn't strictly
> an open-coded version of cmpxchg().
> 
>> The open-coded version also compiles on x86 to multiple instructions with
>> a branch, instead of just a single instruction.
> 
> Yeah.  The lock can't be contended, so that part of cmpxchg is a non-issue.  But
> that's also why I don't love using cmpxchg.
> 
> I don't have a strong preference, I just got briefly confused by the atomicity part.

We can simply add a comment there to explain that the atomicity isn't actually
strictly required here - will do that.

>>> +static void kvm_invalidate_memslot(struct kvm *kvm,
>>> +				   struct kvm_memory_slot *old,
>>> +				   struct kvm_memory_slot *working_slot)
>>> +{
>>> +	/*
>>> +	 * Mark the current slot INVALID.  As with all memslot modifications,
>>> +	 * this must be done on an unreachable slot to avoid modifying the
>>> +	 * current slot in the active tree.
>>> +	 */
>>> +	kvm_copy_memslot(working_slot, old);
>>> +	working_slot->flags |= KVM_MEMSLOT_INVALID;
>>> +	kvm_replace_memslot(kvm, old, working_slot);
>>> +
>>> +	/*
>>> +	 * Activate the slot that is now marked INVALID, but don't propagate
>>> +	 * the slot to the now inactive slots. The slot is either going to be
>>> +	 * deleted or recreated as a new slot.
>>> +	 */
>>> +	kvm_swap_active_memslots(kvm, old->as_id);
>>> +
>>> +	/*
>>> +	 * From this point no new shadow pages pointing to a deleted, or moved,
>>> +	 * memslot will be created.  Validation of sp->gfn happens in:
>>> +	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
>>> +	 *	- kvm_is_visible_gfn (mmu_check_root)
>>> +	 */
>>> +	kvm_arch_flush_shadow_memslot(kvm, old);
>>
>> This should flush the currently active slot (that is, "working_slot",
>> not "old") to not introduce a behavior change with respect to the existing
>> code.
>>
>> That's also what the previous version of this patch set did.
> 
> Eww.  I would much prefer to "fix" the existing code in a prep patch.  It shouldn't
> matter, but arch code really should not get passed an INVALID slot.
> 

I will add a separate patch that switches that kvm_arch_flush_shadow_memslot()
call to use a valid (old) memslot instead.

It is actually simpler to do it *after* the main patch series to not add
more dead code that next patches remove anyway.

Thanks,
Maciej

WARNING: multiple messages have this Message-ID (diff)
From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
To: Sean Christopherson <seanjc@google.com>
Cc: James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Atish Patra <atish.patra@wdc.com>,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-mips@vger.kernel.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
	kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org, Ben Gardon <bgardon@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
	Paul Mackerras <paulus@ozlabs.org>,
	Anup Patel <anup.patel@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones
Date: Sat, 13 Nov 2021 16:22:48 +0100	[thread overview]
Message-ID: <d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com> (raw)
In-Reply-To: <YY26dxv2kM3m2H7Z@google.com>

On 12.11.2021 01:51, Sean Christopherson wrote:
> On Fri, Nov 12, 2021, Maciej S. Szmigiero wrote:
>> On 04.11.2021 01:25, Sean Christopherson wrote:
>>> -	/*
>>> -	 * Remove the old memslot from the hash list and interval tree, copying
>>> -	 * the node data would corrupt the structures.
>>> -	 */
>>> +	int as_id = kvm_memslots_get_as_id(old, new);
>>> +	struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);
>>> +	int idx = slots->node_idx;
>>> +
>>>    	if (old) {
>>> -		hash_del(&old->id_node);
>>> -		interval_tree_remove(&old->hva_node, &slots->hva_tree);
>>> +		hash_del(&old->id_node[idx]);
>>> +		interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);
>>> -		if (!new)
>>> +		if ((long)old == atomic_long_read(&slots->last_used_slot))
>>> +			atomic_long_set(&slots->last_used_slot, (long)new);
>>
>> Open-coding cmpxchg() is way less readable than a direct call.
> 
> Doh, I meant to call this out and/or add a comment.
> 
> My objection to cmpxchg() is that it implies atomicity is required (the kernel's
> version adds the lock), which is very much not the case.  So this isn't strictly
> an open-coded version of cmpxchg().
> 
>> The open-coded version also compiles on x86 to multiple instructions with
>> a branch, instead of just a single instruction.
> 
> Yeah.  The lock can't be contended, so that part of cmpxchg is a non-issue.  But
> that's also why I don't love using cmpxchg.
> 
> I don't have a strong preference, I just got briefly confused by the atomicity part.

We can simply add a comment there to explain that the atomicity isn't actually
strictly required here - will do that.

>>> +static void kvm_invalidate_memslot(struct kvm *kvm,
>>> +				   struct kvm_memory_slot *old,
>>> +				   struct kvm_memory_slot *working_slot)
>>> +{
>>> +	/*
>>> +	 * Mark the current slot INVALID.  As with all memslot modifications,
>>> +	 * this must be done on an unreachable slot to avoid modifying the
>>> +	 * current slot in the active tree.
>>> +	 */
>>> +	kvm_copy_memslot(working_slot, old);
>>> +	working_slot->flags |= KVM_MEMSLOT_INVALID;
>>> +	kvm_replace_memslot(kvm, old, working_slot);
>>> +
>>> +	/*
>>> +	 * Activate the slot that is now marked INVALID, but don't propagate
>>> +	 * the slot to the now inactive slots. The slot is either going to be
>>> +	 * deleted or recreated as a new slot.
>>> +	 */
>>> +	kvm_swap_active_memslots(kvm, old->as_id);
>>> +
>>> +	/*
>>> +	 * From this point no new shadow pages pointing to a deleted, or moved,
>>> +	 * memslot will be created.  Validation of sp->gfn happens in:
>>> +	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
>>> +	 *	- kvm_is_visible_gfn (mmu_check_root)
>>> +	 */
>>> +	kvm_arch_flush_shadow_memslot(kvm, old);
>>
>> This should flush the currently active slot (that is, "working_slot",
>> not "old") to not introduce a behavior change with respect to the existing
>> code.
>>
>> That's also what the previous version of this patch set did.
> 
> Eww.  I would much prefer to "fix" the existing code in a prep patch.  It shouldn't
> matter, but arch code really should not get passed an INVALID slot.
> 

I will add a separate patch that switches that kvm_arch_flush_shadow_memslot()
call to use a valid (old) memslot instead.

It is actually simpler to do it *after* the main patch series to not add
more dead code that next patches remove anyway.

Thanks,
Maciej

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
To: Sean Christopherson <seanjc@google.com>
Cc: James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Atish Patra <atish.patra@wdc.com>,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-mips@vger.kernel.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
	kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org, Ben Gardon <bgardon@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
	Paul Mackerras <paulus@ozlabs.org>,
	Anup Patel <anup.patel@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones
Date: Sat, 13 Nov 2021 16:22:48 +0100	[thread overview]
Message-ID: <d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com> (raw)
In-Reply-To: <YY26dxv2kM3m2H7Z@google.com>

On 12.11.2021 01:51, Sean Christopherson wrote:
> On Fri, Nov 12, 2021, Maciej S. Szmigiero wrote:
>> On 04.11.2021 01:25, Sean Christopherson wrote:
>>> -	/*
>>> -	 * Remove the old memslot from the hash list and interval tree, copying
>>> -	 * the node data would corrupt the structures.
>>> -	 */
>>> +	int as_id = kvm_memslots_get_as_id(old, new);
>>> +	struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);
>>> +	int idx = slots->node_idx;
>>> +
>>>    	if (old) {
>>> -		hash_del(&old->id_node);
>>> -		interval_tree_remove(&old->hva_node, &slots->hva_tree);
>>> +		hash_del(&old->id_node[idx]);
>>> +		interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);
>>> -		if (!new)
>>> +		if ((long)old == atomic_long_read(&slots->last_used_slot))
>>> +			atomic_long_set(&slots->last_used_slot, (long)new);
>>
>> Open-coding cmpxchg() is way less readable than a direct call.
> 
> Doh, I meant to call this out and/or add a comment.
> 
> My objection to cmpxchg() is that it implies atomicity is required (the kernel's
> version adds the lock), which is very much not the case.  So this isn't strictly
> an open-coded version of cmpxchg().
> 
>> The open-coded version also compiles on x86 to multiple instructions with
>> a branch, instead of just a single instruction.
> 
> Yeah.  The lock can't be contended, so that part of cmpxchg is a non-issue.  But
> that's also why I don't love using cmpxchg.
> 
> I don't have a strong preference, I just got briefly confused by the atomicity part.

We can simply add a comment there to explain that the atomicity isn't actually
strictly required here - will do that.

>>> +static void kvm_invalidate_memslot(struct kvm *kvm,
>>> +				   struct kvm_memory_slot *old,
>>> +				   struct kvm_memory_slot *working_slot)
>>> +{
>>> +	/*
>>> +	 * Mark the current slot INVALID.  As with all memslot modifications,
>>> +	 * this must be done on an unreachable slot to avoid modifying the
>>> +	 * current slot in the active tree.
>>> +	 */
>>> +	kvm_copy_memslot(working_slot, old);
>>> +	working_slot->flags |= KVM_MEMSLOT_INVALID;
>>> +	kvm_replace_memslot(kvm, old, working_slot);
>>> +
>>> +	/*
>>> +	 * Activate the slot that is now marked INVALID, but don't propagate
>>> +	 * the slot to the now inactive slots. The slot is either going to be
>>> +	 * deleted or recreated as a new slot.
>>> +	 */
>>> +	kvm_swap_active_memslots(kvm, old->as_id);
>>> +
>>> +	/*
>>> +	 * From this point no new shadow pages pointing to a deleted, or moved,
>>> +	 * memslot will be created.  Validation of sp->gfn happens in:
>>> +	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
>>> +	 *	- kvm_is_visible_gfn (mmu_check_root)
>>> +	 */
>>> +	kvm_arch_flush_shadow_memslot(kvm, old);
>>
>> This should flush the currently active slot (that is, "working_slot",
>> not "old") to not introduce a behavior change with respect to the existing
>> code.
>>
>> That's also what the previous version of this patch set did.
> 
> Eww.  I would much prefer to "fix" the existing code in a prep patch.  It shouldn't
> matter, but arch code really should not get passed an INVALID slot.
> 

I will add a separate patch that switches that kvm_arch_flush_shadow_memslot()
call to use a valid (old) memslot instead.

It is actually simpler to do it *after* the main patch series to not add
more dead code that next patches remove anyway.

Thanks,
Maciej

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Anup Patel <anup.patel@wdc.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	kvm@vger.kernel.org, David Hildenbrand <david@redhat.com>,
	linux-kernel@vger.kernel.org, Paul Mackerras <paulus@ozlabs.org>,
	Atish Patra <atish.patra@wdc.com>,
	Ben Gardon <bgardon@google.com>,
	linux-riscv@lists.infradead.org,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	kvmarm@lists.cs.columbia.edu,
	Janosch Frank <frankja@linux.ibm.com>,
	Marc Zyngier <maz@kernel.org>, Joerg Roedel <joro@8bytes.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	kvm-ppc@vger.kernel.org, Paul Walmsley <paul.walmsley@sifive.com>,
	linux-arm-kernel@lists.infradead.org,
	Jim Mattson <jmattson@google.com>,
	Cornelia Huck <cohuck@redhat.com>,
	linux-mips@vger.kernel.org, kvm-riscv@lists.infradead.org,
	Paolo Bonzini <pbonzini@redhat.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>
Subject: Re: [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones
Date: Sat, 13 Nov 2021 16:22:48 +0100	[thread overview]
Message-ID: <d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com> (raw)
In-Reply-To: <YY26dxv2kM3m2H7Z@google.com>

On 12.11.2021 01:51, Sean Christopherson wrote:
> On Fri, Nov 12, 2021, Maciej S. Szmigiero wrote:
>> On 04.11.2021 01:25, Sean Christopherson wrote:
>>> -	/*
>>> -	 * Remove the old memslot from the hash list and interval tree, copying
>>> -	 * the node data would corrupt the structures.
>>> -	 */
>>> +	int as_id = kvm_memslots_get_as_id(old, new);
>>> +	struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);
>>> +	int idx = slots->node_idx;
>>> +
>>>    	if (old) {
>>> -		hash_del(&old->id_node);
>>> -		interval_tree_remove(&old->hva_node, &slots->hva_tree);
>>> +		hash_del(&old->id_node[idx]);
>>> +		interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);
>>> -		if (!new)
>>> +		if ((long)old == atomic_long_read(&slots->last_used_slot))
>>> +			atomic_long_set(&slots->last_used_slot, (long)new);
>>
>> Open-coding cmpxchg() is way less readable than a direct call.
> 
> Doh, I meant to call this out and/or add a comment.
> 
> My objection to cmpxchg() is that it implies atomicity is required (the kernel's
> version adds the lock), which is very much not the case.  So this isn't strictly
> an open-coded version of cmpxchg().
> 
>> The open-coded version also compiles on x86 to multiple instructions with
>> a branch, instead of just a single instruction.
> 
> Yeah.  The lock can't be contended, so that part of cmpxchg is a non-issue.  But
> that's also why I don't love using cmpxchg.
> 
> I don't have a strong preference, I just got briefly confused by the atomicity part.

We can simply add a comment there to explain that the atomicity isn't actually
strictly required here - will do that.

>>> +static void kvm_invalidate_memslot(struct kvm *kvm,
>>> +				   struct kvm_memory_slot *old,
>>> +				   struct kvm_memory_slot *working_slot)
>>> +{
>>> +	/*
>>> +	 * Mark the current slot INVALID.  As with all memslot modifications,
>>> +	 * this must be done on an unreachable slot to avoid modifying the
>>> +	 * current slot in the active tree.
>>> +	 */
>>> +	kvm_copy_memslot(working_slot, old);
>>> +	working_slot->flags |= KVM_MEMSLOT_INVALID;
>>> +	kvm_replace_memslot(kvm, old, working_slot);
>>> +
>>> +	/*
>>> +	 * Activate the slot that is now marked INVALID, but don't propagate
>>> +	 * the slot to the now inactive slots. The slot is either going to be
>>> +	 * deleted or recreated as a new slot.
>>> +	 */
>>> +	kvm_swap_active_memslots(kvm, old->as_id);
>>> +
>>> +	/*
>>> +	 * From this point no new shadow pages pointing to a deleted, or moved,
>>> +	 * memslot will be created.  Validation of sp->gfn happens in:
>>> +	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
>>> +	 *	- kvm_is_visible_gfn (mmu_check_root)
>>> +	 */
>>> +	kvm_arch_flush_shadow_memslot(kvm, old);
>>
>> This should flush the currently active slot (that is, "working_slot",
>> not "old") to not introduce a behavior change with respect to the existing
>> code.
>>
>> That's also what the previous version of this patch set did.
> 
> Eww.  I would much prefer to "fix" the existing code in a prep patch.  It shouldn't
> matter, but arch code really should not get passed an INVALID slot.
> 

I will add a separate patch that switches that kvm_arch_flush_shadow_memslot()
call to use a valid (old) memslot instead.

It is actually simpler to do it *after* the main patch series to not add
more dead code that next patches remove anyway.

Thanks,
Maciej
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: "Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
To: Sean Christopherson <seanjc@google.com>
Cc: James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Atish Patra <atish.patra@wdc.com>,
	David Hildenbrand <david@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-mips@vger.kernel.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
	kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org, Ben Gardon <bgardon@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
	Paul Mackerras <paulus@ozlabs.org>,
	Anup Patel <anup.patel@wdc.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones
Date: Sat, 13 Nov 2021 15:22:48 +0000	[thread overview]
Message-ID: <d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com> (raw)
In-Reply-To: <YY26dxv2kM3m2H7Z@google.com>

On 12.11.2021 01:51, Sean Christopherson wrote:
> On Fri, Nov 12, 2021, Maciej S. Szmigiero wrote:
>> On 04.11.2021 01:25, Sean Christopherson wrote:
>>> -	/*
>>> -	 * Remove the old memslot from the hash list and interval tree, copying
>>> -	 * the node data would corrupt the structures.
>>> -	 */
>>> +	int as_id = kvm_memslots_get_as_id(old, new);
>>> +	struct kvm_memslots *slots = kvm_get_inactive_memslots(kvm, as_id);
>>> +	int idx = slots->node_idx;
>>> +
>>>    	if (old) {
>>> -		hash_del(&old->id_node);
>>> -		interval_tree_remove(&old->hva_node, &slots->hva_tree);
>>> +		hash_del(&old->id_node[idx]);
>>> +		interval_tree_remove(&old->hva_node[idx], &slots->hva_tree);
>>> -		if (!new)
>>> +		if ((long)old = atomic_long_read(&slots->last_used_slot))
>>> +			atomic_long_set(&slots->last_used_slot, (long)new);
>>
>> Open-coding cmpxchg() is way less readable than a direct call.
> 
> Doh, I meant to call this out and/or add a comment.
> 
> My objection to cmpxchg() is that it implies atomicity is required (the kernel's
> version adds the lock), which is very much not the case.  So this isn't strictly
> an open-coded version of cmpxchg().
> 
>> The open-coded version also compiles on x86 to multiple instructions with
>> a branch, instead of just a single instruction.
> 
> Yeah.  The lock can't be contended, so that part of cmpxchg is a non-issue.  But
> that's also why I don't love using cmpxchg.
> 
> I don't have a strong preference, I just got briefly confused by the atomicity part.

We can simply add a comment there to explain that the atomicity isn't actually
strictly required here - will do that.

>>> +static void kvm_invalidate_memslot(struct kvm *kvm,
>>> +				   struct kvm_memory_slot *old,
>>> +				   struct kvm_memory_slot *working_slot)
>>> +{
>>> +	/*
>>> +	 * Mark the current slot INVALID.  As with all memslot modifications,
>>> +	 * this must be done on an unreachable slot to avoid modifying the
>>> +	 * current slot in the active tree.
>>> +	 */
>>> +	kvm_copy_memslot(working_slot, old);
>>> +	working_slot->flags |= KVM_MEMSLOT_INVALID;
>>> +	kvm_replace_memslot(kvm, old, working_slot);
>>> +
>>> +	/*
>>> +	 * Activate the slot that is now marked INVALID, but don't propagate
>>> +	 * the slot to the now inactive slots. The slot is either going to be
>>> +	 * deleted or recreated as a new slot.
>>> +	 */
>>> +	kvm_swap_active_memslots(kvm, old->as_id);
>>> +
>>> +	/*
>>> +	 * From this point no new shadow pages pointing to a deleted, or moved,
>>> +	 * memslot will be created.  Validation of sp->gfn happens in:
>>> +	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
>>> +	 *	- kvm_is_visible_gfn (mmu_check_root)
>>> +	 */
>>> +	kvm_arch_flush_shadow_memslot(kvm, old);
>>
>> This should flush the currently active slot (that is, "working_slot",
>> not "old") to not introduce a behavior change with respect to the existing
>> code.
>>
>> That's also what the previous version of this patch set did.
> 
> Eww.  I would much prefer to "fix" the existing code in a prep patch.  It shouldn't
> matter, but arch code really should not get passed an INVALID slot.
> 

I will add a separate patch that switches that kvm_arch_flush_shadow_memslot()
call to use a valid (old) memslot instead.

It is actually simpler to do it *after* the main patch series to not add
more dead code that next patches remove anyway.

Thanks,
Maciej

  reply	other threads:[~2021-11-13 15:24 UTC|newest]

Thread overview: 327+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-04  0:25 [PATCH v5.5 00/30] KVM: Scalable memslots implementation Sean Christopherson
2021-11-04  0:25 ` Sean Christopherson
2021-11-04  0:25 ` Sean Christopherson
2021-11-04  0:25 ` Sean Christopherson
2021-11-04  0:25 ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 01/30] KVM: Ensure local memslot copies operate on up-to-date arch-specific data Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04 21:27   ` Ben Gardon
2021-11-04 21:27     ` Ben Gardon
2021-11-04 21:27     ` Ben Gardon
2021-11-04 21:27     ` Ben Gardon
2021-11-04 21:27     ` Ben Gardon
2021-11-04 22:41     ` Sean Christopherson
2021-11-04 22:41       ` Sean Christopherson
2021-11-04 22:41       ` Sean Christopherson
2021-11-04 22:41       ` Sean Christopherson
2021-11-04 22:41       ` Sean Christopherson
2021-11-09  0:37   ` Maciej S. Szmigiero
2021-11-09  0:37     ` Maciej S. Szmigiero
2021-11-09  0:37     ` Maciej S. Szmigiero
2021-11-09  0:37     ` Maciej S. Szmigiero
2021-11-09  0:37     ` Maciej S. Szmigiero
2021-11-09  1:17     ` Sean Christopherson
2021-11-09  1:17       ` Sean Christopherson
2021-11-09  1:17       ` Sean Christopherson
2021-11-09  1:17       ` Sean Christopherson
2021-11-09  1:17       ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 02/30] KVM: Disallow user memslot with size that exceeds "unsigned long" Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:38   ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 03/30] KVM: Require total number of memslot pages to fit in an unsigned long Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:38   ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 04/30] KVM: Open code kvm_delete_memslot() into its only caller Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:38   ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 05/30] KVM: Resync only arch fields when slots_arch_lock gets reacquired Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:38   ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-09  0:38     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 06/30] KVM: Use "new" memslot's address space ID instead of dedicated param Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:39   ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 07/30] KVM: Let/force architectures to deal with arch specific memslot data Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:39   ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  0:39     ` Maciej S. Szmigiero
2021-11-09  1:13     ` Sean Christopherson
2021-11-09  1:13       ` Sean Christopherson
2021-11-09  1:13       ` Sean Christopherson
2021-11-09  1:13       ` Sean Christopherson
2021-11-09  1:13       ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 08/30] KVM: arm64: Use "new" memslot instead of userspace memory region Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  6:36   ` Reiji Watanabe
2021-11-09  6:36     ` Reiji Watanabe
2021-11-09  6:36     ` Reiji Watanabe
2021-11-09  6:36     ` Reiji Watanabe
2021-11-09  6:36     ` Reiji Watanabe
2021-11-04  0:25 ` [PATCH v5.5 09/30] KVM: MIPS: Drop pr_debug from memslot commit to avoid using "mem" Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 10/30] KVM: PPC: Avoid referencing userspace memory region in memslot updates Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 11/30] KVM: s390: Use "new" memslot instead of userspace memory region Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 12/30] KVM: x86: " Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:40   ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 13/30] KVM: RISC-V: " Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 14/30] KVM: Stop passing kvm_userspace_memory_region to arch memslot hooks Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:40   ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 15/30] KVM: Use prepare/commit hooks to handle generic memslot metadata updates Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:40   ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 16/30] KVM: x86: Don't assume old/new memslots are non-NULL at memslot commit Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:40   ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-09  0:40     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 17/30] KVM: s390: Skip gfn/size sanity checks on memslot DELETE or FLAGS_ONLY Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 18/30] KVM: Don't make a full copy of the old memslot in __kvm_set_memory_region() Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:41   ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 19/30] KVM: x86: Don't call kvm_mmu_change_mmu_pages() if the count hasn't changed Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 20/30] KVM: x86: Use nr_memslot_pages to avoid traversing the memslots array Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-09  0:41   ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  0:41     ` Maciej S. Szmigiero
2021-11-09  1:34     ` Sean Christopherson
2021-11-09  1:34       ` Sean Christopherson
2021-11-09  1:34       ` Sean Christopherson
2021-11-09  1:34       ` Sean Christopherson
2021-11-09  1:34       ` Sean Christopherson
2021-11-09 16:29       ` Maciej S. Szmigiero
2021-11-09 16:29         ` Maciej S. Szmigiero
2021-11-09 16:29         ` Maciej S. Szmigiero
2021-11-09 16:29         ` Maciej S. Szmigiero
2021-11-09 16:29         ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 21/30] KVM: Integrate gfn_to_memslot_approx() into search_memslots() Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 22/30] KVM: Move WARN on invalid memslot index to update_memslots() Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 23/30] KVM: Resolve memslot ID via a hash table instead of via a static array Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-11 23:51   ` Maciej S. Szmigiero
2021-11-11 23:51     ` Maciej S. Szmigiero
2021-11-11 23:51     ` Maciej S. Szmigiero
2021-11-11 23:51     ` Maciej S. Szmigiero
2021-11-11 23:51     ` Maciej S. Szmigiero
2021-11-12  1:03     ` Sean Christopherson
2021-11-12  1:03       ` Sean Christopherson
2021-11-12  1:03       ` Sean Christopherson
2021-11-12  1:03       ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 24/30] KVM: Use interval tree to do fast hva lookup in memslots Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-11 23:52   ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-12  1:05     ` Sean Christopherson
2021-11-12  1:05       ` Sean Christopherson
2021-11-12  1:05       ` Sean Christopherson
2021-11-12  1:05       ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 25/30] KVM: s390: Introduce kvm_s390_get_gfn_end() Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 26/30] KVM: Keep memslots in tree-based structures instead of array-based ones Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-11 23:52   ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-12  0:51     ` Sean Christopherson
2021-11-12  0:51       ` Sean Christopherson
2021-11-12  0:51       ` Sean Christopherson
2021-11-12  0:51       ` Sean Christopherson
2021-11-12  0:51       ` Sean Christopherson
2021-11-13 15:22       ` Maciej S. Szmigiero [this message]
2021-11-13 15:22         ` Maciej S. Szmigiero
2021-11-13 15:22         ` Maciej S. Szmigiero
2021-11-13 15:22         ` Maciej S. Szmigiero
2021-11-13 15:22         ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 27/30] KVM: Optimize gfn lookup in kvm_zap_gfn_range() Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 28/30] KVM: Optimize overlapping memslots check Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25 ` [PATCH v5.5 29/30] KVM: Wait 'til the bitter end to initialize the "new" memslot Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-11 23:52   ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-11 23:52     ` Maciej S. Szmigiero
2021-11-04  0:25 ` [PATCH v5.5 30/30] KVM: Dynamically allocate "new" memslots from the get-go Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-04  0:25   ` Sean Christopherson
2021-11-11 23:53   ` Maciej S. Szmigiero
2021-11-11 23:53     ` Maciej S. Szmigiero
2021-11-11 23:53     ` Maciej S. Szmigiero
2021-11-11 23:53     ` Maciej S. Szmigiero
2021-11-11 23:53     ` Maciej S. Szmigiero
2021-11-12  1:32     ` Sean Christopherson
2021-11-12  1:32       ` Sean Christopherson
2021-11-12  1:32       ` Sean Christopherson
2021-11-12  1:32       ` Sean Christopherson
2021-11-09  0:43 ` [PATCH v5.5 00/30] KVM: Scalable memslots implementation Maciej S. Szmigiero
2021-11-09  0:43   ` Maciej S. Szmigiero
2021-11-09  0:43   ` Maciej S. Szmigiero
2021-11-09  0:43   ` Maciej S. Szmigiero
2021-11-09  0:43   ` Maciej S. Szmigiero
2021-11-09  1:21   ` Sean Christopherson
2021-11-09  1:21     ` Sean Christopherson
2021-11-09  1:21     ` Sean Christopherson
2021-11-09  1:21     ` Sean Christopherson
2021-11-09  1:21     ` Sean Christopherson
2021-11-11 23:53     ` Maciej S. Szmigiero
2021-11-11 23:53       ` Maciej S. Szmigiero
2021-11-11 23:53       ` Maciej S. Szmigiero
2021-11-11 23:53       ` Maciej S. Szmigiero
2021-11-11 23:53       ` Maciej S. Szmigiero
2021-11-23 14:42       ` Maciej S. Szmigiero
2021-11-23 14:42         ` Maciej S. Szmigiero
2021-11-23 14:42         ` Maciej S. Szmigiero
2021-11-23 14:42         ` Maciej S. Szmigiero
2021-11-23 14:42         ` Maciej S. Szmigiero
2021-11-26 12:33         ` Paolo Bonzini
2021-11-26 12:33           ` Paolo Bonzini
2021-11-26 12:33           ` Paolo Bonzini
2021-11-26 12:33           ` Paolo Bonzini
2021-11-26 12:33           ` Paolo Bonzini

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=d1c648e4-5536-111d-a7bf-3644ac68c9f5@oracle.com \
    --to=maciej.szmigiero@oracle.com \
    --cc=aleksandar.qemu.devel@gmail.com \
    --cc=alexandru.elisei@arm.com \
    --cc=anup.patel@wdc.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=atish.patra@wdc.com \
    --cc=bgardon@google.com \
    --cc=borntraeger@de.ibm.com \
    --cc=chenhuacai@kernel.org \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=james.morse@arm.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm-riscv@lists.infradead.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=paulus@ozlabs.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.