All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/9] console: Introduce console_start() and console_stop()
@ 2020-12-21 12:30 Andy Shevchenko
  2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

In the future we would like to stop unused consoles and
also add a reference counting to avoid imbalanced calls
to ->start() and ->stop() in some cases.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added comments to the function declarations
 common/console.c  | 30 +++++++++++++++++++++++-------
 include/console.h |  3 +++
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/common/console.c b/common/console.c
index 3348436da6f7..9973f96e7629 100644
--- a/common/console.c
+++ b/common/console.c
@@ -114,13 +114,9 @@ static int console_setfile(int file, struct stdio_dev * dev)
 	case stdin:
 	case stdout:
 	case stderr:
-		/* Start new device */
-		if (dev->start) {
-			error = dev->start(dev);
-			/* If it's not started dont use it */
-			if (error < 0)
-				break;
-		}
+		error = console_start(file, dev);
+		if (error)
+			break;
 
 		/* Assign the new device (leaving the existing one started) */
 		stdio_devices[file] = dev;
@@ -310,6 +306,26 @@ static inline void console_doenv(int file, struct stdio_dev *dev)
 #endif
 #endif /* CONIFIG_IS_ENABLED(CONSOLE_MUX) */
 
+int console_start(int file, struct stdio_dev *sdev)
+{
+	int error;
+
+	/* Start new device */
+	if (sdev->start) {
+		error = sdev->start(sdev);
+		/* If it's not started don't use it */
+		if (error < 0)
+			return error;
+	}
+	return 0;
+}
+
+void console_stop(int file, struct stdio_dev *sdev)
+{
+	if (sdev->stop)
+		sdev->stop(sdev);
+}
+
 /** U-Boot INITIAL CONSOLE-NOT COMPATIBLE FUNCTIONS *************************/
 
 int serial_printf(const char *fmt, ...)
diff --git a/include/console.h b/include/console.h
index 432f892b6cce..58a4ec3f12ad 100644
--- a/include/console.h
+++ b/include/console.h
@@ -8,6 +8,7 @@
 #define __CONSOLE_H
 
 #include <stdbool.h>
+#include <stdio_dev.h>
 #include <linux/errno.h>
 
 extern char console_buffer[];
@@ -15,6 +16,8 @@ extern char console_buffer[];
 /* common/console.c */
 int console_init_f(void);	/* Before relocation; uses the serial  stuff */
 int console_init_r(void);	/* After  relocation; uses the console stuff */
+int console_start(int file, struct stdio_dev *sdev);	/* Start a console device */
+void console_stop(int file, struct stdio_dev *sdev);	/* Stop a console device */
 int console_assign(int file, const char *devname);	/* Assign the console */
 int ctrlc(void);
 int had_ctrlc(void);	/* have we had a Control-C since last clear? */
-- 
2.29.2

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

