Re: [RFC][PATCH] uprobe: support for private hugetlb mappings

David Hildenbrand
2024-04-24T21:00:17Z

On 24.04.24 22:44, Guillaume Morin wrote:
> On 24 Apr 22:09, David Hildenbrand wrote:
>>>> Let me try to see if we can get this done cleaner.
>>>>
>>>> One ugly part (in general here) is the custom page replacement in the
>>>> registration part.
>>>>
>>>> We are guaranteed to have a MAP_PRIVATE mapping. Instead of replacing pages
>>>> ourselves (which we likely shouldn't do ...) ... maybe we could use
>>>> FAULT_FLAG_UNSHARE faults such that we will get an anonymous folio
>>>> populated. (like KSM does nowadays)
>>>>
>>>> Punching FOLL_PIN|FOLL_LONGTERM into GUP would achieve the same thing, but
>>>> using FOLL_WRITE would not work on many file systems. So maybe we have to
>>>> trigger an unsharing fault ourselves.
>>
>> ^ realizing that we already use FOLL_FORCE, so we can just use FOLL_WRITE to
>> break COW.
>
> It was never clear to me why uprobes was not doing FOLL_WRITE in the
> first place, I must say.

It's quite dated code ...

The use of FOLL_FORCE really is ugly here. When registering, we require
VM_WRITE but ... when unregistering, we don't ...

>
> One issue here is that FOLL_FORCE|FOLL_WRITE is not implemented for
> hugetlb mappings. However this was also on my TODO and I have a draft
> patch that implements it.

Yes, I documented it back then and added sanity checks in GUP code to
fence it off. Shouldn't be too hard to implement (famous last words) and
would be the cleaner thing to use here once I manage to switch over to
FOLL_WRITE|FOLL_FORCE to break COW.

--
Cheers,

David / dhildenb