From: Catalin Marinas <catalin.marinas@arm.com>
To: Patrick Wang <patrick.wang.shcn@gmail.com>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, yee.lee@mediatek.com
Subject: Re: [PATCH v2 4/4] mm: kmemleak: kmemleak_*_phys() set address type and check PA when scan
Date: Mon, 6 Jun 2022 16:29:59 +0100 [thread overview]
Message-ID: <Yp4dd2vvO49BRaj3@arm.com> (raw)
In-Reply-To: <20220603035415.1243913-5-patrick.wang.shcn@gmail.com>
On Fri, Jun 03, 2022 at 11:54:15AM +0800, Patrick Wang wrote:
> diff --git a/mm/kmemleak.c b/mm/kmemleak.c
> index 246a70b7218f..62d1ad8f8a44 100644
> --- a/mm/kmemleak.c
> +++ b/mm/kmemleak.c
> @@ -1156,8 +1156,12 @@ EXPORT_SYMBOL(kmemleak_no_scan);
> void __ref kmemleak_alloc_phys(phys_addr_t phys, size_t size, int min_count,
> gfp_t gfp)
> {
> - if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn)
> - kmemleak_alloc(__va(phys), size, min_count, gfp);
> + pr_debug("%s(0x%pa, %zu, %d)\n", __func__, &phys, size, min_count);
> +
> + if (kmemleak_enabled && !min_count)
> + /* create object with OBJECT_PHYS flag */
> + create_object((unsigned long)phys, size, min_count,
> + gfp, true);
> }
With an early patch, just drop min_count altogether from this API,
assume 0.
> EXPORT_SYMBOL(kmemleak_alloc_phys);
>
> @@ -1170,8 +1174,10 @@ EXPORT_SYMBOL(kmemleak_alloc_phys);
> */
> void __ref kmemleak_free_part_phys(phys_addr_t phys, size_t size)
> {
> - if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn)
> - kmemleak_free_part(__va(phys), size);
> + pr_debug("%s(0x%pa)\n", __func__, &phys);
> +
> + if (kmemleak_enabled)
> + delete_object_part((unsigned long)phys, size, true);
> }
> EXPORT_SYMBOL(kmemleak_free_part_phys);
>
> @@ -1182,8 +1188,10 @@ EXPORT_SYMBOL(kmemleak_free_part_phys);
> */
> void __ref kmemleak_not_leak_phys(phys_addr_t phys)
> {
> - if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn)
> - kmemleak_not_leak(__va(phys));
> + pr_debug("%s(0x%pa)\n", __func__, &phys);
> +
> + if (kmemleak_enabled)
> + make_gray_object((unsigned long)phys, true);
> }
> EXPORT_SYMBOL(kmemleak_not_leak_phys);
This function doesn't have any callers, so please remove it.
> @@ -1194,8 +1202,10 @@ EXPORT_SYMBOL(kmemleak_not_leak_phys);
> */
> void __ref kmemleak_ignore_phys(phys_addr_t phys)
> {
> - if (PHYS_PFN(phys) >= min_low_pfn && PHYS_PFN(phys) < max_low_pfn)
> - kmemleak_ignore(__va(phys));
> + pr_debug("%s(0x%pa)\n", __func__, &phys);
> +
> + if (kmemleak_enabled)
> + make_black_object((unsigned long)phys, true);
> }
> EXPORT_SYMBOL(kmemleak_ignore_phys);
Ah, that's still in use and we do need make_black_object(), contrary to
what I commented on a previous patch. We can still avoid changing
make_gray_object().
(we could replace the kmemleak_ignore_phys() calls
kmemleak_free_part_phys() but that's not in line with what we do for the
virtual objects)
> @@ -1468,6 +1478,17 @@ static void kmemleak_scan(void)
> dump_object_info(object);
> }
> #endif
> +
> + /* ignore objects outside lowmem (paint them black) */
> + if ((object->flags & OBJECT_PHYS) &&
> + !(object->flags & OBJECT_NO_SCAN)) {
> + unsigned long phys = object->pointer;
> +
> + if (PHYS_PFN(phys) < min_low_pfn ||
> + PHYS_PFN(phys + object->size) >= max_low_pfn)
> + __paint_it(object, KMEMLEAK_BLACK);
> + }
> +
> /* reset the reference count (whiten the object) */
> object->count = 0;
> if (color_gray(object) && get_object(object))
This looks fine.
--
Catalin
next prev parent reply other threads:[~2022-06-06 15:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-03 3:54 [PATCH v2 0/4] mm: kmemleak: store objects allocated with physical address separately and check when scan Patrick Wang
2022-06-03 3:54 ` [PATCH v2 1/4] mm: kmemleak: add OBJECT_PHYS flag for objects allocated with physical address Patrick Wang
2022-06-06 11:55 ` Catalin Marinas
2022-06-07 14:32 ` Patrick Wang
2022-06-09 9:54 ` Catalin Marinas
2022-06-03 3:54 ` [PATCH v2 2/4] mm: kmemleak: add rbtree " Patrick Wang
2022-06-06 14:38 ` Catalin Marinas
2022-06-07 14:34 ` Patrick Wang
2022-06-03 3:54 ` [PATCH v2 3/4] mm: kmemleak: handle address stored in object based on its type Patrick Wang
2022-06-06 15:01 ` Catalin Marinas
2022-06-07 14:36 ` Patrick Wang
2022-06-03 3:54 ` [PATCH v2 4/4] mm: kmemleak: kmemleak_*_phys() set address type and check PA when scan Patrick Wang
2022-06-06 15:29 ` Catalin Marinas [this message]
2022-06-07 14:37 ` Patrick Wang
2022-06-03 11:01 ` [PATCH v2 0/4] mm: kmemleak: store objects allocated with physical address separately and check " Catalin Marinas
2022-06-04 3:01 ` patrick wang
2022-06-08 2:46 ` Kuan-Ying Lee
2022-06-08 23:44 ` patrick wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yp4dd2vvO49BRaj3@arm.com \
--to=catalin.marinas@arm.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=patrick.wang.shcn@gmail.com \
--cc=yee.lee@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.