2006-11-25 19:12:04

by David Johnson

[permalink] [raw]
Subject: Changing sysctl values within the kernel?

Hi all,

I'm working on a kernel module and want to change sysctl values (specifically
stop-a and printk) in response to a hardware event.

Is there an accepted way of setting sysctl values within the kernel (I can't
seem to find any other module doing this), or is it a completely silly idea?

Would it perhaps be better to instead create a sysfs node and let a userspace
daemon worry about setting the sysctl values?

Any advice greatly appreciated!

David.


2006-11-26 20:38:21

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: Changing sysctl values within the kernel?

On Sat, Nov 25, 2006 at 07:11:48PM +0000, David Johnson wrote:
> I'm working on a kernel module and want to change sysctl values (specifically
> stop-a and printk) in response to a hardware event.
>
> Is there an accepted way of setting sysctl values within the kernel (I can't
> seem to find any other module doing this),

Yes. Next in-kernel module changing sysctls will do it via

stop_a_enabled = 1;
console_loglevel = 8;

(be sure, variables in question are EXPORT_SYMBOL'ed)

> or is it a completely silly idea?

Without more details it's hard to tell.

> Would it perhaps be better to instead create a sysfs node and let a userspace
> daemon worry about setting the sysctl values?

Now _this_ is silly. sysctls already live in /proc/sys/, so you can open(2)
/proc/sys/kernel/printk and write(2) to it.

2006-11-27 09:40:47

by David Johnson

[permalink] [raw]
Subject: Re: Changing sysctl values within the kernel?

On Sunday 26 November 2006 20:38, you wrote:
> On Sat, Nov 25, 2006 at 07:11:48PM +0000, David Johnson wrote:
> >
> > Is there an accepted way of setting sysctl values within the kernel (I
> > can't seem to find any other module doing this),
>
> Yes. Next in-kernel module changing sysctls will do it via
>
> stop_a_enabled = 1;
> console_loglevel = 8;
>
> (be sure, variables in question are EXPORT_SYMBOL'ed)
>

Bah, I never thought it would be that simple!

>
> > Would it perhaps be better to instead create a sysfs node and let a
> > userspace daemon worry about setting the sysctl values?
>
> Now _this_ is silly. sysctls already live in /proc/sys/, so you can open(2)
> /proc/sys/kernel/printk and write(2) to it.

OK, I'll give that a miss then ;-)

Thanks for your help!

David.