From: Michal Hocko <mhocko@kernel.org>
To: Matthew Wilcox <willy@infradead.org>
Cc: lsf-pc@lists.linux-foundation.org, linux-mm@kvack.org
Subject: Re: [Lsf-pc] [LSF/MM TOPIC] Matthew's minor MM topics
Date: Tue, 23 Jan 2018 13:26:46 +0100 [thread overview]
Message-ID: <20180123122646.GJ1526@dhcp22.suse.cz> (raw)
In-Reply-To: <20180116141354.GB30073@bombadil.infradead.org>
On Tue 16-01-18 06:13:54, Matthew Wilcox wrote:
> (trying again with the right MM mailing list address. Sorry.)
>
> I have a number of things I'd like to discuss that are purely MM related.
> I don't know if any of them rise to the level of an entire session,
> but maybe lightning talks, or maybe we can dispose of them on the list
> before the summit.
>
> 1. GFP_DMA / GFP_HIGHMEM / GFP_DMA32
>
> The documentation is clear that only one of these three bits is allowed
> to be set. Indeed, we have code that checks that only one of these
> three bits is set. So why do we have three bits? Surely this encoding
> works better:
>
> 00b (normal)
> 01b GFP_DMA
> 10b GFP_DMA32
> 11b GFP_HIGHMEM
> (or some other clever encoding that maps well to the zone_type index)
Didn't you forget about movable zone? Anyway, if you can simplify this
thing I would be more than happy. GFP_ZONE_TABLE makes my head spin
anytime I dare to look.
> 2. kvzalloc_ab_c()
>
> We could bikeshed on this name all summit long, but the idea is to provide
> an equivalent of kvmalloc_array() which works for array-plus-header.
> These allocations are legion throughout the kernel. Here's the first
> one I found with a grep:
>
> drivers/vhost/vhost.c: newmem = kvzalloc(size + mem.nregions * sizeof(*m->regions), GFP_KERNEL);
>
> ... and, yep, that one's a security hole.
>
> The implementation is not hard, viz:
>
> +static inline void *kvzalloc_ab_c(size_t n, size_t size, size_t c, gfp_t flags)
> +{
> + if (size != 0 && n > (SIZE_MAX - c) / size)
> + return NULL;
> +
> + return kvmalloc(n * size + c, flags);
> +}
>
> but the name will tie us in knots and getting people to actually use
> it will be worse. (I actually stole the name from another project,
> but I can't find it now).
>
> We also need to go through and convert dozens of callers that are
> doing kvzalloc(a * b) into kvzalloc_array(a, b). Maybe we can ask for
> some coccinelle / smatch / checkpatch help here.
I do not see anything controversial here. Is there anything to be
discussed here? If there is a common pattern then a helper shouldn't be
a big deal, no?
> 3. Maybe we could rename kvfree() to just free()? Please? There's
> nothing special about it. One fewer thing for somebody to learn when
> coming fresh to kernel programming.
I guess one has to learn about kvmalloc already and kvfree is nicely
symmetric to it.
> 4. vmf_insert_(page|pfn|mixed|...)
>
> vm_insert_foo are invariably called from fault handlers, usually as
> the last thing we do before returning a VM_FAULT code. As such, why do
> they return an errno that has to be translated? We would be better off
> returning VM_FAULT codes from these functions.
Which tree are you looking at? git grep vmf_insert_ doesn't show much.
vmf_insert_pfn_p[mu]d and those already return VM_FAULT error code from
a quick look.
> Related, I'd like to introduce a new vm_fault_t typedef for unsigned
> int that indicates that the function returns VM_FAULT flags rather than
> an errno. We've had so many mistakes in this area.
This sounds like a reasonable thing to do.
--
Michal Hocko
SUSE Labs
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2018-01-23 12:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-16 14:13 Matthew Wilcox
2018-01-23 12:26 ` Michal Hocko [this message]
2018-01-23 20:48 ` [Lsf-pc] " Matthew Wilcox
2018-01-24 8:56 ` Michal Hocko
2018-01-29 12:37 ` Matthew Wilcox
2018-01-29 12:48 ` Michal Hocko
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=20180123122646.GJ1526@dhcp22.suse.cz \
--to=mhocko@kernel.org \
--cc=linux-mm@kvack.org \
--cc=lsf-pc@lists.linux-foundation.org \
--cc=willy@infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox