Hi Michal,

>> 
>> For direct-map domain with iommu on, after we get guest shm info from 
>> "kinfo",
>> we use "remove_shm_from_rangeset" to remove static shm.
>> 
>> For direct-map domain with iommu off, as static shm has already been taken
>> care of through reserved memory banks, we do nothing.
> Stale info given that shmem is no longer part of reserved memory banks. It's 
> been taken care
> of by removing shmem regions in find_unallocated_memory()

Sure, will amend for this:

>> 
>> +int __init remove_shm_from_rangeset(const struct kernel_info *kinfo,
>> +                                    struct rangeset *rangeset)
>> +{
>> +    const struct membanks *shm_mem = &kinfo->shm_mem.common;
>> +    unsigned int i;
>> +
>> +    /* Remove static shared memory regions */
>> +    for ( i = 0; i < shm_mem->nr_banks; i++ )
>> +    {
>> +        paddr_t start, end;
>> +        int res;
>> +
>> +        start = shm_mem->bank[i].start;
>> +        end = shm_mem->bank[i].start + shm_mem->bank[i].size - 1;
> If you look at other rangeset_remove_range use cases and error messages, 1 is 
> subtracted
> in PFN_DOWN() so that the error message contains end unchanged. Please adhere 
> to that so that
> printed messages are consistent.

Yes I will change it to have -1 inside PFN_DOWN(), here and in the other 
occurrences
>> 
>> +    /* Remove static shared memory regions */
>> +    res = remove_shm_from_rangeset(kinfo, guest_holes);
>> +    if ( res )
>> +        goto out;
>> +
> Could you please add a comment explaining here what's done below?

Is it ok something like this:

/*
 * Take the interval of memory starting from the first extended region bank
 * start address and ending to the end of the last extended region bank.
 * The interval will be passed to rangeset_report_ranges to allow it to
 * create, by the add_ext_regions callback, a set of extended memory region
 * banks from the guest_holes rangeset, which contains the original extended
 * memory region ranges where the static shared memory ranges are carved
 * out.
 */

>> +    i = ext_regions->nr_banks - 1;
>> +    start = ext_regions->bank[0].start;
>> +    end = ext_regions->bank[i].start + ext_regions->bank[i].size - 1;
>> +
>> +    /* Reset original extended regions to hold new value */
>> +    ext_regions->nr_banks = 0;
>> +    res = rangeset_report_ranges(guest_holes, PFN_DOWN(start), 
>> PFN_DOWN(end),
>> +                                 add_ext_regions, ext_regions);
>> +    if ( res )
>> +        ext_regions->nr_banks = 0;
>> +    else if ( !ext_regions->nr_banks )
>> +        res = -ENOENT;
>> +
>> + out:
>> +    rangeset_destroy(guest_holes);
>> +
>> +    return res;
>> +}
>> +
>> /*
>>  * Local variables:
>>  * mode: C
>> --
>> 2.34.1
>> 
> 
> ~Michal
> 

Cheers,
Luca

Reply via email to