Thread (18 messages) 18 messages, 5 authors, 2018-10-22

Re: [PATCH 2/3] printk: Add /sys/consoles/ interface

flat view

From: Petr Mladek <pmladek@suse.com>
Date: 2017-11-03 15:46:57
Also in: lkml

On Fri 2017-11-03 15:32:34, Kroah-Hartman wrote:
quoted
quoted
diff --git a/Documentation/ABI/testing/sysfs-consoles b/Documentation/ABI/testing/sysfs-consoles
new file mode 100644
index 0000000..6a1593e
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-consoles
@@ -0,0 +1,13 @@
+What:		/sys/consoles/
Eeek, what!
quoted
I rather add Greg in CC. I am not 100% sure that the top level
directory is the right thing to do.
Neither do I.
quoted
Alternative might be to hide this under /sys/kernel/consoles/.
No no no.
quoted
quoted
diff --git a/include/linux/console.h b/include/linux/console.h
index a5b5d79..76840be 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -148,6 +148,7 @@ struct console {
 	void	*data;
 	struct	 console *next;
 	int	level;
+	struct kobject *kobj;
Why are you using "raw" kobjects and not a "real" struct device?  This
is a device, use that interface instead please.
Hmm, struct console has a member

	struct tty_driver *(*device)(struct console *, int *);

but it is set only when the console has tty binding.
If you need a console 'bus' to place them on, fine, but the virtual bus
is probably best and simpler to use.

That is if you _really_ feel you need sysfs interaction with the console
layer (hint, I am not yet convinced...)
The purpose of this patch is to make a userfriendly interface
for setting console-specific loglevel (message filtering).

It curretnly uses kobject for creating a simple directory
structure under /sys/. It is inspired by /sys/power/, /sys/kernel/mm/,
/sys/kernel/debug/tracing/ stuff.

There are ideas to add more files that would allow to modify even the
global setting. This is currectly possible by the four numbers in
/proc/sys/kernel/printk. Nobody knows what the four numbers mean.
IMHO, the following interface would be easier to work with:

       /sys/console/loglevel
       /sys/console/min_loglevel
       /sys/condole/default_loglevel
quoted
	/*
	 * Find the related struct console a safe way. The kobject
	 * desctruction is asynchronous.
	 */
quoted
+	console_lock();
+	for_each_console(con) {
+		if (con->kobj == kobj) {
You are doing something wrong, go from kobj to your console directly,
the fact that you can not do that here is a _huge_ hint that your
structure is not correct.

Hint, it's not correct at all :)
I know that we are not following the original purpose of sysfs.
But there are more (mis)users.
Please cc: me on stuff like this if you want a review, and as you are
adding a random new sysfs root directory, please always cc: me on that
so I can talk you out of it...
Good to know.

Best Regards,
Petr
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help