* [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2020-12-21 16:47   ` Simon Glass
  2021-01-16 16:24   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 3/9] console: move search_device() from iomux.h to console.h Andy Shevchenko
                   ` (7 subsequent siblings)
  8 siblings, 2 replies; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

There is no need to call ->start() for already started device. All the same,
there is no need to call ->stop() for devices still in use.

For now enforce this only for IOMUX case.

Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v3: renamed new function and added a documentation for it
 common/console.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/common/console.c b/common/console.c
index 9973f96e7629..e5fd214ae86f 100644
--- a/common/console.c
+++ b/common/console.c
@@ -174,6 +174,32 @@ static struct stdio_dev *tstcdev;
 struct stdio_dev **console_devices[MAX_FILES];
 int cd_count[MAX_FILES];
 
+/**
+ * console_needs_start_stop() - check if we need to start or stop the STDIO device
+ * @file: STDIO file
+ * @sdev: STDIO device in question
+ *
+ * This function checks if we need to start or stop the stdio device used for
+ * a console. For IOMUX case it simply enforces one time start and one time
+ * stop of the device independently of how many STDIO files are using it. In
+ * other words, we start console once before first STDIO device wants it and
+ * stop after the last is gone.
+ */
+static bool console_needs_start_stop(int file, struct stdio_dev *sdev)
+{
+	int i, j;
+
+	for (i = 0; i < ARRAY_SIZE(cd_count); i++) {
+		if (i == file)
+			continue;
+
+		for (j = 0; j < cd_count[i]; j++)
+			if (console_devices[i][j] == sdev)
+				return false;
+	}
+	return true;
+}
+
 /*
  * This depends on tstc() always being called before getchar().
  * This is guaranteed to be true because this routine is called
@@ -272,6 +298,11 @@ static inline void console_doenv(int file, struct stdio_dev *dev)
 }
 #endif
 #else
+static inline bool console_needs_start_stop(int file, struct stdio_dev *sdev)
+{
+	return true;
+}
+
 static inline int console_getc(int file)
 {
 	return stdio_devices[file]->getc(stdio_devices[file]);
@@ -310,6 +341,9 @@ int console_start(int file, struct stdio_dev *sdev)
 {
 	int error;
 
+	if (!console_needs_start_stop(file, sdev))
+		return 0;
+
 	/* Start new device */
 	if (sdev->start) {
 		error = sdev->start(sdev);
@@ -322,6 +356,9 @@ int console_start(int file, struct stdio_dev *sdev)
 
 void console_stop(int file, struct stdio_dev *sdev)
 {
+	if (!console_needs_start_stop(file, sdev))
+		return;
+
 	if (sdev->stop)
 		sdev->stop(sdev);
 }
-- 
2.29.2

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

* [PATCH v3 3/9] console: move search_device() from iomux.h to console.h
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
  2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:24   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 4/9] console: rename search_device() to console_search_dev() Andy Shevchenko
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

search_device() is defined in console.c. Move its declaration
to an appropriate header file.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added tag and changed subject prefix
 include/console.h | 2 ++
 include/iomux.h   | 1 -
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/console.h b/include/console.h
index 58a4ec3f12ad..4e06b13736c3 100644
--- a/include/console.h
+++ b/include/console.h
@@ -25,6 +25,8 @@ void clear_ctrlc(void);	/* clear the Control-C condition */
 int disable_ctrlc(int);	/* 1 to disable, 0 to enable Control-C detect */
 int confirm_yesno(void);        /*  1 if input is "y", "Y", "yes" or "YES" */
 
+struct stdio_dev *search_device(int flags, const char *name);
+
 #ifdef CONFIG_CONSOLE_RECORD
 /**
  * console_record_init() - set up the console recording buffers
diff --git a/include/iomux.h b/include/iomux.h
index e6e1097db5b2..da7ff697d218 100644
--- a/include/iomux.h
+++ b/include/iomux.h
@@ -26,6 +26,5 @@ extern int cd_count[MAX_FILES];
 
 int iomux_doenv(const int, const char *);
 void iomux_printdevs(const int);
-struct stdio_dev *search_device(int, const char *);
 
 #endif /* _IO_MUX_H */
-- 
2.29.2

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

* [PATCH v3 4/9] console: rename search_device() to console_search_dev()
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
  2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
  2020-12-21 12:30 ` [PATCH v3 3/9] console: move search_device() from iomux.h to console.h Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2020-12-21 16:47   ` Simon Glass
  2021-01-16 16:24   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 5/9] console: Provide a documentation for console_search_dev() Andy Shevchenko
                   ` (5 subsequent siblings)
  8 siblings, 2 replies; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

Rename search_device() to console_search_dev() since it's in console.h.

Suggested-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v3: new patch
 common/console.c  | 18 +++++++++---------
 common/iomux.c    |  4 ++--
 common/stdio.c    |  4 ++--
 include/console.h |  2 +-
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/common/console.c b/common/console.c
index e5fd214ae86f..a7ab50afa29f 100644
--- a/common/console.c
+++ b/common/console.c
@@ -778,7 +778,7 @@ void clear_ctrlc(void)
 
 /** U-Boot INIT FUNCTIONS *************************************************/
 
-struct stdio_dev *search_device(int flags, const char *name)
+struct stdio_dev *console_search_dev(int flags, const char *name)
 {
 	struct stdio_dev *dev;
 
@@ -814,7 +814,7 @@ int console_assign(int file, const char *devname)
 
 	/* Check for valid device name */
 
-	dev = search_device(flag, devname);
+	dev = console_search_dev(flag, devname);
 
 	if (dev)
 		return console_setfile(file, dev);
@@ -924,9 +924,9 @@ int console_init_r(void)
 	stderrname = env_get("stderr");
 
 	if (OVERWRITE_CONSOLE == 0) {	/* if not overwritten by config switch */
-		inputdev  = search_device(DEV_FLAGS_INPUT,  stdinname);
-		outputdev = search_device(DEV_FLAGS_OUTPUT, stdoutname);
-		errdev    = search_device(DEV_FLAGS_OUTPUT, stderrname);
+		inputdev  = console_search_dev(DEV_FLAGS_INPUT,  stdinname);
+		outputdev = console_search_dev(DEV_FLAGS_OUTPUT, stdoutname);
+		errdev    = console_search_dev(DEV_FLAGS_OUTPUT, stderrname);
 #if CONFIG_IS_ENABLED(CONSOLE_MUX)
 		iomux_err = iomux_doenv(stdin, stdinname);
 		iomux_err += iomux_doenv(stdout, stdoutname);
@@ -938,13 +938,13 @@ int console_init_r(void)
 	}
 	/* if the devices are overwritten or not found, use default device */
 	if (inputdev == NULL) {
-		inputdev  = search_device(DEV_FLAGS_INPUT,  "serial");
+		inputdev  = console_search_dev(DEV_FLAGS_INPUT,  "serial");
 	}
 	if (outputdev == NULL) {
-		outputdev = search_device(DEV_FLAGS_OUTPUT, "serial");
+		outputdev = console_search_dev(DEV_FLAGS_OUTPUT, "serial");
 	}
 	if (errdev == NULL) {
-		errdev    = search_device(DEV_FLAGS_OUTPUT, "serial");
+		errdev    = console_search_dev(DEV_FLAGS_OUTPUT, "serial");
 	}
 	/* Initializes output console first */
 	if (outputdev != NULL) {
@@ -1018,7 +1018,7 @@ int console_init_r(void)
 	 */
 	if (env_get("splashimage") != NULL) {
 		if (!(gd->flags & GD_FLG_SILENT))
-			outputdev = search_device (DEV_FLAGS_OUTPUT, "serial");
+			outputdev = console_search_dev (DEV_FLAGS_OUTPUT, "serial");
 	}
 #endif
 
diff --git a/common/iomux.c b/common/iomux.c
index 7cfd9f2e9162..e1bd1b48cd03 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -95,10 +95,10 @@ int iomux_doenv(const int console, const char *arg)
 	for (j = 0; j < i; j++) {
 		/*
 		 * Check whether the device exists and is valid.
-		 * console_assign() also calls search_device(),
+		 * console_assign() also calls console_search_dev(),
 		 * but I need the pointer to the device.
 		 */
-		dev = search_device(io_flag, start[j]);
+		dev = console_search_dev(io_flag, start[j]);
 		if (dev == NULL)
 			continue;
 		/*
diff --git a/common/stdio.c b/common/stdio.c
index a15f30804bf5..abf9b1e91588 100644
--- a/common/stdio.c
+++ b/common/stdio.c
@@ -181,7 +181,7 @@ struct stdio_dev *stdio_get_by_name(const char *name)
 		 * 'stdout', which may include a list of devices separate by
 		 * commas. Obviously this is not going to work, so we ignore
 		 * that case. The call path in that case is
-		 * console_init_r() -> search_device() -> stdio_get_by_name()
+		 * console_init_r() -> console_search_dev() -> stdio_get_by_name()
 		 */
 		if (!strncmp(name, "vidconsole", 10) && !strchr(name, ',') &&
 		    !stdio_probe_device(name, UCLASS_VIDEO, &sdev))
@@ -332,7 +332,7 @@ int stdio_add_devices(void)
 		/*
 		 * If the console setting is not in environment variables then
 		 * console_init_r() will not be calling iomux_doenv() (which
-		 * calls search_device()). So we will not dynamically add
+		 * calls console_search_dev()). So we will not dynamically add
 		 * devices by calling stdio_probe_device().
 		 *
 		 * So just probe all video devices now so that whichever one is
diff --git a/include/console.h b/include/console.h
index 4e06b13736c3..bb186e7be04d 100644
--- a/include/console.h
+++ b/include/console.h
@@ -25,7 +25,7 @@ void clear_ctrlc(void);	/* clear the Control-C condition */
 int disable_ctrlc(int);	/* 1 to disable, 0 to enable Control-C detect */
 int confirm_yesno(void);        /*  1 if input is "y", "Y", "yes" or "YES" */
 
-struct stdio_dev *search_device(int flags, const char *name);
+struct stdio_dev *console_search_dev(int flags, const char *name);
 
 #ifdef CONFIG_CONSOLE_RECORD
 /**
-- 
2.29.2

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

* [PATCH v3 5/9] console: Provide a documentation for console_search_dev()
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (2 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 4/9] console: rename search_device() to console_search_dev() Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:24   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails Andy Shevchenko
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

Provide a documentation for console_search_dev().

Suggested-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v3: new patch
 include/console.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/include/console.h b/include/console.h
index bb186e7be04d..7e628c0cf836 100644
--- a/include/console.h
+++ b/include/console.h
@@ -25,6 +25,16 @@ void clear_ctrlc(void);	/* clear the Control-C condition */
 int disable_ctrlc(int);	/* 1 to disable, 0 to enable Control-C detect */
 int confirm_yesno(void);        /*  1 if input is "y", "Y", "yes" or "YES" */
 
+/**
+ * console_search_dev() - search for stdio device with given flags and name
+ * @flags: device flags as per input/output/system
+ * @name: device name
+ *
+ * Iterates over registered STDIO devices and match them with given @flags
+ * and @name.
+ *
+ * @return pointer to the &struct stdio_dev if found, or NULL otherwise
+ */
 struct stdio_dev *console_search_dev(int flags, const char *name);
 
 #ifdef CONFIG_CONSOLE_RECORD
-- 
2.29.2

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

* [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (3 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 5/9] console: Provide a documentation for console_search_dev() Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:25   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability Andy Shevchenko
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

It's realloc() 101 to avoid `foo = realloc(foo, ...);` call
due to getting a memory leak.

Actually it's not clear why realloc() has been used here.
If we shrink the array, the memcpy() overwrites it anyway
with the contents of a new array. If it becomes bigger,
same story.

Drop useless realloc() for good and thus preserve console list
in case of failed allocation.

Fixes: 16a28ef219c2 ("IOMUX: Add console multiplexing support.")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added tag
 common/iomux.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/common/iomux.c b/common/iomux.c
index e1bd1b48cd03..7b7b063cfc6b 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -129,19 +129,10 @@ int iomux_doenv(const int console, const char *arg)
 		return 1;
 	} else {
 		/* Works even if console_devices[console] is NULL. */
-		console_devices[console] =
-			(struct stdio_dev **)realloc(console_devices[console],
-			cs_idx * sizeof(struct stdio_dev *));
-		if (console_devices[console] == NULL) {
-			free(cons_set);
-			return 1;
-		}
-		memcpy(console_devices[console], cons_set, cs_idx *
-			sizeof(struct stdio_dev *));
-
+		free(console_devices[console]);
+		console_devices[console] = cons_set;
 		cd_count[console] = cs_idx;
 	}
-	free(cons_set);
 	return 0;
 }
 #endif /* CONSOLE_MUX */
-- 
2.29.2

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

* [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (4 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:25   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else' Andy Shevchenko
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

Refactor iomux_doenv() a bit in order to increase readability.
There is no change in code generation on x86.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added tag
 common/iomux.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/common/iomux.c b/common/iomux.c
index 7b7b063cfc6b..7991235d1197 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -45,15 +45,14 @@ int iomux_doenv(const int console, const char *arg)
 	i = 0;
 	temp = console_args;
 	for (;;) {
-		temp = strchr(temp, ',');
-		if (temp != NULL) {
-			i++;
-			temp++;
-			continue;
-		}
 		/* There's always one entry more than the number of commas. */
 		i++;
-		break;
+
+		temp = strchr(temp, ',');
+		if (temp == NULL)
+			break;
+
+		temp++;
 	}
 	start = (char **)malloc(i * sizeof(char *));
 	if (start == NULL) {
-- 
2.29.2

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

* [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else'
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (5 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:25   ` Tom Rini
  2020-12-21 12:30 ` [PATCH v3 9/9] IOMUX: Stop dropped consoles Andy Shevchenko
  2021-01-16 16:24 ` [PATCH v3 1/9] console: Introduce console_start() and console_stop() Tom Rini
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

