Re: [PATCH v8 17/46] KVM: guest_memfd: Advertise KVM_SET_MEMORY_ATTRIBUTES2 ioctl

Xiaoyao Li <[email protected]> Mon, 27 Jul 2026 07:50:43 +0800
Newsgroups dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On 7/25/2026 4:26 AM, Ackerley Tng wrote:
> Xiaoyao Li <[email protected]> writes:
> 
>> On 7/2/2026 12:09 AM, Sean Christopherson wrote:
>>> On Wed, Jul 01, 2026, Xiaoyao Li wrote:
>>>> On 6/19/2026 8:31 AM, Ackerley Tng via B4 Relay wrote:
>>>>> @@ -4969,6 +4973,11 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
>>>>>     		return 1;
>>>>>     	case KVM_CAP_GUEST_MEMFD_FLAGS:
>>>>>     		return kvm_gmem_get_supported_flags(kvm);
>>>>> +	case KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES:
>>>>> +		if (!gmem_in_place_conversion || !kvm_supports_private_mem(kvm))
>>>>> +			return 0;
>>>>> +
>>>>> +		return KVM_MEMORY_ATTRIBUTE_PRIVATE;
>>>>>     #endif
>>>>>     	default:
>>>>>     		break;
>>>>
>>>> this looks inconsistent with the
>>>>
>>>> 	case KVM_SET_MEMORY_ATTRIBUTES2:
>>>> 		if (!gmem_in_place_conversion)
>>>> 			return -ENOTTY;
>>>>
>>>> Well, the check of
>>>>
>>>> 	if (!kvm_arch_has_private_mem(f->kvm))
>>>> 		return -EINVAL;
>>>>
>>>> is buried in the following kvm_gmem_set_attributes(). How about moving of
>>>> kvm_arch_has_private_mem() check to put it along with
>>>> gmem_in_place_conversion check in kvm_gmem_ioctl() in Patch 13?
>>>
>>> Me confused, patch 13 already adds the kvm_arch_has_private_mem() in
>>> kvm_gmem_set_attributes().
>>
>> I wanted to make the check in KVM_SET_MEMORY_ATTRIBUTES2 in Patch 13
>> like something below:
>>
>> 	case KVM_SET_MEMORY_ATTRIBUTES2:
>> 		if (!gmem_in_place_conversion || !kvm_arch_has_private_mem(f->kvm))
>> 		return -EXXX;
>>
>> and finally, with the introduction of kvm_supports_private_mem() in this
>> patch, it becomes:
>>
>> 	case KVM_SET_MEMORY_ATTRIBUTES2:
>> 		if (!gmem_in_place_conversion || !kvm_supports_private_mem(f->kvm))
>> 		return -EXXX;
>>
> 
> Is the request here to make KVM_SET_MEMORY_ATTRIBUTES2 return -ENOTTY
> instead of -EINVAL? kvm_gmem_set_attributes() also checks for
> !kvm_arch_has_private_mem() and returns -EINVAL.

Not really.

I want both "KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES" and 
"KVM_SET_MEMORY_ATTRIBUTES2 on gmem" to check gmem_in_place_conversion 
and kvm_supports_private_mem() in the same if(), or side by side if two 
different return code is desired.

Because the current code somewhat confused me on why 
KVM_CAP_GUEST_MEMFD_MEMORY_ATTRIBUTES checks two conditions while 
KVM_SET_MEMORY_ATTRIBUTES2 on gmem only checks gmem_in_place_conversion. 
Only later did I realize that KVM_SET_MEMORY_ATTRIBUTES2 on gmem also 
checks kvm_supports_private_mem(), but buried in the following handling.

> I'm about to post v9, which squashes the patches as Sean
> suggested. Please review v9 instead to see if this concern is already
> addressed :)

sure.