tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: static functions are your friends (Was GPIO revisited)
On Sun, 9 Aug 2009 19:03:26 +0200
Marc Balmer <marc%msys.ch@localhost> wrote:
> >>>> One more comment...
> >>>>
> >>>>> +int gpio_pinbyname(struct gpio_softc *, char *gp_name);
> >>>>> +
> >>>>> +/* Old API version */
> >>>>> +int gpio_ioctl_oapi(struct gpio_softc *, u_long cmd, void
> >>>>> *data, int flag,
> >>>>> + int pinset);
> >>>>>
> >>>>> KNF: no variables names in the declaration.
> >>>>> Also, any reason why these are not static?
> >>>>
> >>>> While it certainly can make sense to declare functions static in
> >>>> some userland programs for the sole reason to include a command
> >>>> in a crunched binary, it does not make sense in kernel code; much
> >>>> to the contrary, it makes debugging harder.
> >>>
> >>> static functions make great sense in kernel code. In fact, we
> >>> have too many public functions as is and even more of the kernel
> >>> should be using static.
> >>>
> >>> When a component only has a relatively small on entry points, it
> >>> allows the compiler to treat the component as one single unit to
> >>> compiled. This allows it to inline, follow the scope of
> >>> variables, and lots of other thing to generate better code.
> >>>
> >>> The other reason to use static it prevents code from calling your
> >>> function that should never have never called it in the first place.
> >>
> >> I want to quickly come back to this and explain my reasoning for
> >> not making all functions static in the kernel, although I am
> >> totally aware of all the positive effects of static in general.
> >>
> >> I do mostly low-level driver development, something where you see
> >> the ddb prompt more often than you like... Now with the functions
> >> not being declared static, the trace command is my friend, I see
> >> immediately in which function my driver crashed, this is an immense
> >> debugging aid.
> >>
> >> I took the time to write a function that crahses the kernel on
> >> purpose. Compiled as non static function, ddb showed me the
> >> function name and function call trace with proper function names.
> >> Quite easy to locate the faulty spot. To complete my test, I
> >> compiled the very same code with all functions declared static.
> >> Now the ddb trace does not show me the function names, making it a
> >> lot harder to locate the faulty spot.
> >
> >
> > Can you show code which worked and not worked with static function
> > declarations. I'm pretty sure that this works
> > for me for a long time.
>
> We can consider this issue solved. I can declare my functions as
> "__noinline static ...." and have both the benefits of a static
> declaration and the function name show up in ddb's 'trace' command.
>
> I will slowly convert my code to this idiom, if no one objects.
And later on we could unify this as a macro maybe.
--
Adam Hoka <Adam.Hoka%Gmail.com@localhost>
Adam Hoka <ahoka%NetBSD.org@localhost>
Adam Hoka <ahoka%MirBSD.de@localhost>
Home |
Main Index |
Thread Index |
Old Index