svn commit: r327676 - head/sys/compat/linuxkpi/common/include/linux
Rodney W. Grimes
freebsd at pdx.rh.CN85.dnsmgr.net
Sun Jan 7 18:37:44 UTC 2018
> On 7 Jan 2018, at 19:02, Rodney W. Grimes wrote:
> >> Author: kp
> >> Date: Sun Jan 7 13:39:12 2018
> >> New Revision: 327676
> >> URL: https://svnweb.freebsd.org/changeset/base/327676
> >>
> >> Log:
> >> linuxkpi: Implement kcalloc() based on mallocarray()
> >>
> >> This means we now get integer overflow protection, which Linux code
> >> might expect as it is also provided by kcalloc() in Linux.
> >>
> >> Modified:
> >> head/sys/compat/linuxkpi/common/include/linux/slab.h
> >>
> >> Modified: head/sys/compat/linuxkpi/common/include/linux/slab.h
> >> ==============================================================================
> >> --- head/sys/compat/linuxkpi/common/include/linux/slab.h Sun Jan 7
> >> 13:35:15 2018 (r327675)
> >> +++ head/sys/compat/linuxkpi/common/include/linux/slab.h Sun Jan 7
> >> 13:39:12 2018 (r327676)
> >> @@ -46,7 +46,6 @@ MALLOC_DECLARE(M_KMALLOC);
> >> #define kzalloc(size, flags) kmalloc(size, (flags) | __GFP_ZERO)
> >> #define kzalloc_node(size, flags, node) kmalloc(size, (flags) |
> >> __GFP_ZERO)
> >> #define kfree_const(ptr) kfree(ptr)
> >> -#define kcalloc(n, size, flags) kmalloc((n) * (size),
> >> (flags) | __GFP_ZERO)
> >
> > Would not:
> > #define kcalloc(n, size, flags) mallocarray(mallocarray((n),
> > (size), M_KMALLOC, linux_check_m_flags((flags | __GFP_ZERO))
> > work just fine, saving a call and stack use of about framesize + 32
> > bytes?
> >
> >
> It would also work, but it?d have to be split up into multiple lines
> then.
But it would retain the direct macro form, your change changes it
from a #define which is evaluated at pre proc time to a function
call that is evaluated at compile time. The resulting code from
a -O0 well be different because of this.
> I thought it?d be more readable as a function.
If that is the only reason I would rather see it retain the
same form as all the other allocs.
> It?s an inline function, so it won?t actually use stack space in
> practice.
That depends on compiler and optimization levels.
> Also, it used to call kmalloc(), which is also an inline function, so at
> worst we?ve traded one function for another.
I am not sure, well the inlining of all compilers unwrap 2 levels?
--
Rod Grimes rgrimes at freebsd.org
More information about the svn-src-all
mailing list