bug-hurd
[Top][All Lists]
Advanced

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

Re: [RFC PATCH 4/7] vm: Allow coalescing entries forward


From: Samuel Thibault
Subject: Re: [RFC PATCH 4/7] vm: Allow coalescing entries forward
Date: Mon, 3 Jul 2023 02:18:33 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Sergey Bugaev, le lun. 26 juin 2023 14:26:53 +0300, a ecrit:
> When entering an object into a map, try to extend the next entry
> backward, in addition to the previously existing attempt to extend the
> previous entry forward.
> ---
>  vm/vm_map.c | 39 +++++++++++++++++++++++++++++++++++----
>  1 file changed, 35 insertions(+), 4 deletions(-)
> 
> diff --git a/vm/vm_map.c b/vm/vm_map.c
> index a41e6434..0d3b11f2 100644
> --- a/vm/vm_map.c
> +++ b/vm/vm_map.c
> @@ -992,6 +992,7 @@ kern_return_t vm_map_enter(
>       vm_inherit_t    inheritance)
>  {
>       vm_map_entry_t  entry;
> +     vm_map_entry_t  next_entry;
>       vm_offset_t     start;
>       vm_offset_t     end;
>       kern_return_t   result = KERN_SUCCESS;
> @@ -1012,6 +1013,7 @@ kern_return_t vm_map_enter(
>  
>               end = start + size;
>               *address = start;
> +             next_entry = entry->vme_next;
>       } else {
>               vm_map_entry_t          temp_entry;
>  
> @@ -1046,14 +1048,15 @@ kern_return_t vm_map_enter(
>                       RETURN(KERN_NO_SPACE);
>  
>               entry = temp_entry;
> +             next_entry = entry->vme_next;
>  
>               /*
>                *      ...     the next region doesn't overlap the
>                *              end point.
>                */
>  
> -             if ((entry->vme_next != vm_map_to_entry(map)) &&
> -                 (entry->vme_next->vme_start < end))
> +             if ((next_entry != vm_map_to_entry(map)) &&
> +                 (next_entry->vme_start < end))
>                       RETURN(KERN_NO_SPACE);
>       }
>  
> @@ -1069,8 +1072,7 @@ kern_return_t vm_map_enter(
>  
>       /*
>        *      See whether we can avoid creating a new entry (and object) by
> -      *      extending one of our neighbors.  [So far, we only attempt to
> -      *      extend from below.]
> +      *      extending one of our neighbors.
>        */
>  
>       if ((entry != vm_map_to_entry(map)) &&
> @@ -1101,6 +1103,35 @@ kern_return_t vm_map_enter(
>                       RETURN(KERN_SUCCESS);
>               }
>       }
> +     if ((next_entry != vm_map_to_entry(map)) &&
> +         (next_entry->vme_start == end) &&
> +         (!next_entry->is_shared) &&
> +         (!next_entry->is_sub_map) &&
> +         (next_entry->inheritance == inheritance) &&
> +         (next_entry->protection == cur_protection) &&
> +         (next_entry->max_protection == max_protection) &&
> +         (next_entry->wired_count == 0) &&
> +         (next_entry->projected_on == 0)) {
> +             if (vm_object_coalesce(object,
> +                     next_entry->object.vm_object,
> +                     offset,
> +                     next_entry->offset,
> +                     size,
> +                     (vm_size_t)(next_entry->vme_end - 
> next_entry->vme_start))) {
> +
> +                     /*
> +                      *      Coalesced the two objects - can extend
> +                      *      the next map entry to include the
> +                      *      new range.
> +                      */
> +                     map->size += size;
> +                     next_entry->vme_start = start;
> +                     next_entry->offset -= size;
> +                     vm_map_gap_update(&map->hdr, entry);
> +                     vm_object_deallocate(object);
> +                     RETURN(KERN_SUCCESS);
> +             }
> +     }
>  
>       /*
>        *      Create a new entry
> -- 
> 2.41.0
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

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