All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ackerley Tng <ackerleytng@google.com>
To: Chao Peng <chao.p.peng@linux.intel.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-api@vger.kernel.org,
	linux-doc@vger.kernel.org, qemu-devel@nongnu.org,
	pbonzini@redhat.com, corbet@lwn.net, seanjc@google.com,
	vkuznets@redhat.com, wanpengli@tencent.com, jmattson@google.com,
	joro@8bytes.org, tglx@linutronix.de, mingo@redhat.com,
	bp@alien8.de, arnd@arndb.de, naoya.horiguchi@nec.com,
	linmiaohe@huawei.com, x86@kernel.org, hpa@zytor.com,
	hughd@google.com, jlayton@kernel.org, bfields@fieldses.org,
	akpm@linux-foundation.org, shuah@kernel.org, rppt@kernel.org,
	steven.price@arm.com, mail@maciej.szmigiero.name, vbabka@suse.cz,
	vannapurve@google.com, yu.c.zhang@linux.intel.com,
	chao.p.peng@linux.intel.com, kirill.shutemov@linux.intel.com,
	luto@kernel.org, jun.nakajima@intel.com, dave.hansen@intel.com,
	ak@linux.intel.com, david@redhat.com, aarcange@redhat.com,
	ddutile@redhat.com, dhildenb@redhat.com, qperret@google.com,
	tabba@google.com, michael.roth@amd.com, mhocko@suse.com,
	wei.w.wang@intel.com
Subject: Re: [PATCH v10 9/9] KVM: Enable and expose KVM_MEM_PRIVATE
Date: Tue, 07 Mar 2023 19:14:05 +0000	[thread overview]
Message-ID: <diqzcz5kz85e.fsf@ackerleytng-cloudtop.c.googlers.com> (raw)
In-Reply-To: <20221202061347.1070246-10-chao.p.peng@linux.intel.com> (message from Chao Peng on Fri,  2 Dec 2022 14:13:47 +0800)

Chao Peng <chao.p.peng@linux.intel.com> writes:

> Register/unregister private memslot to fd-based memory backing store
> restrictedmem and implement the callbacks for restrictedmem_notifier:
>    - invalidate_start()/invalidate_end() to zap the existing memory
>      mappings in the KVM page table.
>    - error() to request KVM_REQ_MEMORY_MCE and later exit to userspace
>      with KVM_EXIT_SHUTDOWN.

> Expose KVM_MEM_PRIVATE for memslot and KVM_MEMORY_ATTRIBUTE_PRIVATE for
> KVM_GET_SUPPORTED_MEMORY_ATTRIBUTES to userspace but either are
> controlled by kvm_arch_has_private_mem() which should be rewritten by
> architecture code.

Could we perhaps rename KVM_MEM_PRIVATE to KVM_MEM_PROTECTED, to be in
line with KVM_X86_PROTECTED_VM?

I feel that a memslot that has the KVM_MEM_PRIVATE flag need not always
be private; It can sometimes be providing memory that is shared and
also accessible from the host.

KVM_MEMORY_ATTRIBUTE_PRIVATE is fine as-is because this flag is set when
the guest memory is meant to be backed by private memory.

KVM_MEMORY_EXIT_FLAG_PRIVATE is also okay because the flag is used to
indicate when the memory error is caused by a private access (as opposed
to a shared access).

kvm_slot_can_be_private() could perhaps be renamed kvm_is_protected_slot()?


> Co-developed-by: Yu Zhang <yu.c.zhang@linux.intel.com>
> Signed-off-by: Yu Zhang <yu.c.zhang@linux.intel.com>
> Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
> Reviewed-by: Fuad Tabba <tabba@google.com>
> ---
>   arch/x86/include/asm/kvm_host.h |   1 +
>   arch/x86/kvm/x86.c              |  13 +++
>   include/linux/kvm_host.h        |   3 +
>   virt/kvm/kvm_main.c             | 179 +++++++++++++++++++++++++++++++-
>   4 files changed, 191 insertions(+), 5 deletions(-)

