On Fri, Apr 25, 2025 at 10:17:13AM +0200, David Hildenbrand wrote:
> The "memramp() shrinking" scenario no longer applies, so let's remove
> that now-unnecessary handling.

I wonder if we could remove even more of the code here given the
simplifications here? But not a big deal.

>
> Signed-off-by: David Hildenbrand <da...@redhat.com>

More lovely removal...

Reviewed-by: Lorenzo Stoakes <lorenzo.stoa...@oracle.com>

> ---
>  arch/x86/mm/pat/memtype_interval.c | 44 ++++--------------------------
>  1 file changed, 6 insertions(+), 38 deletions(-)
>
> diff --git a/arch/x86/mm/pat/memtype_interval.c 
> b/arch/x86/mm/pat/memtype_interval.c
> index 645613d59942a..9d03f0dbc4715 100644
> --- a/arch/x86/mm/pat/memtype_interval.c
> +++ b/arch/x86/mm/pat/memtype_interval.c
> @@ -49,26 +49,15 @@ INTERVAL_TREE_DEFINE(struct memtype, rb, u64, 
> subtree_max_end,
>
>  static struct rb_root_cached memtype_rbroot = RB_ROOT_CACHED;
>
> -enum {
> -     MEMTYPE_EXACT_MATCH     = 0,
> -     MEMTYPE_END_MATCH       = 1
> -};
> -
> -static struct memtype *memtype_match(u64 start, u64 end, int match_type)
> +static struct memtype *memtype_match(u64 start, u64 end)
>  {
>       struct memtype *entry_match;
>
>       entry_match = interval_iter_first(&memtype_rbroot, start, end-1);
>
>       while (entry_match != NULL && entry_match->start < end) {
> -             if ((match_type == MEMTYPE_EXACT_MATCH) &&
> -                 (entry_match->start == start) && (entry_match->end == end))
> -                     return entry_match;
> -
> -             if ((match_type == MEMTYPE_END_MATCH) &&
> -                 (entry_match->start < start) && (entry_match->end == end))
> +             if (entry_match->start == start && entry_match->end == end)
>                       return entry_match;
> -
>               entry_match = interval_iter_next(entry_match, start, end-1);
>       }
>
> @@ -132,32 +121,11 @@ struct memtype *memtype_erase(u64 start, u64 end)
>  {
>       struct memtype *entry_old;
>
> -     /*
> -      * Since the memtype_rbroot tree allows overlapping ranges,
> -      * memtype_erase() checks with EXACT_MATCH first, i.e. free
> -      * a whole node for the munmap case.  If no such entry is found,
> -      * it then checks with END_MATCH, i.e. shrink the size of a node
> -      * from the end for the mremap case.
> -      */
> -     entry_old = memtype_match(start, end, MEMTYPE_EXACT_MATCH);
> -     if (!entry_old) {
> -             entry_old = memtype_match(start, end, MEMTYPE_END_MATCH);
> -             if (!entry_old)
> -                     return ERR_PTR(-EINVAL);
> -     }
> -
> -     if (entry_old->start == start) {
> -             /* munmap: erase this node */
> -             interval_remove(entry_old, &memtype_rbroot);
> -     } else {
> -             /* mremap: update the end value of this node */
> -             interval_remove(entry_old, &memtype_rbroot);
> -             entry_old->end = start;
> -             interval_insert(entry_old, &memtype_rbroot);
> -
> -             return NULL;
> -     }
> +     entry_old = memtype_match(start, end);
> +     if (!entry_old)
> +             return ERR_PTR(-EINVAL);
>
> +     interval_remove(entry_old, &memtype_rbroot);
>       return entry_old;
>  }
>
> --
> 2.49.0
>

Reply via email to