[PATCH v4] mm: introduce reference pages
David Hildenbrand
david at redhat.com
Mon Jul 19 13:47:45 PDT 2021
> +SYSCALL_DEFINE2(refpage_create, const void *__user, content, unsigned long,
> + flags)
> +{
> + unsigned long content_addr = (unsigned long)content;
> + struct page *userpage;
> + struct refpage_private_data *private_data;
> + int fd;
> +
> + if (flags != 0)
> + return -EINVAL;
> +
> + if ((content_addr & (PAGE_SIZE - 1)) != 0 ||
> + get_user_pages(content_addr, 1, 0, &userpage, 0) != 1)
> + return -EFAULT;
> +
> + private_data = kzalloc(sizeof(struct refpage_private_data), GFP_KERNEL);
> + if (!private_data) {
> + put_page(userpage);
> + return -ENOMEM;
> + }
> +
> + private_data->refpage = alloc_page(GFP_KERNEL);
> + if (!private_data->refpage) {
> + kfree(private_data);
> + put_page(userpage);
> + return -ENOMEM;
> + }
> +
> + copy_highpage(private_data->refpage, userpage);
> + arch_prep_refpage_private_data(private_data);
> + put_page(userpage);
> +
> + fd = anon_inode_getfd("[refpage]", &refpage_file_operations,
> + private_data, O_RDONLY | O_CLOEXEC);
> + if (fd < 0)
> + put_refpage_private_data(private_data);
> +
> + return fd;
> +}
>
Hi,
some questions:
1. is there any upper limit or can a simple process effectively flood
the system with alloc_page(GFP_KERNEL)? (does ulimit -n apply or is it
/proc/sys/fs/file-max)
2. Shouldn't there be a GFP_ACCOUNT or am I missing something important?
3. How does this interact with MADV_DONTNEED? I assume we'll be able to
zap the mapped refpage and on refault, we'll map in the refpage again,
correct?
--
Thanks,
David / dhildenb
More information about the linux-arm-kernel
mailing list