Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 07 Jan 2018 19:30:04 +0100
From:      "Kristof Provost" <kp@FreeBSD.org>
To:        rgrimes@freebsd.org
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r327676 - head/sys/compat/linuxkpi/common/include/linux
Message-ID:  <219974D5-0240-49D9-8DE4-C1FBCEF74776@FreeBSD.org>
In-Reply-To: <201801071802.w07I2YEB017699@pdx.rh.CN85.dnsmgr.net>
References:  <201801071802.w07I2YEB017699@pdx.rh.CN85.dnsmgr.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 7 Jan 2018, at 19:02, Rodney W. Grimes wrote:
> [ Charset UTF-8 unsupported, converting... ]
>> 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
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>> --- 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=E2=80=99d have to be split up into multiple li=
nes =

then.
I thought it=E2=80=99d be more readable as a function.
It=E2=80=99s an inline function, so it won=E2=80=99t actually use stack s=
pace in =

practice.
Also, it used to call kmalloc(), which is also an inline function, so at =

worst we=E2=80=99ve traded one function for another.

Regards,
Kristof



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?219974D5-0240-49D9-8DE4-C1FBCEF74776>