mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH master 1/4] console: define stub for console_get_first_active
@ 2023-11-20  7:21 Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 2/4] console: add for_each_console stub Ahmad Fatoum
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2023-11-20  7:21 UTC (permalink / raw)
  To: barebox; +Cc: Steffen Hemer, Ahmad Fatoum

console_get_first_active() is unconditionally called in startup.c to
check if the boot countdown can be skipped. The function is not defined
for CONFIG_CONSOLE_NONE however. Provide a stub in that case, so the
code can be compiled again.

This changes behavior: Configured countdown for systems without consoles
will be ignored and the system will boot directly. This is deemed
acceptable as it aligns behavior with systems with consoles that are
exclusively non-interactive and on the off-chance that a board requires
delays, it can always add a late init call delaying the boot.

Fixes: 66232c0ca70f ("startup: don't skip countdown if consoles were runtime enabled")
Reported-by: Steffen Hemer <S.Hemer@phytec.de>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 include/console.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/include/console.h b/include/console.h
index b8c901801e9f..018d47f69ef7 100644
--- a/include/console.h
+++ b/include/console.h
@@ -101,8 +101,6 @@ extern struct list_head console_list;
 
 extern int barebox_loglevel;
 
-struct console_device *console_get_first_active(void);
-
 int console_open(struct console_device *cdev);
 int console_close(struct console_device *cdev);
 int console_set_active(struct console_device *cdev, unsigned active);
@@ -201,6 +199,15 @@ static inline void pbl_set_putc(void (*putcf)(void *ctx, int c), void *ctx) {}
 
 bool console_allow_color(void);
 
+#ifndef CONFIG_CONSOLE_NONE
+struct console_device *console_get_first_active(void);
+#else
+static inline struct console_device *console_get_first_active(void)
+{
+	return NULL;
+}
+#endif
+
 #ifdef CONFIG_CONSOLE_FULL
 void console_ctrlc_allow(void);
 void console_ctrlc_forbid(void);
-- 
2.39.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH master 2/4] console: add for_each_console stub
  2023-11-20  7:21 [PATCH master 1/4] console: define stub for console_get_first_active Ahmad Fatoum
@ 2023-11-20  7:21 ` Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 3/4] console: define barebox_set_loglevel Ahmad Fatoum
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2023-11-20  7:21 UTC (permalink / raw)
  To: barebox; +Cc: Steffen Hemer, Ahmad Fatoum

With CONFIG_CONSOLE_NONE, we have no consoles and no console_list, but
the unconditional for_each_console in the bootm earlycon code references
console_list leading to a linker error.

Let's define for_each_console as a no-op to fix this.

Fixes: d17f29dba030 ("console: add new $global.bootm.earlycon parameter")
Reported-by: Steffen Hemer <S.Hemer@phytec.de>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 include/console.h | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/include/console.h b/include/console.h
index 018d47f69ef7..b400b6bf49ec 100644
--- a/include/console.h
+++ b/include/console.h
@@ -94,9 +94,6 @@ struct console_device *console_get_by_dev(struct device *dev);
 struct console_device *console_get_by_name(const char *name);
 struct console_device *of_console_get_by_alias(const char *alias);
 
-extern struct list_head console_list;
-#define for_each_console(console) list_for_each_entry(console, &console_list, list)
-
 #define CFG_PBSIZE (CONFIG_CBSIZE+sizeof(CONFIG_PROMPT)+16)
 
 extern int barebox_loglevel;
@@ -200,8 +197,13 @@ static inline void pbl_set_putc(void (*putcf)(void *ctx, int c), void *ctx) {}
 bool console_allow_color(void);
 
 #ifndef CONFIG_CONSOLE_NONE
+extern struct list_head console_list;
+#define for_each_console(console) list_for_each_entry(console, &console_list, list)
+
 struct console_device *console_get_first_active(void);
 #else
+#define for_each_console(console) while (((void)console, 0))
+
 static inline struct console_device *console_get_first_active(void)
 {
 	return NULL;
-- 
2.39.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH master 3/4] console: define barebox_set_loglevel
  2023-11-20  7:21 [PATCH master 1/4] console: define stub for console_get_first_active Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 2/4] console: add for_each_console stub Ahmad Fatoum
@ 2023-11-20  7:21 ` Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 4/4] test: self: jwt: use barebox_set_loglevel Ahmad Fatoum
  2023-11-21  6:57 ` [PATCH master 1/4] console: define stub for console_get_first_active Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2023-11-20  7:21 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

Selftests may want to change barebox_loglevel temporarily to avoid expected
warning or error messages cluttering the log. barebox_loglevel is only
defined for !CONFIG_CONSOLE_NONE though, so add a stub for the
console-less case.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 include/console.h | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/include/console.h b/include/console.h
index b400b6bf49ec..477ca34e7aa9 100644
--- a/include/console.h
+++ b/include/console.h
@@ -96,8 +96,6 @@ struct console_device *of_console_get_by_alias(const char *alias);
 
 #define CFG_PBSIZE (CONFIG_CBSIZE+sizeof(CONFIG_PROMPT)+16)
 
-extern int barebox_loglevel;
-
 int console_open(struct console_device *cdev);
 int console_close(struct console_device *cdev);
 int console_set_active(struct console_device *cdev, unsigned active);
@@ -201,6 +199,14 @@ extern struct list_head console_list;
 #define for_each_console(console) list_for_each_entry(console, &console_list, list)
 
 struct console_device *console_get_first_active(void);
+
+extern int barebox_loglevel;
+static inline int barebox_set_loglevel(int loglevel)
+{
+	int old_loglevel = barebox_loglevel;
+	barebox_loglevel = loglevel;
+	return old_loglevel;
+}
 #else
 #define for_each_console(console) while (((void)console, 0))
 
@@ -208,6 +214,11 @@ static inline struct console_device *console_get_first_active(void)
 {
 	return NULL;
 }
+
+static inline int barebox_set_loglevel(int loglevel)
+{
+	return loglevel;
+}
 #endif
 
 #ifdef CONFIG_CONSOLE_FULL
-- 
2.39.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH master 4/4] test: self: jwt: use barebox_set_loglevel
  2023-11-20  7:21 [PATCH master 1/4] console: define stub for console_get_first_active Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 2/4] console: add for_each_console stub Ahmad Fatoum
  2023-11-20  7:21 ` [PATCH master 3/4] console: define barebox_set_loglevel Ahmad Fatoum