Obviously the following has unnecessary indentation level in 'else' branch.

	if (foo) {
		...
		return;
	} else {
		...
	}

Drop indentation level by removing redundant 'else'.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added tag
 common/iomux.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/common/iomux.c b/common/iomux.c
index 7991235d1197..126d92ce850f 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -126,12 +126,12 @@ int iomux_doenv(const int console, const char *arg)
 	if (cs_idx == 0) {
 		free(cons_set);
 		return 1;
-	} else {
-		/* Works even if console_devices[console] is NULL. */
-		free(console_devices[console]);
-		console_devices[console] = cons_set;
-		cd_count[console] = cs_idx;
 	}
+
+	/* Works even if console_devices[console] is NULL. */
+	free(console_devices[console]);
+	console_devices[console] = cons_set;
+	cd_count[console] = cs_idx;
 	return 0;
 }
 #endif /* CONSOLE_MUX */
-- 
2.29.2

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

* [PATCH v3 9/9] IOMUX: Stop dropped consoles
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (6 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else' Andy Shevchenko
@ 2020-12-21 12:30 ` Andy Shevchenko
  2021-01-16 16:25   ` Tom Rini
  2021-01-16 16:24 ` [PATCH v3 1/9] console: Introduce console_start() and console_stop() Tom Rini
  8 siblings, 1 reply; 20+ messages in thread
From: Andy Shevchenko @ 2020-12-21 12:30 UTC (permalink / raw)
  To: u-boot

When at some point environment shrinks we need to stop dropped devices.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
v3: added tag
 common/iomux.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/common/iomux.c b/common/iomux.c
index 126d92ce850f..15bf53388559 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -27,8 +27,8 @@ int iomux_doenv(const int console, const char *arg)
 {
 	char *console_args, *temp, **start;
 	int i, j, k, io_flag, cs_idx, repeat;
+	struct stdio_dev **cons_set, **old_set;
 	struct stdio_dev *dev;
-	struct stdio_dev **cons_set;
 
 	console_args = strdup(arg);
 	if (console_args == NULL)
@@ -128,10 +128,23 @@ int iomux_doenv(const int console, const char *arg)
 		return 1;
 	}
 
-	/* Works even if console_devices[console] is NULL. */
-	free(console_devices[console]);
+	old_set = console_devices[console];
+	repeat = cd_count[console];
+
 	console_devices[console] = cons_set;
 	cd_count[console] = cs_idx;
+
+	/* Stop dropped consoles */
+	for (i = 0; i < repeat; i++) {
+		for (j = 0; j < cs_idx; j++) {
+			if (old_set[i] == cons_set[j])
+				break;
+		}
+		if (j == cs_idx)
+			console_stop(console, old_set[i]);
+	}
+
+	free(old_set);
 	return 0;
 }
 #endif /* CONSOLE_MUX */
-- 
2.29.2

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

* [PATCH v3 4/9] console: rename search_device() to console_search_dev()
  2020-12-21 12:30 ` [PATCH v3 4/9] console: rename search_device() to console_search_dev() Andy Shevchenko
@ 2020-12-21 16:47   ` Simon Glass
  2021-01-16 16:24   ` Tom Rini
  1 sibling, 0 replies; 20+ messages in thread
From: Simon Glass @ 2020-12-21 16:47 UTC (permalink / raw)
  To: u-boot

On Mon, 21 Dec 2020 at 05:30, Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Rename search_device() to console_search_dev() since it's in console.h.
>
> Suggested-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v3: new patch
>  common/console.c  | 18 +++++++++---------
>  common/iomux.c    |  4 ++--
>  common/stdio.c    |  4 ++--
>  include/console.h |  2 +-
>  4 files changed, 14 insertions(+), 14 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced
  2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
@ 2020-12-21 16:47   ` Simon Glass
  2021-01-16 16:24   ` Tom Rini
  1 sibling, 0 replies; 20+ messages in thread
From: Simon Glass @ 2020-12-21 16:47 UTC (permalink / raw)
  To: u-boot

On Mon, 21 Dec 2020 at 05:30, Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> There is no need to call ->start() for already started device. All the same,
> there is no need to call ->stop() for devices still in use.
>
> For now enforce this only for IOMUX case.
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v3: renamed new function and added a documentation for it
>  common/console.c | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

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

* [PATCH v3 1/9] console: Introduce console_start() and console_stop()
  2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
                   ` (7 preceding siblings ...)
  2020-12-21 12:30 ` [PATCH v3 9/9] IOMUX: Stop dropped consoles Andy Shevchenko
@ 2021-01-16 16:24 ` Tom Rini
  8 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:24 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:00PM +0200, Andy Shevchenko wrote:

> In the future we would like to stop unused consoles and
> also add a reference counting to avoid imbalanced calls
> to ->start() and ->stop() in some cases.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/f040fbc8/attachment.sig>

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

* [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced
  2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
  2020-12-21 16:47   ` Simon Glass
@ 2021-01-16 16:24   ` Tom Rini
  1 sibling, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:24 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:01PM +0200, Andy Shevchenko wrote:

> There is no need to call ->start() for already started device. All the same,
> there is no need to call ->stop() for devices still in use.
> 
> For now enforce this only for IOMUX case.
> 
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/86061f6a/attachment.sig>

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

* [PATCH v3 3/9] console: move search_device() from iomux.h to console.h
  2020-12-21 12:30 ` [PATCH v3 3/9] console: move search_device() from iomux.h to console.h Andy Shevchenko
@ 2021-01-16 16:24   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:24 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:02PM +0200, Andy Shevchenko wrote:

> search_device() is defined in console.c. Move its declaration
> to an appropriate header file.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/c22eecae/attachment.sig>

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

* [PATCH v3 4/9] console: rename search_device() to console_search_dev()
  2020-12-21 12:30 ` [PATCH v3 4/9] console: rename search_device() to console_search_dev() Andy Shevchenko
  2020-12-21 16:47   ` Simon Glass
@ 2021-01-16 16:24   ` Tom Rini
  1 sibling, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:24 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:03PM +0200, Andy Shevchenko wrote:

> Rename search_device() to console_search_dev() since it's in console.h.
> 
> Suggested-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/6f16d7d6/attachment.sig>

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

* [PATCH v3 5/9] console: Provide a documentation for console_search_dev()
  2020-12-21 12:30 ` [PATCH v3 5/9] console: Provide a documentation for console_search_dev() Andy Shevchenko
@ 2021-01-16 16:24   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:24 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:04PM +0200, Andy Shevchenko wrote:

> Provide a documentation for console_search_dev().
> 
> Suggested-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/3c017d80/attachment.sig>

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

* [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails
  2020-12-21 12:30 ` [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails Andy Shevchenko
@ 2021-01-16 16:25   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:25 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:05PM +0200, Andy Shevchenko wrote:

> It's realloc() 101 to avoid `foo = realloc(foo, ...);` call
> due to getting a memory leak.
> 
> Actually it's not clear why realloc() has been used here.
> If we shrink the array, the memcpy() overwrites it anyway
> with the contents of a new array. If it becomes bigger,
> same story.
> 
> Drop useless realloc() for good and thus preserve console list
> in case of failed allocation.
> 
> Fixes: 16a28ef219c2 ("IOMUX: Add console multiplexing support.")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/e8bef255/attachment.sig>

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

* [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability
  2020-12-21 12:30 ` [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability Andy Shevchenko
@ 2021-01-16 16:25   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:25 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:06PM +0200, Andy Shevchenko wrote:

> Refactor iomux_doenv() a bit in order to increase readability.
> There is no change in code generation on x86.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/21c837b5/attachment.sig>

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

* [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else'
  2020-12-21 12:30 ` [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else' Andy Shevchenko
@ 2021-01-16 16:25   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:25 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:07PM +0200, Andy Shevchenko wrote:

> Obviously the following has unnecessary indentation level in 'else' branch.
> 
> 	if (foo) {
> 		...
> 		return;
> 	} else {
> 		...
> 	}
> 
> Drop indentation level by removing redundant 'else'.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/852ad289/attachment.sig>

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

* [PATCH v3 9/9] IOMUX: Stop dropped consoles
  2020-12-21 12:30 ` [PATCH v3 9/9] IOMUX: Stop dropped consoles Andy Shevchenko
@ 2021-01-16 16:25   ` Tom Rini
  0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2021-01-16 16:25 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 21, 2020 at 02:30:08PM +0200, Andy Shevchenko wrote:

> When at some point environment shrinks we need to stop dropped devices.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210116/af33523d/attachment.sig>

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

end of thread, other threads:[~2021-01-16 16:25 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-21 12:30 [PATCH v3 1/9] console: Introduce console_start() and console_stop() Andy Shevchenko
2020-12-21 12:30 ` [PATCH v3 2/9] console: Keep ->start() and ->stop() balanced Andy Shevchenko
2020-12-21 16:47   ` Simon Glass
2021-01-16 16:24   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 3/9] console: move search_device() from iomux.h to console.h Andy Shevchenko
2021-01-16 16:24   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 4/9] console: rename search_device() to console_search_dev() Andy Shevchenko
2020-12-21 16:47   ` Simon Glass
2021-01-16 16:24   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 5/9] console: Provide a documentation for console_search_dev() Andy Shevchenko
2021-01-16 16:24   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 6/9] IOMUX: Preserve console list if realloc() fails Andy Shevchenko
2021-01-16 16:25   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 7/9] IOMUX: Refactor iomux_doenv() in order to increase readability Andy Shevchenko
2021-01-16 16:25   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 8/9] IOMUX: Drop indentation level by removing redundant 'else' Andy Shevchenko
2021-01-16 16:25   ` Tom Rini
2020-12-21 12:30 ` [PATCH v3 9/9] IOMUX: Stop dropped consoles Andy Shevchenko
2021-01-16 16:25   ` Tom Rini
2021-01-16 16:24 ` [PATCH v3 1/9] console: Introduce console_start() and console_stop() Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.