> diff --git a/arch/x86/include/asm/kvm_host.h  
> b/arch/x86/include/asm/kvm_host.h
> index 7772ab37ac89..27ef31133352 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -114,6 +114,7 @@
>   	KVM_ARCH_REQ_FLAGS(31, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
>   #define KVM_REQ_HV_TLB_FLUSH \
>   	KVM_ARCH_REQ_FLAGS(32, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)
> +#define KVM_REQ_MEMORY_MCE		KVM_ARCH_REQ(33)

>   #define CR0_RESERVED_BITS                                               \
>   	(~(unsigned long)(X86_CR0_PE | X86_CR0_MP | X86_CR0_EM | X86_CR0_TS \
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 5aefcff614d2..c67e22f3e2ee 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -6587,6 +6587,13 @@ int kvm_arch_pm_notifier(struct kvm *kvm, unsigned  
> long state)
>   }
>   #endif /* CONFIG_HAVE_KVM_PM_NOTIFIER */

> +#ifdef CONFIG_HAVE_KVM_RESTRICTED_MEM
> +void kvm_arch_memory_mce(struct kvm *kvm)
> +{
> +	kvm_make_all_cpus_request(kvm, KVM_REQ_MEMORY_MCE);
> +}
> +#endif
> +
>   static int kvm_vm_ioctl_get_clock(struct kvm *kvm, void __user *argp)
>   {
>   	struct kvm_clock_data data = { 0 };
> @@ -10357,6 +10364,12 @@ static int vcpu_enter_guest(struct kvm_vcpu  
> *vcpu)

>   		if (kvm_check_request(KVM_REQ_UPDATE_CPU_DIRTY_LOGGING, vcpu))
>   			static_call(kvm_x86_update_cpu_dirty_logging)(vcpu);
> +
> +		if (kvm_check_request(KVM_REQ_MEMORY_MCE, vcpu)) {
> +			vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN;
> +			r = 0;
> +			goto out;
> +		}
>   	}

>   	if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win ||
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index 153842bb33df..f032d878e034 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -590,6 +590,7 @@ struct kvm_memory_slot {
>   	struct file *restricted_file;
>   	loff_t restricted_offset;
>   	struct restrictedmem_notifier notifier;
> +	struct kvm *kvm;
>   };

>   static inline bool kvm_slot_can_be_private(const struct kvm_memory_slot  
> *slot)
> @@ -2363,6 +2364,8 @@ static inline int kvm_restricted_mem_get_pfn(struct  
> kvm_memory_slot *slot,
>   	*pfn = page_to_pfn(page);
>   	return ret;
>   }
> +
> +void kvm_arch_memory_mce(struct kvm *kvm);
>   #endif /* CONFIG_HAVE_KVM_RESTRICTED_MEM */

>   #endif
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index e107afea32f0..ac835fc77273 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -936,6 +936,121 @@ static int kvm_init_mmu_notifier(struct kvm *kvm)

>   #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */

> +#ifdef CONFIG_HAVE_KVM_RESTRICTED_MEM
> +static bool restrictedmem_range_is_valid(struct kvm_memory_slot *slot,
> +					 pgoff_t start, pgoff_t end,
> +					 gfn_t *gfn_start, gfn_t *gfn_end)
> +{
> +	unsigned long base_pgoff = slot->restricted_offset >> PAGE_SHIFT;
> +
> +	if (start > base_pgoff)
> +		*gfn_start = slot->base_gfn + start - base_pgoff;
> +	else
> +		*gfn_start = slot->base_gfn;
> +
> +	if (end < base_pgoff + slot->npages)
> +		*gfn_end = slot->base_gfn + end - base_pgoff;
> +	else
> +		*gfn_end = slot->base_gfn + slot->npages;
> +
> +	if (*gfn_start >= *gfn_end)
> +		return false;
> +
> +	return true;
> +}
> +
> +static void kvm_restrictedmem_invalidate_begin(struct  
> restrictedmem_notifier *notifier,
> +					       pgoff_t start, pgoff_t end)
> +{
> +	struct kvm_memory_slot *slot = container_of(notifier,
> +						    struct kvm_memory_slot,
> +						    notifier);
> +	struct kvm *kvm = slot->kvm;
> +	gfn_t gfn_start, gfn_end;
> +	struct kvm_gfn_range gfn_range;
> +	int idx;
> +
> +	if (!restrictedmem_range_is_valid(slot, start, end,
> +					  &gfn_start, &gfn_end))
> +		return;
> +
> +	gfn_range.start = gfn_start;
> +	gfn_range.end = gfn_end;
> +	gfn_range.slot = slot;
> +	gfn_range.pte = __pte(0);
> +	gfn_range.may_block = true;
> +
> +	idx = srcu_read_lock(&kvm->srcu);
> +	KVM_MMU_LOCK(kvm);
> +
> +	kvm_mmu_invalidate_begin(kvm);
> +	kvm_mmu_invalidate_range_add(kvm, gfn_start, gfn_end);
> +	if (kvm_unmap_gfn_range(kvm, &gfn_range))
> +		kvm_flush_remote_tlbs(kvm);
> +
> +	KVM_MMU_UNLOCK(kvm);
> +	srcu_read_unlock(&kvm->srcu, idx);
> +}
> +
> +static void kvm_restrictedmem_invalidate_end(struct  
> restrictedmem_notifier *notifier,
> +					     pgoff_t start, pgoff_t end)
> +{
> +	struct kvm_memory_slot *slot = container_of(notifier,
> +						    struct kvm_memory_slot,
> +						    notifier);
> +	struct kvm *kvm = slot->kvm;
> +	gfn_t gfn_start, gfn_end;
> +
> +	if (!restrictedmem_range_is_valid(slot, start, end,
> +					  &gfn_start, &gfn_end))
> +		return;
> +
> +	KVM_MMU_LOCK(kvm);
> +	kvm_mmu_invalidate_end(kvm);
> +	KVM_MMU_UNLOCK(kvm);
> +}
> +
> +static void kvm_restrictedmem_error(struct restrictedmem_notifier  
> *notifier,
> +				    pgoff_t start, pgoff_t end)
> +{
> +	struct kvm_memory_slot *slot = container_of(notifier,
> +						    struct kvm_memory_slot,
> +						    notifier);
> +	kvm_arch_memory_mce(slot->kvm);
> +}
> +
> +static struct restrictedmem_notifier_ops kvm_restrictedmem_notifier_ops  
> = {
> +	.invalidate_start = kvm_restrictedmem_invalidate_begin,
> +	.invalidate_end = kvm_restrictedmem_invalidate_end,
> +	.error = kvm_restrictedmem_error,
> +};
> +
> +static inline void kvm_restrictedmem_register(struct kvm_memory_slot  
> *slot)
> +{
> +	slot->notifier.ops = &kvm_restrictedmem_notifier_ops;
> +	restrictedmem_register_notifier(slot->restricted_file, &slot->notifier);
> +}
> +
> +static inline void kvm_restrictedmem_unregister(struct kvm_memory_slot  
> *slot)
> +{
> +	restrictedmem_unregister_notifier(slot->restricted_file,
> +					  &slot->notifier);
> +}
> +
> +#else /* !CONFIG_HAVE_KVM_RESTRICTED_MEM */
> +
> +static inline void kvm_restrictedmem_register(struct kvm_memory_slot  
> *slot)
> +{
> +	WARN_ON_ONCE(1);
> +}
> +
> +static inline void kvm_restrictedmem_unregister(struct kvm_memory_slot  
> *slot)
> +{
> +	WARN_ON_ONCE(1);
> +}
> +
> +#endif /* CONFIG_HAVE_KVM_RESTRICTED_MEM */
> +
>   #ifdef CONFIG_HAVE_KVM_PM_NOTIFIER
>   static int kvm_pm_notifier_call(struct notifier_block *bl,
>   				unsigned long state,
> @@ -980,6 +1095,11 @@ static void kvm_destroy_dirty_bitmap(struct  
> kvm_memory_slot *memslot)
>   /* This does not remove the slot from struct kvm_memslots data  
> structures */
>   static void kvm_free_memslot(struct kvm *kvm, struct kvm_memory_slot  
> *slot)
>   {
> +	if (slot->flags & KVM_MEM_PRIVATE) {
> +		kvm_restrictedmem_unregister(slot);
> +		fput(slot->restricted_file);
> +	}
> +
>   	kvm_destroy_dirty_bitmap(slot);

>   	kvm_arch_free_memslot(kvm, slot);
> @@ -1551,10 +1671,14 @@ static void kvm_replace_memslot(struct kvm *kvm,
>   	}
>   }

> -static int check_memory_region_flags(const struct kvm_user_mem_region  
> *mem)
> +static int check_memory_region_flags(struct kvm *kvm,
> +				     const struct kvm_user_mem_region *mem)
>   {
>   	u32 valid_flags = KVM_MEM_LOG_DIRTY_PAGES;

> +	if (kvm_arch_has_private_mem(kvm))
> +		valid_flags |= KVM_MEM_PRIVATE;
> +
>   #ifdef __KVM_HAVE_READONLY_MEM
>   	valid_flags |= KVM_MEM_READONLY;
>   #endif
> @@ -1630,6 +1754,9 @@ static int kvm_prepare_memory_region(struct kvm  
> *kvm,
>   {
>   	int r;

> +	if (change == KVM_MR_CREATE && new->flags & KVM_MEM_PRIVATE)
> +		kvm_restrictedmem_register(new);
> +
>   	/*
>   	 * If dirty logging is disabled, nullify the bitmap; the old bitmap
>   	 * will be freed on "commit".  If logging is enabled in both old and
> @@ -1658,6 +1785,9 @@ static int kvm_prepare_memory_region(struct kvm  
> *kvm,
>   	if (r && new && new->dirty_bitmap && (!old || !old->dirty_bitmap))
>   		kvm_destroy_dirty_bitmap(new);

> +	if (r && change == KVM_MR_CREATE && new->flags & KVM_MEM_PRIVATE)
> +		kvm_restrictedmem_unregister(new);
> +
>   	return r;
>   }

> @@ -1963,7 +2093,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
>   	int as_id, id;
>   	int r;

> -	r = check_memory_region_flags(mem);
> +	r = check_memory_region_flags(kvm, mem);
>   	if (r)
>   		return r;

> @@ -1982,6 +2112,10 @@ int __kvm_set_memory_region(struct kvm *kvm,
>   	     !access_ok((void __user *)(unsigned long)mem->userspace_addr,
>   			mem->memory_size))
>   		return -EINVAL;
> +	if (mem->flags & KVM_MEM_PRIVATE &&
> +		(mem->restricted_offset & (PAGE_SIZE - 1) ||
> +		 mem->restricted_offset > U64_MAX - mem->memory_size))
> +		return -EINVAL;
>   	if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM)
>   		return -EINVAL;
>   	if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
> @@ -2020,6 +2154,9 @@ int __kvm_set_memory_region(struct kvm *kvm,
>   		if ((kvm->nr_memslot_pages + npages) < kvm->nr_memslot_pages)
>   			return -EINVAL;
>   	} else { /* Modify an existing slot. */
> +		/* Private memslots are immutable, they can only be deleted. */
> +		if (mem->flags & KVM_MEM_PRIVATE)
> +			return -EINVAL;
>   		if ((mem->userspace_addr != old->userspace_addr) ||
>   		    (npages != old->npages) ||
>   		    ((mem->flags ^ old->flags) & KVM_MEM_READONLY))
> @@ -2048,10 +2185,28 @@ int __kvm_set_memory_region(struct kvm *kvm,
>   	new->npages = npages;
>   	new->flags = mem->flags;
>   	new->userspace_addr = mem->userspace_addr;
> +	if (mem->flags & KVM_MEM_PRIVATE) {
> +		new->restricted_file = fget(mem->restricted_fd);
> +		if (!new->restricted_file ||
> +		    !file_is_restrictedmem(new->restricted_file)) {
> +			r = -EINVAL;
> +			goto out;
> +		}
> +		new->restricted_offset = mem->restricted_offset;
> +	}
> +
> +	new->kvm = kvm;

>   	r = kvm_set_memslot(kvm, old, new, change);
>   	if (r)
> -		kfree(new);
> +		goto out;
> +
> +	return 0;
> +
> +out:
> +	if (new->restricted_file)
> +		fput(new->restricted_file);
> +	kfree(new);
>   	return r;
>   }
>   EXPORT_SYMBOL_GPL(__kvm_set_memory_region);
> @@ -2351,6 +2506,8 @@ static int kvm_vm_ioctl_clear_dirty_log(struct kvm  
> *kvm,
>   #ifdef CONFIG_HAVE_KVM_MEMORY_ATTRIBUTES
>   static u64 kvm_supported_mem_attributes(struct kvm *kvm)
>   {
> +	if (kvm_arch_has_private_mem(kvm))
> +		return KVM_MEMORY_ATTRIBUTE_PRIVATE;
>   	return 0;
>   }

> @@ -4822,16 +4979,28 @@ static long kvm_vm_ioctl(struct file *filp,
>   	}
>   	case KVM_SET_USER_MEMORY_REGION: {
>   		struct kvm_user_mem_region mem;
> -		unsigned long size = sizeof(struct kvm_userspace_memory_region);
> +		unsigned int flags_offset = offsetof(typeof(mem), flags);
> +		unsigned long size;
> +		u32 flags;

>   		kvm_sanity_check_user_mem_region_alias();

> +		memset(&mem, 0, sizeof(mem));
> +
>   		r = -EFAULT;
> +		if (get_user(flags, (u32 __user *)(argp + flags_offset)))
> +			goto out;
> +
> +		if (flags & KVM_MEM_PRIVATE)
> +			size = sizeof(struct kvm_userspace_memory_region_ext);
> +		else
> +			size = sizeof(struct kvm_userspace_memory_region);
> +
>   		if (copy_from_user(&mem, argp, size))
>   			goto out;

>   		r = -EINVAL;
> -		if (mem.flags & KVM_MEM_PRIVATE)
> +		if ((flags ^ mem.flags) & KVM_MEM_PRIVATE)
>   			goto out;

>   		r = kvm_vm_ioctl_set_memory_region(kvm, &mem);

  parent reply	other threads:[~2023-03-07 19:28 UTC|newest]

Thread overview: 399+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-02  6:13 [PATCH v10 0/9] KVM: mm: fd-based approach for supporting KVM Chao Peng
2022-12-02  6:13 ` [PATCH v10 1/9] mm: Introduce memfd_restricted system call to create restricted user memory Chao Peng
2022-12-06 14:57   ` Fuad Tabba
2022-12-07 13:50     ` Chao Peng
2022-12-13 23:49   ` Huang, Kai
2022-12-19  7:53     ` Chao Peng
2022-12-19  8:48       ` Huang, Kai
2022-12-20  7:22         ` Chao Peng
2022-12-20  8:33           ` Huang, Kai
2022-12-21 13:39             ` Chao Peng
2022-12-22  0:37               ` Huang, Kai
2022-12-23  8:20                 ` Chao Peng
2023-01-23 14:03                 ` Vlastimil Babka
2023-01-23 15:18                   ` Kirill A. Shutemov
2023-02-13 14:23                     ` Vlastimil Babka
2023-01-23 23:01                   ` Huang, Kai
2023-01-23 23:38                     ` Sean Christopherson
2023-01-24  7:51                       ` Vlastimil Babka
2022-12-22 18:15               ` Sean Christopherson
2022-12-23  0:50                 ` Huang, Kai
2022-12-23  0:50                   ` Huang, Kai
2022-12-23  8:24                 ` Chao Peng
2023-01-23 15:43                 ` Kirill A. Shutemov
2023-02-13 11:43                   ` Vlastimil Babka
2023-02-13 13:10                   ` Michael Roth
2023-01-13 21:54   ` Sean Christopherson
2023-01-17 12:41     ` Chao Peng
2023-01-17 16:34       ` Sean Christopherson
2023-01-18  8:16         ` Chao Peng
2023-01-18 10:17           ` Isaku Yamahata
2023-02-22  2:07     ` Alexey Kardashevskiy
2023-02-24  5:42       ` Chao Peng
2023-01-30  5:26   ` Ackerley Tng
2023-01-30  6:04     ` Wang, Wei W
2023-02-16  9:51   ` Nikunj A. Dadhania
2023-03-20 19:08     ` Michael Roth
2023-04-13 15:25   ` [PATCH v7 00/14] KVM: mm: fd-based approach for supporting KVM guest private memory Christian Brauner
2023-04-13 22:28     ` Sean Christopherson
2023-04-14 22:38       ` Ackerley Tng
2023-04-14 23:26         ` Sean Christopherson
2023-04-15  0:06           ` Sean Christopherson
2023-04-19  8:29       ` Christian Brauner
2023-04-20  0:49         ` Sean Christopherson
2023-04-20  8:35           ` Christian Brauner
2023-04-13 17:22   ` [PATCH v10 1/9] mm: Introduce memfd_restricted system call to create restricted user memory Ackerley Tng
2022-12-02  6:13 ` [PATCH v10 2/9] KVM: Introduce per-page memory attributes Chao Peng
2022-12-06 13:34   ` Fabiano Rosas
2022-12-07 14:31     ` Chao Peng
2022-12-06 15:07   ` Fuad Tabba
2022-12-07 14:51     ` Chao Peng
2022-12-16 15:09   ` Borislav Petkov
2022-12-19  8:15     ` Chao Peng
2022-12-19 10:17       ` Borislav Petkov
2022-12-20  7:24         ` Chao Peng
2022-12-28  8:28   ` Chenyi Qiang
2023-01-03  1:39     ` Chao Peng
2023-01-03  3:32       ` Wang, Wei W
2023-01-03 23:06         ` Sean Christopherson
2023-01-05  4:39           ` Chao Peng
2023-01-13 22:02   ` Sean Christopherson
2023-01-17  3:21   ` Binbin Wu
2023-01-17 13:30     ` Chao Peng
2023-01-17 17:25       ` Sean Christopherson
2023-02-09  7:25   ` Isaku Yamahata
2023-02-10  0:35     ` Sean Christopherson
2023-02-13 23:53       ` Isaku Yamahata
2023-02-14 18:07         ` Sean Christopherson
2023-05-19 17:32   ` Nicolas Saenz Julienne
2023-05-19 18:23     ` Sean Christopherson
2023-05-19 19:49       ` Nicolas Saenz Julienne
2023-05-19 19:57         ` Sean Christopherson
2023-05-23 18:59       ` Nicolas Saenz Julienne
2022-12-02  6:13 ` [PATCH v10 3/9] KVM: Extend the memslot to support fd-based private memory Chao Peng
2022-12-05  9:03   ` Fuad Tabba
2022-12-06 11:53     ` Chao Peng
2022-12-06 12:39       ` Fuad Tabba
2022-12-07 15:10         ` Chao Peng
2022-12-08  8:37   ` Xiaoyao Li
2022-12-08 11:30     ` Chao Peng
2022-12-13 12:04       ` Xiaoyao Li
2022-12-19  7:50         ` Chao Peng
2022-12-19 14:36   ` Borislav Petkov
2022-12-20  7:43     ` Chao Peng
2022-12-20  9:55       ` Borislav Petkov
2022-12-21 13:42         ` Chao Peng
2023-01-05 11:23   ` Jarkko Sakkinen
2023-01-06  9:40     ` Chao Peng
2023-01-09 19:32       ` Sean Christopherson
2023-01-10  9:14         ` Chao Peng
2023-01-10 22:51           ` Vishal Annapurve
2023-01-13 22:37           ` Sean Christopherson
2023-01-17 12:42             ` Chao Peng
2023-01-20 23:42           ` Jarkko Sakkinen
2023-01-20 23:28         ` Jarkko Sakkinen
2022-12-02  6:13 ` [PATCH v10 4/9] KVM: Add KVM_EXIT_MEMORY_FAULT exit Chao Peng
2022-12-06 15:47   ` Fuad Tabba
2022-12-07 15:11     ` Chao Peng
2023-01-13 23:13   ` Sean Christopherson
2022-12-02  6:13 ` [PATCH v10 5/9] KVM: Use gfn instead of hva for mmu_notifier_retry Chao Peng
2022-12-05  9:23   ` Fuad Tabba
2022-12-06 11:56     ` Chao Peng
2022-12-06 15:48       ` Fuad Tabba
2022-12-09  6:24         ` Chao Peng
2022-12-07  6:34       ` Isaku Yamahata
2022-12-07 15:14         ` Chao Peng
2022-12-02  6:13 ` [PATCH v10 6/9] KVM: Unmap existing mappings when change the memory attributes Chao Peng
2022-12-07  8:13   ` Yuan Yao
2022-12-08 11:20     ` Chao Peng
2022-12-09  5:43       ` Yuan Yao
2022-12-07 17:16   ` Fuad Tabba
2022-12-08 11:13     ` Chao Peng
2022-12-09  8:57       ` Fuad Tabba
2022-12-12  7:22         ` Chao Peng
2022-12-13 23:51   ` Huang, Kai
2022-12-19  7:54     ` Chao Peng
2023-01-13 22:50   ` Sean Christopherson
2022-12-02  6:13 ` [PATCH v10 7/9] KVM: Update lpage info when private/shared memory are mixed Chao Peng
2022-12-05 22:49   ` Isaku Yamahata
2022-12-06 12:02     ` Chao Peng
2022-12-07  6:42       ` Isaku Yamahata
2022-12-08 11:17         ` Chao Peng
2023-01-13 23:12   ` Sean Christopherson
2023-01-13 23:16   ` Sean Christopherson
2023-01-28 13:54     ` Chao Peng
2022-12-02  6:13 ` [PATCH v10 8/9] KVM: Handle page fault for private memory Chao Peng
2022-12-08  2:29   ` Yuan Yao
2022-12-08 11:23     ` Chao Peng
2022-12-09  5:45       ` Yuan Yao
2022-12-09  9:01   ` Fuad Tabba
2022-12-12  7:23     ` Chao Peng
2023-01-13 23:29   ` Sean Christopherson
2022-12-02  6:13 ` [PATCH v10 9/9] KVM: Enable and expose KVM_MEM_PRIVATE Chao Peng
2022-12-09  9:11   ` Fuad Tabba
2023-01-05 20:38   ` Vishal Annapurve
2023-01-06  4:13     ` Chao Peng
2023-01-14  0:01   ` Sean Christopherson
2023-01-17 13:12     ` Chao Peng
2023-01-17 19:35       ` Sean Christopherson
2023-01-18  8:23         ` Chao Peng
2023-01-28 14:00     ` Chao Peng
2023-03-08  0:13       ` Ackerley Tng
2023-03-08  7:40         ` Chao Peng
2023-03-23  0:41           ` Isaku Yamahata
2023-03-24  2:10             ` Chao Peng
2023-03-24  2:29               ` Xiaoyao Li
2023-03-28 10:41                 ` Chao Peng
2023-04-14 21:08                   ` Sean Christopherson
2023-04-18 23:38                     ` Ackerley Tng
2023-04-25 23:01                       ` Sean Christopherson
2023-03-07 19:14   ` Ackerley Tng [this message]
2023-03-07 20:27     ` Sean Christopherson
2023-01-14  0:37 ` [PATCH v10 0/9] KVM: mm: fd-based approach for supporting KVM Sean Christopherson
2023-01-16 13:48   ` Kirill A. Shutemov
2023-01-17 13:19   ` Chao Peng
2023-01-17 14:32   ` Fuad Tabba
2023-01-19 11:13   ` Isaku Yamahata
2023-01-19 15:25     ` Sean Christopherson
2023-01-19 22:37       ` Isaku Yamahata
2023-01-24  1:27         ` Sean Christopherson
2023-02-08 12:24           ` Isaku Yamahata
2023-02-13 13:01           ` Michael Roth
2023-02-21 12:11             ` Chao Peng
2023-03-23  1:27               ` Michael Roth
2023-03-24  2:13                 ` Chao Peng
2023-04-12 22:01                 ` Sean Christopherson
2023-04-17 14:37           ` Chao Peng
2023-04-17 15:01             ` Sean Christopherson
2023-01-24 16:08   ` Liam Merwick
2023-01-25  0:20     ` Sean Christopherson
2023-01-25 12:53       ` Kirill A. Shutemov
2023-01-25 16:01         ` Liam Merwick
2023-04-13  1:07         ` Sean Christopherson
2023-04-13 16:04           ` Kirill A. Shutemov
2023-02-16  5:13 ` Mike Rapoport
2023-02-16  9:41   ` David Hildenbrand
2023-02-22 21:53     ` Sean Christopherson
2023-04-17 15:40 ` Rename restrictedmem => guardedmem? (was: Re: [PATCH v10 0/9] KVM: mm: fd-based approach for supporting KVM) Sean Christopherson
2023-04-17 15:48   ` David Hildenbrand
2023-04-17 16:40     ` Sean Christopherson
2023-04-17 17:09       ` David Hildenbrand
2023-04-17 19:16         ` Sean Christopherson
2023-04-18  8:53           ` Fuad Tabba
2023-04-18  9:10           ` David Hildenbrand
2023-04-19  0:47             ` Sean Christopherson
2023-04-19  7:21               ` David Hildenbrand
2023-04-19 15:17                 ` Sean Christopherson
2023-04-19 15:27                   ` David Hildenbrand
2023-04-22  1:33                 ` Sean Christopherson
2023-05-05 19:39                   ` Ackerley Tng
2023-05-06  0:55                     ` Sean Christopherson
2023-05-06  1:17                       ` Vishal Annapurve
2023-05-15 23:46                       ` Sean Christopherson
2023-07-13 22:46                       ` Ackerley Tng
2023-07-14 19:29                         ` Sean Christopherson
2023-07-14 23:09                           ` Vishal Annapurve
2023-07-15  0:30                             ` Sean Christopherson
2023-05-09 12:44                     ` Chao Peng
2023-05-10 17:26                   ` Vishal Annapurve
2023-05-10 20:23                     ` Vishal Annapurve
2023-05-10 21:39                     ` Sean Christopherson
2023-05-10 23:03                       ` Vishal Annapurve
2023-05-11 20:22                         ` Sean Christopherson
2023-05-19  1:07                           ` Vishal Annapurve
2023-05-12  0:21                   ` Michael Roth
2023-05-12 18:01                     ` Sean Christopherson
2023-05-22 13:50                       ` Michael Roth
2023-05-22 17:09                         ` Sean Christopherson
2023-05-22 23:58                           ` Michael Roth
2023-05-23  0:21                             ` Sean Christopherson
2023-06-06 19:14                   ` Ackerley Tng
2023-06-06 23:25                     ` Sean Christopherson
2023-06-08 17:13                       ` Ackerley Tng
2023-04-17 17:11       ` Ackerley Tng
2023-04-17 18:17         ` Sean Christopherson
2023-04-18 17:01       ` Ackerley Tng
2023-04-23 13:28     ` Jarkko Sakkinen
2023-05-05 20:00       ` David Hildenbrand
2023-05-06  7:44         ` Vlastimil Babka
2023-05-06  9:16           ` David Hildenbrand
2023-04-23 13:14   ` Jarkko Sakkinen
  -- strict thread matches above, loose matches on Subject: below --
2023-03-31 23:50 [RFC PATCH v3 0/2] Providing mount in memfd_restricted() syscall Ackerley Tng
2023-03-31 23:50 ` [RFC PATCH v3 1/2] mm: restrictedmem: Allow userspace to specify mount for memfd_restricted Ackerley Tng
2023-04-03  8:21   ` David Hildenbrand
2023-04-05 22:29     ` Ackerley Tng
2023-04-04  8:25   ` Kirill A. Shutemov
2023-04-05 22:32     ` Ackerley Tng
2023-04-04 13:53   ` Christian Brauner
2023-04-04 14:58     ` Christian Brauner
2023-04-05 21:58       ` Ackerley Tng
2023-04-12  9:59         ` Christian Brauner
2023-04-13 22:53           ` Ackerley Tng
2023-04-13 23:07             ` Sean Christopherson
2023-03-31 23:50 ` [RFC PATCH v3 2/2] selftests: restrictedmem: Check hugepage-ness of shmem file backing restrictedmem fd Ackerley Tng
2023-04-03  8:24   ` David Hildenbrand
2023-04-11  1:35     ` Ackerley Tng
2022-07-06  8:20 [PATCH v7 00/14] KVM: mm: fd-based approach for supporting KVM guest private memory Chao Peng
2022-07-06  8:20 ` [PATCH v7 01/14] mm: Add F_SEAL_AUTO_ALLOCATE seal to memfd Chao Peng
2022-07-21  9:44   ` David Hildenbrand
2022-07-21  9:50     ` David Hildenbrand
2022-07-21 15:05       ` Sean Christopherson
2022-07-25 13:46         ` Chao Peng
2022-07-21 10:27     ` Gupta, Pankaj
2022-07-25 13:54       ` Chao Peng
2022-07-25 14:49         ` Gupta, Pankaj
2022-07-25 13:42     ` Chao Peng
2022-08-05 17:55     ` Paolo Bonzini
2022-08-05 18:06       ` David Hildenbrand
2022-08-10  9:40         ` Chao Peng
2022-08-10  9:38       ` Chao Peng
2022-08-17 23:41       ` Kirill A. Shutemov
2022-08-18  9:09         ` Paolo Bonzini
2022-08-23  7:36         ` David Hildenbrand
2022-08-24 10:20           ` Chao Peng
2022-08-26 15:19   ` Fuad Tabba
2022-08-29 15:18     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 02/14] selftests/memfd: Add tests for F_SEAL_AUTO_ALLOCATE Chao Peng
2022-08-05 13:11   ` David Hildenbrand
2022-07-06  8:20 ` [PATCH v7 03/14] mm: Introduce memfile_notifier Chao Peng
2022-08-05 13:22   ` David Hildenbrand
2022-08-10  9:22     ` Chao Peng
2022-08-10 10:05       ` David Hildenbrand
2022-08-10 14:38         ` Sean Christopherson
2022-08-11 12:27           ` Quentin Perret
2022-08-11 13:39             ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 04/14] mm/shmem: Support memfile_notifier Chao Peng
2022-07-12 18:02   ` Gupta, Pankaj
2022-07-13  7:44     ` Chao Peng
2022-07-13 10:01       ` Gupta, Pankaj
2022-07-13 23:49         ` Chao Peng
2022-07-14  4:15           ` Gupta, Pankaj
2022-08-05 13:26   ` David Hildenbrand
2022-08-10  9:25     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 05/14] mm/memfd: Introduce MFD_INACCESSIBLE flag Chao Peng
2022-08-05 13:28   ` David Hildenbrand
2022-08-10  9:37     ` Chao Peng
2022-08-10  9:55       ` David Hildenbrand
2022-08-11 13:17         ` Chao Peng
2022-09-07 16:18     ` Kirill A. Shutemov
2022-07-06  8:20 ` [PATCH v7 06/14] KVM: Rename KVM_PRIVATE_MEM_SLOTS to KVM_INTERNAL_MEM_SLOTS Chao Peng
2022-07-06  8:20 ` [PATCH v7 07/14] KVM: Use gfn instead of hva for mmu_notifier_retry Chao Peng
2022-07-15 11:36   ` Gupta, Pankaj
2022-07-18 13:29     ` Chao Peng
2022-07-18 15:26       ` Sean Christopherson
2022-07-19 14:02         ` Chao Peng
2022-08-04  7:10   ` Isaku Yamahata
2022-08-10  8:19     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 08/14] KVM: Rename mmu_notifier_* Chao Peng
2022-07-29 19:02   ` Sean Christopherson
2022-08-03 10:13     ` Chao Peng
2022-08-05 19:54     ` Paolo Bonzini
2022-08-10  8:09       ` Chao Peng
2023-05-23  7:19   ` Kautuk Consul
2023-05-23 14:19     ` Sean Christopherson
2023-05-24  6:12       ` Kautuk Consul
2023-05-24 20:16         ` Sean Christopherson
2023-05-24 20:33           ` Peter Zijlstra
2023-05-24 21:39             ` Sean Christopherson
2023-05-25  8:54               ` Peter Zijlstra
2023-05-25  3:52             ` Kautuk Consul
2023-05-24 20:28         ` Peter Zijlstra
2022-07-06  8:20 ` [PATCH v7 09/14] KVM: Extend the memslot to support fd-based private memory Chao Peng
2022-07-29 19:51   ` Sean Christopherson
2022-08-03 10:08     ` Chao Peng
2022-08-03 14:42       ` Sean Christopherson
2022-07-06  8:20 ` [PATCH v7 10/14] KVM: Add KVM_EXIT_MEMORY_FAULT exit Chao Peng
2022-07-06  8:20 ` [PATCH v7 11/14] KVM: Register/unregister the guest private memory regions Chao Peng
2022-07-19  8:00   ` Gupta, Pankaj
2022-07-19 14:08     ` Chao Peng
2022-07-19 14:23       ` Gupta, Pankaj
2022-07-20 15:07         ` Chao Peng
2022-07-20 15:31           ` Gupta, Pankaj
2022-07-20 16:21             ` Sean Christopherson
2022-07-20 17:41               ` Gupta, Pankaj
2022-07-21  7:34               ` Wei Wang
2022-07-21  9:29                 ` Chao Peng
2022-07-21 17:58                   ` Sean Christopherson
2022-07-25 13:04                     ` Chao Peng
2022-07-29 19:54                       ` Sean Christopherson
2022-08-02  0:49                         ` Sean Christopherson
2022-08-02 16:38                           ` Sean Christopherson
2022-08-03  9:48                             ` Chao Peng
2022-08-03 15:51                               ` Sean Christopherson
2022-08-04  7:58                                 ` Chao Peng
2022-07-20 16:44   ` Sean Christopherson
2022-07-21  9:37     ` Chao Peng
2022-08-19 19:37   ` Vishal Annapurve
2022-08-24 10:37     ` Chao Peng
2022-08-26 15:19   ` Fuad Tabba
2022-08-29 15:21     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 12/14] KVM: Handle page fault for private memory Chao Peng
2022-07-29 20:58   ` Sean Christopherson
2022-08-03  9:52     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 13/14] KVM: Enable and expose KVM_MEM_PRIVATE Chao Peng
2022-07-19  9:55   ` Gupta, Pankaj
2022-07-19 14:12     ` Chao Peng
2022-07-06  8:20 ` [PATCH v7 14/14] memfd_create.2: Describe MFD_INACCESSIBLE flag Chao Peng
2022-08-01 14:40   ` Dave Hansen
2022-08-03  9:53     ` Chao Peng
2022-07-13  3:58 ` [PATCH v7 00/14] KVM: mm: fd-based approach for supporting KVM guest private memory Gupta, Pankaj
2022-07-13  7:57   ` Chao Peng
2022-07-13 10:35     ` Gupta, Pankaj
2022-07-13 23:59       ` Chao Peng
2022-07-14  4:39         ` Gupta, Pankaj
2022-07-14  5:06           ` Gupta, Pankaj
2022-07-14  4:29       ` Andy Lutomirski
2022-07-14  5:13         ` Gupta, Pankaj
2022-08-11 10:02 ` Nikunj A. Dadhania
2022-08-11 11:30   ` Gupta, Pankaj
2022-08-11 13:32     ` Chao Peng
2022-08-11 17:28       ` Nikunj A. Dadhania
2022-08-12  3:22       ` Nikunj A. Dadhania
2022-08-11 17:18     ` Nikunj A. Dadhania
2022-08-11 23:02       ` Gupta, Pankaj
2022-08-12  6:02         ` Gupta, Pankaj
2022-08-12  7:18           ` Gupta, Pankaj
2022-08-12  8:48             ` Nikunj A. Dadhania
2022-08-12  9:33               ` Gupta, Pankaj
2022-08-15 13:04               ` Chao Peng
2022-08-16  4:28                 ` Nikunj A. Dadhania
2022-08-16 11:33                 ` Gupta, Pankaj
2022-08-16 12:24                   ` Kirill A . Shutemov
2022-08-16 13:03                     ` Gupta, Pankaj
2022-08-16 15:38                       ` Sean Christopherson
2022-08-17 15:27                         ` Michael Roth
2022-08-23  1:25                           ` Isaku Yamahata
2022-08-23 17:41                         ` Gupta, Pankaj
2022-08-18  5:40 ` Hugh Dickins
2022-08-18 13:24   ` Kirill A . Shutemov
2022-08-19  0:20     ` Sean Christopherson
2022-08-19  3:38       ` Hugh Dickins
2022-08-19 22:53         ` Sean Christopherson
2022-08-23  7:55         ` David Hildenbrand
2022-08-23 16:05           ` Sean Christopherson
2022-08-24  9:41             ` Chao Peng
2022-09-09  4:55               ` Andy Lutomirski
2022-08-19  3:00     ` Hugh Dickins
2022-08-20  0:27       ` Kirill A. Shutemov
2022-08-21  5:15         ` Hugh Dickins
2022-08-31 14:24           ` Kirill A . Shutemov
2022-09-02 10:27             ` Chao Peng
2022-09-02 12:30               ` Kirill A . Shutemov
2022-09-08  1:10             ` Kirill A. Shutemov
2022-09-13  9:44               ` Sean Christopherson
2022-09-13 13:28                 ` Kirill A. Shutemov
2022-09-13 14:53                   ` Sean Christopherson
2022-09-13 16:00                     ` Kirill A. Shutemov
2022-09-13 16:12                       ` Sean Christopherson
2022-09-09  4:48         ` Andy Lutomirski
2022-09-09 14:32           ` Kirill A . Shutemov
2022-09-09 19:11             ` Andy Lutomirski
2022-09-09 23:02               ` Kirill A . Shutemov
2022-08-21 10:27       ` Matthew Wilcox
2022-08-24 10:27         ` Chao Peng
2022-09-09  4:44     ` Andy Lutomirski
2022-08-26 15:19 ` Fuad Tabba
2022-08-29 15:17   ` Chao Peng
2022-08-31  9:12     ` Fuad Tabba
2022-09-02 10:19       ` Chao Peng
2022-09-09 15:35 ` Michael Roth

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=diqzcz5kz85e.fsf@ackerleytng-cloudtop.c.googlers.com \
    --to=ackerleytng@google.com \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bfields@fieldses.org \
    --cc=bp@alien8.de \
    --cc=chao.p.peng@linux.intel.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.com \
    --cc=ddutile@redhat.com \
    --cc=dhildenb@redhat.com \
    --cc=hpa@zytor.com \
    --cc=hughd@google.com \
    --cc=jlayton@kernel.org \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=jun.nakajima@intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linmiaohe@huawei.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=mail@maciej.szmigiero.name \
    --cc=mhocko@suse.com \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=naoya.horiguchi@nec.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qperret@google.com \
    --cc=rppt@kernel.org \
    --cc=seanjc@google.com \
    --cc=shuah@kernel.org \
    --cc=steven.price@arm.com \
    --cc=tabba@google.com \
    --cc=tglx@linutronix.de \
    --cc=vannapurve@google.com \
    --cc=vbabka@suse.cz \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=wei.w.wang@intel.com \
    --cc=x86@kernel.org \
    --cc=yu.c.zhang@linux.intel.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.