@ 2023-11-20  7:21 ` Ahmad Fatoum
  2023-11-21  6:57 ` [PATCH master 1/4] console: define stub for console_get_first_active Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2023-11-20  7:21 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

For CONFIG_CONSOLE_SIMPLE or CONFIG_CONSOLE_FULL, this is equivalent,
but for CONFIG_CONSOLE_NONE, this fixes a linker error as
barebox_loglevel isn't defined in that case.

Fixes: ba9af2bd18db ("test: self: add JSON Web Token tests")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 test/self/jwt.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/test/self/jwt.c b/test/self/jwt.c
index f37b44be22b8..015a0e436736 100644
--- a/test/self/jwt.c
+++ b/test/self/jwt.c
@@ -97,8 +97,7 @@ static void test_jwt(void)
 	 * noisy, so we decrease logging a bit during their run
 	 */
 
-	old_loglevel = barebox_loglevel;
-	barebox_loglevel = MSG_CRIT;
+	old_loglevel = barebox_set_loglevel(MSG_CRIT);
 
 	jwt_rs256_mangled = strdup(jwt_rs256);
 	ch = &jwt_rs256_mangled[strlen(jwt_rs256_mangled) - 1];
@@ -152,6 +151,6 @@ static void test_jwt(void)
 		jwt_free(jwt);
 	}
 
-	barebox_loglevel = old_loglevel;
+	barebox_set_loglevel(old_loglevel);
 }
 bselftest(parser, test_jwt);
-- 
2.39.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH master 1/4] console: define stub for console_get_first_active
  2023-11-20  7:21 [PATCH master 1/4] console: define stub for console_get_first_active Ahmad Fatoum
                   ` (2 preceding siblings ...)
  2023-11-20  7:21 ` [PATCH master 4/4] test: self: jwt: use barebox_set_loglevel Ahmad Fatoum
@ 2023-11-21  6:57 ` Sascha Hauer
  3 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2023-11-21  6:57 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox, Steffen Hemer

On Mon, Nov 20, 2023 at 08:21:19AM +0100, Ahmad Fatoum wrote:
> console_get_first_active() is unconditionally called in startup.c to
> check if the boot countdown can be skipped. The function is not defined
> for CONFIG_CONSOLE_NONE however. Provide a stub in that case, so the
> code can be compiled again.
> 
> This changes behavior: Configured countdown for systems without consoles
> will be ignored and the system will boot directly. This is deemed
> acceptable as it aligns behavior with systems with consoles that are
> exclusively non-interactive and on the off-chance that a board requires
> delays, it can always add a late init call delaying the boot.
> 
> Fixes: 66232c0ca70f ("startup: don't skip countdown if consoles were runtime enabled")
> Reported-by: Steffen Hemer <S.Hemer@phytec.de>
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
>  include/console.h | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)

Applied 1-3, thanks

Didn't apply the last one as the changed file does not yet exist in
master.

Sascha

> 
> diff --git a/include/console.h b/include/console.h
> index b8c901801e9f..018d47f69ef7 100644
> --- a/include/console.h
> +++ b/include/console.h
> @@ -101,8 +101,6 @@ extern struct list_head console_list;
>  
>  extern int barebox_loglevel;
>  
> -struct console_device *console_get_first_active(void);
> -
>  int console_open(struct console_device *cdev);
>  int console_close(struct console_device *cdev);
>  int console_set_active(struct console_device *cdev, unsigned active);
> @@ -201,6 +199,15 @@ static inline void pbl_set_putc(void (*putcf)(void *ctx, int c), void *ctx) {}
>  
>  bool console_allow_color(void);
>  
> +#ifndef CONFIG_CONSOLE_NONE
> +struct console_device *console_get_first_active(void);
> +#else
> +static inline struct console_device *console_get_first_active(void)
> +{
> +	return NULL;
> +}
> +#endif
> +
>  #ifdef CONFIG_CONSOLE_FULL
>  void console_ctrlc_allow(void);
>  void console_ctrlc_forbid(void);
> -- 
> 2.39.2
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-11-21  6:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-20  7:21 [PATCH master 1/4] console: define stub for console_get_first_active Ahmad Fatoum
2023-11-20  7:21 ` [PATCH master 2/4] console: add for_each_console stub Ahmad Fatoum
2023-11-20  7:21 ` [PATCH master 3/4] console: define barebox_set_loglevel Ahmad Fatoum
2023-11-20  7:21 ` [PATCH master 4/4] test: self: jwt: use barebox_set_loglevel Ahmad Fatoum
2023-11-21  6:57 ` [PATCH master 1/4] console: define stub for console_get_first_active Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox