qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 1/4] hostmem-memfd: disable for systems wihto


From: Ilya Maximets
Subject: Re: [Qemu-devel] [PATCH v2 1/4] hostmem-memfd: disable for systems wihtout sealing support
Date: Tue, 11 Dec 2018 13:29:19 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1

On 10.12.2018 19:18, Igor Mammedov wrote:
> On Tue, 27 Nov 2018 16:50:27 +0300
> Ilya Maximets <address@hidden> wrote:
> 
> s/wihtout/without/ in subj
> 
>> If seals are not supported, memfd_create() will fail.
>> Furthermore, there is no way to disable it in this case because
>> '.seal' property is not registered.
>>
>> This issue leads to vhost-user-test failures on RHEL 7.2:
>>
>>   qemu-system-x86_64: -object memory-backend-memfd,id=mem,size=2M,: \
>>                       failed to create memfd: Invalid argument
>>
>> and actually breaks the feature on such systems.
>>
>> Let's restrict memfd backend to systems with sealing support.
>>
>> Signed-off-by: Ilya Maximets <address@hidden>
>> ---
>>  backends/hostmem-memfd.c | 18 ++++++++----------
>>  tests/vhost-user-test.c  |  6 +++---
>>  2 files changed, 11 insertions(+), 13 deletions(-)
>>
>> diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c
>> index b6836b28e5..a3455da9c9 100644
>> --- a/backends/hostmem-memfd.c
>> +++ b/backends/hostmem-memfd.c
>> @@ -156,15 +156,13 @@ memfd_backend_class_init(ObjectClass *oc, void *data)
>>                                                "Huge pages size (ex: 2M, 
>> 1G)",
>>                                                &error_abort);
>>      }
>> -    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
>> -        object_class_property_add_bool(oc, "seal",
>> -                                       memfd_backend_get_seal,
>> -                                       memfd_backend_set_seal,
>> -                                       &error_abort);
>> -        object_class_property_set_description(oc, "seal",
>> -                                              "Seal growing & shrinking",
>> -                                              &error_abort);
>> -    }
>> +    object_class_property_add_bool(oc, "seal",
>> +                                   memfd_backend_get_seal,
>> +                                   memfd_backend_set_seal,
>> +                                   &error_abort);
>> +    object_class_property_set_description(oc, "seal",
>> +                                          "Seal growing & shrinking",
>> +                                          &error_abort);
>>  }
>>  
>>  static const TypeInfo memfd_backend_info = {
>> @@ -177,7 +175,7 @@ static const TypeInfo memfd_backend_info = {
>>  
>>  static void register_types(void)
>>  {
>> -    if (qemu_memfd_check(0)) {
>> +    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
>>          type_register_static(&memfd_backend_info);
> that would either lead to not clear error that type doesn't exist.
> it could be better to report sensible error from memfd_backend_memory_alloc() 
> if
> the feature is required but not supported by host 

I'm not sure, but this could break the libvirt capability discovering.

Current patch changes behaviour probably only for RHEL/CentOS 7.2.
All other systems are not affected. Do you think that we need to
change behaviour on all the systems?

> 
>>      }
>>  }
>> diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
>> index 45d58d8ea2..e3e9a33580 100644
>> --- a/tests/vhost-user-test.c
>> +++ b/tests/vhost-user-test.c
>> @@ -169,7 +169,7 @@ static char *get_qemu_cmd(TestServer *s,
>>                            int mem, enum test_memfd memfd, const char 
>> *mem_path,
>>                            const char *chr_opts, const char *extra)
>>  {
>> -    if (memfd == TEST_MEMFD_AUTO && qemu_memfd_check(0)) {
>> +    if (memfd == TEST_MEMFD_AUTO && qemu_memfd_check(MFD_ALLOW_SEALING)) {
>>          memfd = TEST_MEMFD_YES;
>>      }
>>  
>> @@ -903,7 +903,7 @@ static void test_multiqueue(void)
>>      s->queues = 2;
>>      test_server_listen(s);
>>  
>> -    if (qemu_memfd_check(0)) {
>> +    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
>>          cmd = g_strdup_printf(
>>              QEMU_CMD_MEMFD QEMU_CMD_CHR QEMU_CMD_NETDEV ",queues=%d "
>>              "-device virtio-net-pci,netdev=net0,mq=on,vectors=%d",
>> @@ -963,7 +963,7 @@ int main(int argc, char **argv)
>>      /* run the main loop thread so the chardev may operate */
>>      thread = g_thread_new(NULL, thread_function, loop);
>>  
>> -    if (qemu_memfd_check(0)) {
>> +    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
>>          qtest_add_data_func("/vhost-user/read-guest-mem/memfd",
>>                              GINT_TO_POINTER(TEST_MEMFD_YES),
>>                              test_read_guest_mem);
> 
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]