[PATCH 6/7] RAMBlock: make guest_memfd require coordinate discard

Chenyi Qiang posted 7 patches 5 months ago
There is a newer version of this series
[PATCH 6/7] RAMBlock: make guest_memfd require coordinate discard
Posted by Chenyi Qiang 5 months ago
As guest_memfd is now managed by guest_memfd_manager with
RamDiscardManager, only block uncoordinated discard.

Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
---
 system/physmem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/system/physmem.c b/system/physmem.c
index 532182a6dd..585090b063 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1872,7 +1872,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp)
         assert(kvm_enabled());
         assert(new_block->guest_memfd < 0);
 
-        ret = ram_block_discard_require(true);
+        ret = ram_block_coordinated_discard_require(true);
         if (ret < 0) {
             error_setg_errno(errp, -ret,
                              "cannot set up private guest memory: discard currently blocked");
-- 
2.43.5
Re: [PATCH 6/7] RAMBlock: make guest_memfd require coordinate discard
Posted by David Hildenbrand 4 months ago
On 13.12.24 08:08, Chenyi Qiang wrote:
> As guest_memfd is now managed by guest_memfd_manager with
> RamDiscardManager, only block uncoordinated discard.
> 
> Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
> ---
>   system/physmem.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/system/physmem.c b/system/physmem.c
> index 532182a6dd..585090b063 100644
> --- a/system/physmem.c
> +++ b/system/physmem.c
> @@ -1872,7 +1872,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp)
>           assert(kvm_enabled());
>           assert(new_block->guest_memfd < 0);
>   
> -        ret = ram_block_discard_require(true);
> +        ret = ram_block_coordinated_discard_require(true);
>           if (ret < 0) {
>               error_setg_errno(errp, -ret,
>                                "cannot set up private guest memory: discard currently blocked");

Would that also unlock virtio-mem by accident?

-- 
Cheers,

David / dhildenb
Re: [PATCH 6/7] RAMBlock: make guest_memfd require coordinate discard
Posted by Chenyi Qiang 4 months ago
On 1/13/2025 6:56 PM, David Hildenbrand wrote:
> On 13.12.24 08:08, Chenyi Qiang wrote:
>> As guest_memfd is now managed by guest_memfd_manager with
>> RamDiscardManager, only block uncoordinated discard.
>>
>> Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
>> ---
>>   system/physmem.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/system/physmem.c b/system/physmem.c
>> index 532182a6dd..585090b063 100644
>> --- a/system/physmem.c
>> +++ b/system/physmem.c
>> @@ -1872,7 +1872,7 @@ static void ram_block_add(RAMBlock *new_block,
>> Error **errp)
>>           assert(kvm_enabled());
>>           assert(new_block->guest_memfd < 0);
>>   -        ret = ram_block_discard_require(true);
>> +        ret = ram_block_coordinated_discard_require(true);
>>           if (ret < 0) {
>>               error_setg_errno(errp, -ret,
>>                                "cannot set up private guest memory:
>> discard currently blocked");
> 
> Would that also unlock virtio-mem by accident?

Hum, that's true. At present, the rdm in MR can only point to one
instance, thus if we unlock virtio-mem and try to use it with
guest_memfd, it would trigger assert in
memory_region_set_ram_discard_manager().

Maybe we need to add some explicit check in virtio-mem to exclude it
with guest_memfd at present?

>