On 10/11/19 1:41 PM, Mina Almasry wrote:
On Fri, Oct 11, 2019 at 12:10 PM Mina Almasry almasrymina@google.com wrote:
On Mon, Sep 23, 2019 at 10:47 AM Mike Kravetz mike.kravetz@oracle.com wrote:
On 9/19/19 3:24 PM, Mina Almasry wrote:
Mike, note your suggestion above to check if the page hugetlb_cgroup is null doesn't work if we want to keep the current counter working the same: the page will always have a hugetlb_cgroup that points that contains the old counter. Any ideas how to apply this new counter behavior to a private NORESERVE mappings? Is there maybe a flag I can set on the pages at allocation time that I can read on free time to know whether to uncharge the hugetlb_cgroup or not?
Reading the code and asking around a bit, it seems the pointer to the hugetlb_cgroup is in page[2].private. Is it reasonable to use page[3].private to store the hugetlb_cgroup to uncharge for the new counter and increment HUGETLB_CGROUP_MIN_ORDER to 3? I think that would solve my problem. When allocating a private NORESERVE page, set page[3].private to the hugetlb_cgroup to uncharge, then on free_huge_page, check page[3].private, if it is non-NULL, uncharge the new counter on it.
Sorry for not responding sooner. This approach should work, and it looks like you have a v6 of the series. I'll take a look.