On Fri, Jul 11, 2025 at 05:39:39PM +0200, David Hildenbrand wrote:
>On 04.06.25 10:34, Wei Yang wrote:
>> On Wed, Jun 04, 2025 at 08:21:45AM +0000, Wei Yang wrote:
>> [...]
>> > +int try_to_move_page(char *region)
>> > +{
>> > + int ret;
>> > + int node;
>> > + int status = 0;
>> > +
>> > + ksft_print_msg("worker %d move_pages of content: %.15s\n", getpid(),
>> > region);
>>
>> One thing confused me here.
>>
>> If I don't access region here, the following move_pages() would report
>> -ENOENT occationally. The reason is do_pages_stat_array() ->
>> folio_walk_start() returns NULL.
>
>Right, the pages were not faulted in. The man page mentions that as
>
>"-ENOENT: The page is not present."
>
Thanks I see the man page, but from the code point of view, I don't follow it.
The move_pages() return -ENOENT in a child process, and the child duplicate it
memory space during fork().
dup_mmap()
for_each_vma()
copy_page_range()
...
copy_pte_range() -> copy_present_ptes()
__copy_present_ptes()
set_ptes()
Even we map the range by MAP_SHARED, we don't need to wrprotect it.
But we still set_ptes() in the child process page table.
So it looks the child has prepared the page table and not need to fault in to
setup it.
Do I miss something?
>--
>Cheers,
>
>David / dhildenb
--
Wei Yang
Help you, Help me