Date: Sat, 25 Oct 2014 12:22:34 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Mateusz Guzik <mjguzik@gmail.com> Cc: freebsd-arch@freebsd.org Subject: Re: syscalls from loadable modules compiled in statically into the kernel Message-ID: <20141025092234.GI1877@kib.kiev.ua> In-Reply-To: <20141025022808.GA14551@dft-labs.eu> References: <20141025022808.GA14551@dft-labs.eu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Oct 25, 2014 at 04:28:09AM +0200, Mateusz Guzik wrote:
> The kernel has the following mechanism:
>
> int
> syscall_thread_enter(struct thread *td, struct sysent *se)
> {
> u_int32_t cnt, oldcnt;
>
> do {
> oldcnt = se->sy_thrcnt;
> if ((oldcnt & SY_THR_STATIC) != 0)
> return (0);
> if ((oldcnt & (SY_THR_DRAINING | SY_THR_ABSENT)) != 0)
> return (ENOSYS);
> cnt = oldcnt + SY_THR_INCR;
> } while (atomic_cmpset_acq_32(&se->sy_thrcnt, oldcnt, cnt) == 0);
> return (0);
> }
>
> Except it turns out that it is used even if given module (here: sysvshm) is
> compiled in statically.
>
> So my proposal is to give modules an easy way to tell whether they got
> compiled in and extend syscall_register interface so that it would allow
> registering static syscalls.
>
> The latter could also be used by modules which are loadable, but don't
> support unloads.
>
> I don't have any good idea how to provide aforementioned detection
> method though.
The method would be a combination of some change to syscall_register()
and #ifdef KLD_MODULE. Look at the sys/conf.h MAKEDEV_ETERNAL_KLD
definition, which provides similar in spirit optimization for
non-destructable cdevs.
>
> Also, please see https://reviews.freebsd.org/D1007 which moves
> SY_THR_STATIC check to an inline function, saving us 2 function calls on
> each syscall.
Did you benchmarked this ? I dislike the code bloat.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141025092234.GI1877>
