mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 23:23:03 +00:00
Revert "printk: Save console options for add_preferred_console_match()"
This reverts commit f03e8c1060
.
Let's roll back all of the serial core and printk console changes that
went into 6.10-rc1 as there still are problems with them that need to be
sorted out.
Link: https://lore.kernel.org/r/ZnpRozsdw6zbjqze@tlindgre-MOBL1
Reported-by: Petr Mladek <pmladek@suse.com>
Reported-by: Tony Lindgren <tony@atomide.com>
Cc: Jiri Slaby <jirislaby@kernel.org>
Cc: John Ogness <john.ogness@linutronix.de>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
64f9f010c6
commit
cc8d5a2f09
@ -60,9 +60,6 @@ static inline const char *printk_skip_headers(const char *buffer)
|
|||||||
#define CONSOLE_LOGLEVEL_DEFAULT CONFIG_CONSOLE_LOGLEVEL_DEFAULT
|
#define CONSOLE_LOGLEVEL_DEFAULT CONFIG_CONSOLE_LOGLEVEL_DEFAULT
|
||||||
#define CONSOLE_LOGLEVEL_QUIET CONFIG_CONSOLE_LOGLEVEL_QUIET
|
#define CONSOLE_LOGLEVEL_QUIET CONFIG_CONSOLE_LOGLEVEL_QUIET
|
||||||
|
|
||||||
int add_preferred_console_match(const char *match, const char *name,
|
|
||||||
const short idx);
|
|
||||||
|
|
||||||
extern int console_printk[];
|
extern int console_printk[];
|
||||||
|
|
||||||
#define console_loglevel (console_printk[0])
|
#define console_loglevel (console_printk[0])
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y = printk.o conopt.o
|
obj-y = printk.o
|
||||||
obj-$(CONFIG_PRINTK) += printk_safe.o nbcon.o
|
obj-$(CONFIG_PRINTK) += printk_safe.o nbcon.o
|
||||||
obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o
|
obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o
|
||||||
obj-$(CONFIG_PRINTK_INDEX) += index.o
|
obj-$(CONFIG_PRINTK_INDEX) += index.o
|
||||||
|
@ -1,146 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
|
||||||
/*
|
|
||||||
* Kernel command line console options for hardware based addressing
|
|
||||||
*
|
|
||||||
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
|
|
||||||
* Author: Tony Lindgren <tony@atomide.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/console.h>
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/types.h>
|
|
||||||
|
|
||||||
#include <asm/errno.h>
|
|
||||||
|
|
||||||
#include "console_cmdline.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Allow longer DEVNAME:0.0 style console naming such as abcd0000.serial:0.0
|
|
||||||
* in addition to the legacy ttyS0 style naming.
|
|
||||||
*/
|
|
||||||
#define CONSOLE_NAME_MAX 32
|
|
||||||
|
|
||||||
#define CONSOLE_OPT_MAX 16
|
|
||||||
#define CONSOLE_BRL_OPT_MAX 16
|
|
||||||
|
|
||||||
struct console_option {
|
|
||||||
char name[CONSOLE_NAME_MAX];
|
|
||||||
char opt[CONSOLE_OPT_MAX];
|
|
||||||
char brl_opt[CONSOLE_BRL_OPT_MAX];
|
|
||||||
u8 has_brl_opt:1;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Updated only at console_setup() time, no locking needed */
|
|
||||||
static struct console_option conopt[MAX_CMDLINECONSOLES];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* console_opt_save - Saves kernel command line console option for driver use
|
|
||||||
* @str: Kernel command line console name and option
|
|
||||||
* @brl_opt: Braille console options
|
|
||||||
*
|
|
||||||
* Saves a kernel command line console option for driver subsystems to use for
|
|
||||||
* adding a preferred console during init. Called from console_setup() only.
|
|
||||||
*
|
|
||||||
* Return: 0 on success, negative error code on failure.
|
|
||||||
*/
|
|
||||||
int __init console_opt_save(const char *str, const char *brl_opt)
|
|
||||||
{
|
|
||||||
struct console_option *con;
|
|
||||||
size_t namelen, optlen;
|
|
||||||
const char *opt;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
namelen = strcspn(str, ",");
|
|
||||||
if (namelen == 0 || namelen >= CONSOLE_NAME_MAX)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
opt = str + namelen;
|
|
||||||
if (*opt == ',')
|
|
||||||
opt++;
|
|
||||||
|
|
||||||
optlen = strlen(opt);
|
|
||||||
if (optlen >= CONSOLE_OPT_MAX)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_CMDLINECONSOLES; i++) {
|
|
||||||
con = &conopt[i];
|
|
||||||
|
|
||||||
if (con->name[0]) {
|
|
||||||
if (!strncmp(str, con->name, namelen))
|
|
||||||
return 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The name isn't terminated, only opt is. Empty opt is fine,
|
|
||||||
* but brl_opt can be either empty or NULL. For more info, see
|
|
||||||
* _braille_console_setup().
|
|
||||||
*/
|
|
||||||
strscpy(con->name, str, namelen + 1);
|
|
||||||
strscpy(con->opt, opt, CONSOLE_OPT_MAX);
|
|
||||||
if (brl_opt) {
|
|
||||||
strscpy(con->brl_opt, brl_opt, CONSOLE_BRL_OPT_MAX);
|
|
||||||
con->has_brl_opt = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct console_option *console_opt_find(const char *name)
|
|
||||||
{
|
|
||||||
struct console_option *con;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_CMDLINECONSOLES; i++) {
|
|
||||||
con = &conopt[i];
|
|
||||||
if (!strcmp(name, con->name))
|
|
||||||
return con;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add_preferred_console_match - Adds a preferred console if a match is found
|
|
||||||
* @match: Expected console on kernel command line, such as console=DEVNAME:0.0
|
|
||||||
* @name: Name of the console character device to add such as ttyS
|
|
||||||
* @idx: Index for the console
|
|
||||||
*
|
|
||||||
* Allows driver subsystems to add a console after translating the command
|
|
||||||
* line name to the character device name used for the console. Options are
|
|
||||||
* added automatically based on the kernel command line. Duplicate preferred
|
|
||||||
* consoles are ignored by __add_preferred_console().
|
|
||||||
*
|
|
||||||
* Return: 0 on success, negative error code on failure.
|
|
||||||
*/
|
|
||||||
int add_preferred_console_match(const char *match, const char *name,
|
|
||||||
const short idx)
|
|
||||||
{
|
|
||||||
struct console_option *con;
|
|
||||||
char *brl_opt = NULL;
|
|
||||||
|
|
||||||
if (!match || !strlen(match) || !name || !strlen(name) ||
|
|
||||||
idx < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
con = console_opt_find(match);
|
|
||||||
if (!con)
|
|
||||||
return -ENOENT;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See __add_preferred_console(). It checks for NULL brl_options to set
|
|
||||||
* the preferred_console flag. Empty brl_opt instead of NULL leads into
|
|
||||||
* the preferred_console flag not set, and CON_CONSDEV not being set,
|
|
||||||
* and the boot console won't get disabled at the end of console_setup().
|
|
||||||
*/
|
|
||||||
if (con->has_brl_opt)
|
|
||||||
brl_opt = con->brl_opt;
|
|
||||||
|
|
||||||
console_opt_add_preferred_console(name, idx, con->opt, brl_opt);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -2,12 +2,6 @@
|
|||||||
#ifndef _CONSOLE_CMDLINE_H
|
#ifndef _CONSOLE_CMDLINE_H
|
||||||
#define _CONSOLE_CMDLINE_H
|
#define _CONSOLE_CMDLINE_H
|
||||||
|
|
||||||
#define MAX_CMDLINECONSOLES 8
|
|
||||||
|
|
||||||
int console_opt_save(const char *str, const char *brl_opt);
|
|
||||||
int console_opt_add_preferred_console(const char *name, const short idx,
|
|
||||||
char *options, char *brl_options);
|
|
||||||
|
|
||||||
struct console_cmdline
|
struct console_cmdline
|
||||||
{
|
{
|
||||||
char name[16]; /* Name of the driver */
|
char name[16]; /* Name of the driver */
|
||||||
|
@ -383,6 +383,9 @@ static int console_locked;
|
|||||||
/*
|
/*
|
||||||
* Array of consoles built from command line options (console=)
|
* Array of consoles built from command line options (console=)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define MAX_CMDLINECONSOLES 8
|
||||||
|
|
||||||
static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
|
static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
|
||||||
|
|
||||||
static int preferred_console = -1;
|
static int preferred_console = -1;
|
||||||
@ -2500,10 +2503,6 @@ static int __init console_setup(char *str)
|
|||||||
if (_braille_console_setup(&str, &brl_options))
|
if (_braille_console_setup(&str, &brl_options))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Save the console for driver subsystem use */
|
|
||||||
if (console_opt_save(str, brl_options))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decode str into name, index, options.
|
* Decode str into name, index, options.
|
||||||
*/
|
*/
|
||||||
@ -2534,13 +2533,6 @@ static int __init console_setup(char *str)
|
|||||||
}
|
}
|
||||||
__setup("console=", console_setup);
|
__setup("console=", console_setup);
|
||||||
|
|
||||||
/* Only called from add_preferred_console_match() */
|
|
||||||
int console_opt_add_preferred_console(const char *name, const short idx,
|
|
||||||
char *options, char *brl_options)
|
|
||||||
{
|
|
||||||
return __add_preferred_console(name, idx, options, brl_options, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add_preferred_console - add a device to the list of preferred consoles.
|
* add_preferred_console - add a device to the list of preferred consoles.
|
||||||
* @name: device name
|
* @name: device name
|
||||||
|
Loading…
Reference in New Issue
Block a user