Skip to content
  • Igor Mammedov's avatar
    4ebc74db
    hostmem: fix strict bind policy · 4ebc74db
    Igor Mammedov authored
    
    
    When option -mem-prealloc is used with one or more memory-backend
    objects, created backends may not obey configured bind policy or
    creation may fail after kernel attempts to move pages according
    to bind policy.
    Reason is in file_ram_alloc(), which will pre-allocate
    any descriptor based RAM if global mem_prealloc != 0 and that
    happens way before bind policy is applied to memory range.
    
    One way to fix it would be to extend memory_region_foo() API
    and add more invariants that could broken later due implicit
    dependencies that's hard to track.
    
    Another approach is to drop adhoc main RAM allocation and
    consolidate it around memory-backend. That allows to have
    single place that allocates guest RAM (main and memdev)
    in the same way and then global mem_prealloc could be
    replaced by backend's property[s] that will affect created
    memory-backend objects but only in correct order this time.
    
    With main RAM now converted to hostmem backends, there is no
    point in keeping global mem_prealloc around, so alias
     -mem-prealloc to "memory-backend.prealloc=on"
    machine compat[*] property and make mem_prealloc a local
    variable to only stir registration of compat property.
    
    *) currently user accessible -global works only with DEVICE
       based objects and extra work is needed to make it work
       with hostmem backends. But that is convenience option
       and out of scope of this already huge refactoring.
       Hence machine compat properties were used.
    
    Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Message-Id: <20200219160953.13771-78-imammedo@redhat.com>
    4ebc74db
    hostmem: fix strict bind policy
    Igor Mammedov authored
    
    
    When option -mem-prealloc is used with one or more memory-backend
    objects, created backends may not obey configured bind policy or
    creation may fail after kernel attempts to move pages according
    to bind policy.
    Reason is in file_ram_alloc(), which will pre-allocate
    any descriptor based RAM if global mem_prealloc != 0 and that
    happens way before bind policy is applied to memory range.
    
    One way to fix it would be to extend memory_region_foo() API
    and add more invariants that could broken later due implicit
    dependencies that's hard to track.
    
    Another approach is to drop adhoc main RAM allocation and
    consolidate it around memory-backend. That allows to have
    single place that allocates guest RAM (main and memdev)
    in the same way and then global mem_prealloc could be
    replaced by backend's property[s] that will affect created
    memory-backend objects but only in correct order this time.
    
    With main RAM now converted to hostmem backends, there is no
    point in keeping global mem_prealloc around, so alias
     -mem-prealloc to "memory-backend.prealloc=on"
    machine compat[*] property and make mem_prealloc a local
    variable to only stir registration of compat property.
    
    *) currently user accessible -global works only with DEVICE
       based objects and extra work is needed to make it work
       with hostmem backends. But that is convenience option
       and out of scope of this already huge refactoring.
       Hence machine compat properties were used.
    
    Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Message-Id: <20200219160953.13771-78-imammedo@redhat.com>
Loading