Thread (28 messages) 28 messages, 11 authors, 2008-01-02

Re: [PATCH] Force UNIX domain sockets to be built in

From: Adrian Bunk <bunk@kernel.org>
Date: 2007-12-31 17:52:23
Also in: lkml

On Mon, Dec 31, 2007 at 04:19:23PM +0100, Bodo Eggert wrote:
On Mon, 31 Dec 2007, Adrian Bunk wrote:
quoted
On Mon, Dec 31, 2007 at 02:26:42PM +0100, Bodo Eggert wrote:
quoted
On Mon, 31 Dec 2007, Adrian Bunk wrote:
quoted
On Mon, Dec 31, 2007 at 01:09:43PM +0100, Bodo Eggert wrote:
quoted
quoted
quoted
quoted
As suggested by Adrian Bunk, UNIX domain sockets should always be built in 
on normal systems. This is especially true since udev needs these sockets
and fails to run if UNIX=m.

Signed-Off-By: Bodo Eggert <redacted>

---
Last minute change: I decided against making it a bool because embedded 
folks might depend on a small kernel image. Edited in the patch below.
...
Is this just a purely theoretical thought or is this a reasonable use 
case people actually use in practice?
 
For now, it's a theoretical thought, but having an embedded device, I can 
see the reason for $EVERYTHING=m there.
The only advantage I see is that the kernel image you have to flash 
can be made smaller - with the disadvantage that the running kernel
is bigger by more than 10%.

If you don't believe me, try it yourself:
Build all drivers statically into your kernel, and then compare the 
vmlinux sizes with CONFIG_MODULES=n and CONFIG_MODULES=y.
If you'd aim for a small kernel image, you would build anything as a module 
that is not requred for booting.
quoted
quoted
quoted
After all, changing it to a bool will allow us to make the kernel image 
for nearly everyone smaller by a few hundred bytes...
I can't see why optionally building it as a module would force us to make 
the kernel bigger. It may be a little more ugly to support =m, but thats it,
isn't it?
On architectures like x86 where __exit code is freed at runtime 
af_unix_exit() makes your kernel image (but not the running kernel) 
bigger.

With CONFIG_MODULES=y the 13 EXPORT_SYMBOL's that only exist for the 
theoretical possibility of CONIG_UNIX=m waste a few hundred bytes 
of memory.
#define m='m'
#if CONIG_UNIX=='m'
#define EXPORT_SYMBOL_AF_UNIX EXPORT_SYMBOL
#else
#define EXPORT_SYMBOL_AF_UNIX()
#endif
#undef m

You could also use "#if defined(C_U) && (C_U == m)".
Look at the number of exports in the kernel and the number of lines 
changed per months, and it becomes obvious that somwthing like that
would not be maintainable.

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help