linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Fix __earlycon_table stride... again
@ 2018-03-20 17:57 Daniel Kurtz
  2018-03-20 17:57 ` [PATCH v2 1/2] serial: sh-sci: Remove __initdata attribute for struct 'port_cfg' Daniel Kurtz
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Daniel Kurtz @ 2018-03-20 17:57 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Matthias Kaehlcke, Guenter Roeck
  Cc: adurbin, linux-kernel, Daniel Kurtz

The __earlycon_table lives in a special "__earlycon_table" section.  The
contents of this table are added using some macros that deposit individual
struct earlycon_id entries into this section.  The linker then defines a symbol
__earlycon_table that is supposed to contain the addresss of the first of these
entries.  The code in earlycon.c and fdt.c then tries to access the memory
pointed to by __earlycon_table as an array of struct earlycon_id entries.

Unfortunately, the compiler doesn't always place the entries such that they
are an array.  Let's fix that.

Patch 1 of the series is a fix that should hopefully fix a kbuild error that
seems to be triggered by Patch 2.

Daniel Kurtz (2):
  serial: sh-sci: Remove __initdata attribute for struct 'port_cfg'
  earlycon: Use a pointer table to fix __earlycon_table stride

 drivers/of/fdt.c                  |  7 +++++--
 drivers/tty/serial/earlycon.c     |  6 ++++--
 drivers/tty/serial/sh-sci.c       |  2 +-
 include/asm-generic/vmlinux.lds.h |  2 +-
 include/linux/serial_core.h       | 21 ++++++++++++++-------
 5 files changed, 25 insertions(+), 13 deletions(-)

-- 
2.16.2.804.g6dcf76e118-goog

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

* [PATCH v2 1/2] serial: sh-sci: Remove __initdata attribute for struct 'port_cfg'
  2018-03-20 17:57 [PATCH v2 0/2] Fix __earlycon_table stride... again Daniel Kurtz
@ 2018-03-20 17:57 ` Daniel Kurtz
  2018-03-20 17:57 ` [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride Daniel Kurtz
  2018-03-23 13:34 ` [PATCH v2 0/2] Fix __earlycon_table stride... again Greg Kroah-Hartman
  2 siblings, 0 replies; 7+ messages in thread
From: Daniel Kurtz @ 2018-03-20 17:57 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Matthias Kaehlcke, Guenter Roeck
  Cc: adurbin, linux-kernel, Daniel Kurtz, Jiri Slaby,
	open list:SERIAL DRIVERS

Commit dd076cffb8cd ("serial: sh-sci: Fix init data attribute for struct
'port_cfg'") properly removed the __init attribute, and changed it to
__initdata.

The __init function early_console_setup() takes the address of global
port_cfg and assigns it to a field in another global, sci_ports:

static int __init early_console_setup(struct earlycon_device *device,
      int type)
{
...
port_cfg.type = type;
sci_ports[0].cfg = &port_cfg;
...
}

port_cfg, however, is now in __initdata:
static struct plat_sci_port port_cfg __initdata;

... but sci_ports is not:
static struct sci_port sci_ports[SCI_NPORTS];

Thus, there is a non-__initdata variable containing the address of a
__initdata struct.

Fix this section type conflict by just removing the __initdata attribute.

Fixes: dd076cffb8cd ("serial: sh-sci: Fix init data attribute for struct 'port_cfg'")
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
---
 drivers/tty/serial/sh-sci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 44adf9db38f8..ff4e1012ed76 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3277,7 +3277,7 @@ early_platform_init_buffer("earlyprintk", &sci_driver,
 			   early_serial_buf, ARRAY_SIZE(early_serial_buf));
 #endif
 #ifdef CONFIG_SERIAL_SH_SCI_EARLYCON
-static struct plat_sci_port port_cfg __initdata;
+static struct plat_sci_port port_cfg;
 
 static int __init early_console_setup(struct earlycon_device *device,
 				      int type)
-- 
2.16.2.804.g6dcf76e118-goog


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

* [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride
  2018-03-20 17:57 [PATCH v2 0/2] Fix __earlycon_table stride... again Daniel Kurtz
  2018-03-20 17:57 ` [PATCH v2 1/2] serial: sh-sci: Remove __initdata attribute for struct 'port_cfg' Daniel Kurtz
@ 2018-03-20 17:57 ` Daniel Kurtz
  2018-03-20 18:19   ` Guenter Roeck
  2018-03-23  2:54   ` kbuild test robot
  2018-03-23 13:34 ` [PATCH v2 0/2] Fix __earlycon_table stride... again Greg Kroah-Hartman
  2 siblings, 2 replies; 7+ messages in thread
From: Daniel Kurtz @ 2018-03-20 17:57 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Matthias Kaehlcke, Guenter Roeck
  Cc: adurbin, linux-kernel, Daniel Kurtz, Rob Herring, Frank Rowand,
	Jiri Slaby, Arnd Bergmann,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE,
	open list:SERIAL DRIVERS,
	open list:GENERIC INCLUDE/ASM HEADER FILES

Commit 99492c39f39f ("earlycon: Fix __earlycon_table stride") tried to fix
__earlycon_table stride by forcing the earlycon_id struct alignment to 32
and asking the linker to 32-byte align the __earlycon_table symbol.  This
fix was based on commit 07fca0e57fca92 ("tracing: Properly align linker
defined symbols") which tried a similar fix for the tracing subsystem.

However, this fix doesn't quite work because there is no guarantee that
gcc will place structures packed into an array format.  In fact, gcc 4.9
chooses to 64-byte align these structs by inserting additional padding
between the entries because it has no clue that they are supposed to be in
an array.  If we are unlucky, the linker will assign symbol
"__earlycon_table" to a 32-byte aligned address which does not correpsond
to the 64-byte alignbed contents of section "__earlycon_table".

To address this same problem, the fix to the tracing system was
subsequently re-implemented using a more robust table of pointers approach
by commits:
 3d56e331b653 ("tracing: Replace syscall_meta_data struct array with pointer array")
 654986462939 ("tracepoints: Fix section alignment using pointer array")
 e4a9ea5ee7c8 ("tracing: Replace trace_event struct array with pointer array")

Let's use this same "array of pointers to structs" approach for
EARLYCON_TABLE.

Fixes: 99492c39f39f ("earlycon: Fix __earlycon_table stride")
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Suggested-by: Aaron Durbin <adurbin@chromium.org>
---
Changes since v1:
 * added Suggested-by and Fixes, and reworded the commit message per Randy. 

 drivers/of/fdt.c                  |  7 +++++--
 drivers/tty/serial/earlycon.c     |  6 ++++--
 include/asm-generic/vmlinux.lds.h |  2 +-
 include/linux/serial_core.h       | 21 ++++++++++++++-------
 4 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 84aa9d676375..6da20b9688f7 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -942,7 +942,7 @@ int __init early_init_dt_scan_chosen_stdout(void)
 	int offset;
 	const char *p, *q, *options = NULL;
 	int l;
-	const struct earlycon_id *match;
+	const struct earlycon_id **p_match;
 	const void *fdt = initial_boot_params;
 
 	offset = fdt_path_offset(fdt, "/chosen");
@@ -969,7 +969,10 @@ int __init early_init_dt_scan_chosen_stdout(void)
 		return 0;
 	}
 
-	for (match = __earlycon_table; match < __earlycon_table_end; match++) {
+	for (p_match = __earlycon_table; p_match < __earlycon_table_end;
+	     p_match++) {
+		const struct earlycon_id *match = *p_match;
+
 		if (!match->compatible[0])
 			continue;
 
diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
index a24278380fec..22683393a0f2 100644
--- a/drivers/tty/serial/earlycon.c
+++ b/drivers/tty/serial/earlycon.c
@@ -169,7 +169,7 @@ static int __init register_earlycon(char *buf, const struct earlycon_id *match)
  */
 int __init setup_earlycon(char *buf)
 {
-	const struct earlycon_id *match;
+	const struct earlycon_id **p_match;
 
 	if (!buf || !buf[0])
 		return -EINVAL;
@@ -177,7 +177,9 @@ int __init setup_earlycon(char *buf)
 	if (early_con.flags & CON_ENABLED)
 		return -EALREADY;
 
-	for (match = __earlycon_table; match < __earlycon_table_end; match++) {
+	for (p_match = __earlycon_table; p_match < __earlycon_table_end;
+	     p_match++) {
+		const struct earlycon_id *match = *p_match;
 		size_t len = strlen(match->name);
 
 		if (strncmp(buf, match->name, len))
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 1ab0e520d6fc..e17de55c2542 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -179,7 +179,7 @@
 #endif
 
 #ifdef CONFIG_SERIAL_EARLYCON
-#define EARLYCON_TABLE() STRUCT_ALIGN();			\
+#define EARLYCON_TABLE() . = ALIGN(8);				\
 			 VMLINUX_SYMBOL(__earlycon_table) = .;	\
 			 KEEP(*(__earlycon_table))		\
 			 VMLINUX_SYMBOL(__earlycon_table_end) = .;
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index b32df49a3bd5..93b7add47087 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -351,10 +351,10 @@ struct earlycon_id {
 	char	name[16];
 	char	compatible[128];
 	int	(*setup)(struct earlycon_device *, const char *options);
-} __aligned(32);
+};
 
-extern const struct earlycon_id __earlycon_table[];
-extern const struct earlycon_id __earlycon_table_end[];
+extern const struct earlycon_id *__earlycon_table[];
+extern const struct earlycon_id *__earlycon_table_end[];
 
 #if defined(CONFIG_SERIAL_EARLYCON) && !defined(MODULE)
 #define EARLYCON_USED_OR_UNUSED	__used
@@ -362,12 +362,19 @@ extern const struct earlycon_id __earlycon_table_end[];
 #define EARLYCON_USED_OR_UNUSED	__maybe_unused
 #endif
 
-#define OF_EARLYCON_DECLARE(_name, compat, fn)				\
-	static const struct earlycon_id __UNIQUE_ID(__earlycon_##_name)	\
-	     EARLYCON_USED_OR_UNUSED __section(__earlycon_table)	\
+#define _OF_EARLYCON_DECLARE(_name, compat, fn, unique_id)		\
+	static const struct earlycon_id unique_id			\
+	     EARLYCON_USED_OR_UNUSED __initdata				\
 		= { .name = __stringify(_name),				\
 		    .compatible = compat,				\
-		    .setup = fn  }
+		    .setup = fn  };					\
+	static const struct earlycon_id EARLYCON_USED_OR_UNUSED		\
+		__section(__earlycon_table)				\
+		* const __PASTE(__p, unique_id) = &unique_id
+
+#define OF_EARLYCON_DECLARE(_name, compat, fn)				\
+	_OF_EARLYCON_DECLARE(_name, compat, fn,				\
+			     __UNIQUE_ID(__earlycon_##_name))
 
 #define EARLYCON_DECLARE(_name, fn)	OF_EARLYCON_DECLARE(_name, "", fn)
 
-- 
2.16.2.804.g6dcf76e118-goog


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

* Re: [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride
  2018-03-20 17:57 ` [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride Daniel Kurtz
@ 2018-03-20 18:19   ` Guenter Roeck
  2018-03-23  2:54   ` kbuild test robot
  1 sibling, 0 replies; 7+ messages in thread
From: Guenter Roeck @ 2018-03-20 18:19 UTC (permalink / raw)
  To: Daniel Kurtz
  Cc: Greg Kroah-Hartman, Matthias Kaehlcke, Guenter Roeck,
	Aaron Durbin, linux-kernel, Rob Herring, Frank Rowand,
	Jiri Slaby, Arnd Bergmann,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE,
	open list:SERIAL DRIVERS,
	open list:GENERIC INCLUDE/ASM HEADER FILES

On Tue, Mar 20, 2018 at 10:57 AM, Daniel Kurtz <djkurtz@chromium.org> wrote:
> Commit 99492c39f39f ("earlycon: Fix __earlycon_table stride") tried to fix
> __earlycon_table stride by forcing the earlycon_id struct alignment to 32
> and asking the linker to 32-byte align the __earlycon_table symbol.  This
> fix was based on commit 07fca0e57fca92 ("tracing: Properly align linker
> defined symbols") which tried a similar fix for the tracing subsystem.
>
> However, this fix doesn't quite work because there is no guarantee that
> gcc will place structures packed into an array format.  In fact, gcc 4.9
> chooses to 64-byte align these structs by inserting additional padding
> between the entries because it has no clue that they are supposed to be in
> an array.  If we are unlucky, the linker will assign symbol
> "__earlycon_table" to a 32-byte aligned address which does not correpsond

correspond

> to the 64-byte alignbed contents of section "__earlycon_table".

aligned

>
> To address this same problem, the fix to the tracing system was
> subsequently re-implemented using a more robust table of pointers approach
> by commits:
>  3d56e331b653 ("tracing: Replace syscall_meta_data struct array with pointer array")
>  654986462939 ("tracepoints: Fix section alignment using pointer array")
>  e4a9ea5ee7c8 ("tracing: Replace trace_event struct array with pointer array")
>
> Let's use this same "array of pointers to structs" approach for
> EARLYCON_TABLE.
>
> Fixes: 99492c39f39f ("earlycon: Fix __earlycon_table stride")
> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
> Suggested-by: Aaron Durbin <adurbin@chromium.org>
> ---
> Changes since v1:
>  * added Suggested-by and Fixes, and reworded the commit message per Randy.
>
>  drivers/of/fdt.c                  |  7 +++++--
>  drivers/tty/serial/earlycon.c     |  6 ++++--
>  include/asm-generic/vmlinux.lds.h |  2 +-
>  include/linux/serial_core.h       | 21 ++++++++++++++-------
>  4 files changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
> index 84aa9d676375..6da20b9688f7 100644
> --- a/drivers/of/fdt.c
> +++ b/drivers/of/fdt.c
> @@ -942,7 +942,7 @@ int __init early_init_dt_scan_chosen_stdout(void)
>         int offset;
>         const char *p, *q, *options = NULL;
>         int l;
> -       const struct earlycon_id *match;
> +       const struct earlycon_id **p_match;
>         const void *fdt = initial_boot_params;
>
>         offset = fdt_path_offset(fdt, "/chosen");
> @@ -969,7 +969,10 @@ int __init early_init_dt_scan_chosen_stdout(void)
>                 return 0;
>         }
>
> -       for (match = __earlycon_table; match < __earlycon_table_end; match++) {
> +       for (p_match = __earlycon_table; p_match < __earlycon_table_end;
> +            p_match++) {
> +               const struct earlycon_id *match = *p_match;
> +
>                 if (!match->compatible[0])
>                         continue;
>
> diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
> index a24278380fec..22683393a0f2 100644
> --- a/drivers/tty/serial/earlycon.c
> +++ b/drivers/tty/serial/earlycon.c
> @@ -169,7 +169,7 @@ static int __init register_earlycon(char *buf, const struct earlycon_id *match)
>   */
>  int __init setup_earlycon(char *buf)
>  {
> -       const struct earlycon_id *match;
> +       const struct earlycon_id **p_match;
>
>         if (!buf || !buf[0])
>                 return -EINVAL;
> @@ -177,7 +177,9 @@ int __init setup_earlycon(char *buf)
>         if (early_con.flags & CON_ENABLED)
>                 return -EALREADY;
>
> -       for (match = __earlycon_table; match < __earlycon_table_end; match++) {
> +       for (p_match = __earlycon_table; p_match < __earlycon_table_end;
> +            p_match++) {
> +               const struct earlycon_id *match = *p_match;
>                 size_t len = strlen(match->name);
>
>                 if (strncmp(buf, match->name, len))
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index 1ab0e520d6fc..e17de55c2542 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -179,7 +179,7 @@
>  #endif
>
>  #ifdef CONFIG_SERIAL_EARLYCON
> -#define EARLYCON_TABLE() STRUCT_ALIGN();                       \
> +#define EARLYCON_TABLE() . = ALIGN(8);                         \
>                          VMLINUX_SYMBOL(__earlycon_table) = .;  \
>                          KEEP(*(__earlycon_table))              \
>                          VMLINUX_SYMBOL(__earlycon_table_end) = .;
> diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> index b32df49a3bd5..93b7add47087 100644
> --- a/include/linux/serial_core.h
> +++ b/include/linux/serial_core.h
> @@ -351,10 +351,10 @@ struct earlycon_id {
>         char    name[16];
>         char    compatible[128];
>         int     (*setup)(struct earlycon_device *, const char *options);
> -} __aligned(32);
> +};
>
> -extern const struct earlycon_id __earlycon_table[];
> -extern const struct earlycon_id __earlycon_table_end[];
> +extern const struct earlycon_id *__earlycon_table[];
> +extern const struct earlycon_id *__earlycon_table_end[];
>
>  #if defined(CONFIG_SERIAL_EARLYCON) && !defined(MODULE)
>  #define EARLYCON_USED_OR_UNUSED        __used
> @@ -362,12 +362,19 @@ extern const struct earlycon_id __earlycon_table_end[];
>  #define EARLYCON_USED_OR_UNUSED        __maybe_unused
>  #endif
>
> -#define OF_EARLYCON_DECLARE(_name, compat, fn)                         \
> -       static const struct earlycon_id __UNIQUE_ID(__earlycon_##_name) \
> -            EARLYCON_USED_OR_UNUSED __section(__earlycon_table)        \
> +#define _OF_EARLYCON_DECLARE(_name, compat, fn, unique_id)             \
> +       static const struct earlycon_id unique_id                       \
> +            EARLYCON_USED_OR_UNUSED __initdata                         \
>                 = { .name = __stringify(_name),                         \
>                     .compatible = compat,                               \
> -                   .setup = fn  }
> +                   .setup = fn  };                                     \
> +       static const struct earlycon_id EARLYCON_USED_OR_UNUSED         \
> +               __section(__earlycon_table)                             \
> +               * const __PASTE(__p, unique_id) = &unique_id
> +
> +#define OF_EARLYCON_DECLARE(_name, compat, fn)                         \
> +       _OF_EARLYCON_DECLARE(_name, compat, fn,                         \
> +                            __UNIQUE_ID(__earlycon_##_name))
>
>  #define EARLYCON_DECLARE(_name, fn)    OF_EARLYCON_DECLARE(_name, "", fn)
>
> --
> 2.16.2.804.g6dcf76e118-goog
>

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

* Re: [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride
  2018-03-20 17:57 ` [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride Daniel Kurtz
  2018-03-20 18:19   ` Guenter Roeck
@ 2018-03-23  2:54   ` kbuild test robot
  1 sibling, 0 replies; 7+ messages in thread
From: kbuild test robot @ 2018-03-23  2:54 UTC (permalink / raw)
  To: Daniel Kurtz
  Cc: kbuild-all, Greg Kroah-Hartman, Matthias Kaehlcke, Guenter Roeck,
	adurbin, linux-kernel, Daniel Kurtz, Rob Herring, Frank Rowand,
	Jiri Slaby, Arnd Bergmann,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE,
	open list:SERIAL DRIVERS,
	open list:GENERIC INCLUDE/ASM HEADER FILES

[-- Attachment #1: Type: text/plain, Size: 2462 bytes --]

Hi Daniel,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tty/tty-testing]
[also build test ERROR on v4.16-rc6 next-20180322]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniel-Kurtz/serial-sh-sci-Remove-__initdata-attribute-for-struct-port_cfg/20180323-085004
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-testing
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

>> drivers/tty/serial/sh-sci.c:3293:81: error: early_driver causes a section type conflict with __UNIQUE_ID___earlycon_hscif44
    early_platform_init_buffer("earlyprintk", &sci_driver,
                                                                                    ^           
   drivers/tty/serial/sh-sci.c:3349:33: note: '__UNIQUE_ID___earlycon_hscif44' was declared here
    OF_EARLYCON_DECLARE(hscif, "renesas,hscif", hscif_early_console_setup);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim +3293 drivers/tty/serial/sh-sci.c

^1da177e drivers/serial/sh-sci.c     Linus Torvalds 2005-04-16  3291  
7b6fd3bf drivers/serial/sh-sci.c     Magnus Damm    2009-12-14  3292  #ifdef CONFIG_SERIAL_SH_SCI_CONSOLE
7b6fd3bf drivers/serial/sh-sci.c     Magnus Damm    2009-12-14 @3293  early_platform_init_buffer("earlyprintk", &sci_driver,
7b6fd3bf drivers/serial/sh-sci.c     Magnus Damm    2009-12-14  3294  			   early_serial_buf, ARRAY_SIZE(early_serial_buf));
7b6fd3bf drivers/serial/sh-sci.c     Magnus Damm    2009-12-14  3295  #endif
0b0cced1 drivers/tty/serial/sh-sci.c Yoshinori Sato 2015-12-24  3296  #ifdef CONFIG_SERIAL_SH_SCI_EARLYCON
2897809d drivers/tty/serial/sh-sci.c Daniel Kurtz   2018-03-20  3297  static struct plat_sci_port port_cfg;
0b0cced1 drivers/tty/serial/sh-sci.c Yoshinori Sato 2015-12-24  3298  

:::::: The code at line 3293 was first introduced by commit
:::::: 7b6fd3bf82c4901f6ba0101ba71a5c507c24f9cf sh-sci: Extend sh-sci driver with early console V2

:::::: TO: Magnus Damm <damm@opensource.se>
:::::: CC: Paul Mundt <lethal@linux-sh.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 62176 bytes --]

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

* Re: [PATCH v2 0/2] Fix __earlycon_table stride... again
  2018-03-20 17:57 [PATCH v2 0/2] Fix __earlycon_table stride... again Daniel Kurtz
  2018-03-20 17:57 ` [PATCH v2 1/2] serial: sh-sci: Remove __initdata attribute for struct 'port_cfg' Daniel Kurtz
  2018-03-20 17:57 ` [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride Daniel Kurtz
@ 2018-03-23 13:34 ` Greg Kroah-Hartman
  2018-03-24  4:49   ` Daniel Kurtz
  2 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-23 13:34 UTC (permalink / raw)
  To: Daniel Kurtz; +Cc: Matthias Kaehlcke, Guenter Roeck, adurbin, linux-kernel

On Tue, Mar 20, 2018 at 11:57:10AM -0600, Daniel Kurtz wrote:
> The __earlycon_table lives in a special "__earlycon_table" section.  The
> contents of this table are added using some macros that deposit individual
> struct earlycon_id entries into this section.  The linker then defines a symbol
> __earlycon_table that is supposed to contain the addresss of the first of these
> entries.  The code in earlycon.c and fdt.c then tries to access the memory
> pointed to by __earlycon_table as an array of struct earlycon_id entries.
> 
> Unfortunately, the compiler doesn't always place the entries such that they
> are an array.  Let's fix that.
> 
> Patch 1 of the series is a fix that should hopefully fix a kbuild error that
> seems to be triggered by Patch 2.

Doesn't seem like that worked :(

And I have a bunch of different versions of this patch in my to-review
queue, and I can't figure out which is the "latest" one.

Can you resend it, after getting the build error fixed, so I know which
to attempt to apply?

thanks,

greg k-h

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

* Re: [PATCH v2 0/2] Fix __earlycon_table stride... again
  2018-03-23 13:34 ` [PATCH v2 0/2] Fix __earlycon_table stride... again Greg Kroah-Hartman
@ 2018-03-24  4:49   ` Daniel Kurtz
  0 siblings, 0 replies; 7+ messages in thread
From: Daniel Kurtz @ 2018-03-24  4:49 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: mka, Guenter Roeck, adurbin, linux-kernel

On Fri, Mar 23, 2018 at 7:34 AM Greg Kroah-Hartman <
gregkh@linuxfoundation.org> wrote:

> On Tue, Mar 20, 2018 at 11:57:10AM -0600, Daniel Kurtz wrote:
> > The __earlycon_table lives in a special "__earlycon_table" section.  The
> > contents of this table are added using some macros that deposit
individual
> > struct earlycon_id entries into this section.  The linker then defines
a symbol
> > __earlycon_table that is supposed to contain the addresss of the first
of these
> > entries.  The code in earlycon.c and fdt.c then tries to access the
memory
> > pointed to by __earlycon_table as an array of struct earlycon_id
entries.
> >
> > Unfortunately, the compiler doesn't always place the entries such that
they
> > are an array.  Let's fix that.
> >
> > Patch 1 of the series is a fix that should hopefully fix a kbuild error
that
> > seems to be triggered by Patch 2.

> Doesn't seem like that worked :(

> And I have a bunch of different versions of this patch in my to-review
> queue, and I can't figure out which is the "latest" one.

> Can you resend it, after getting the build error fixed, so I know which
> to attempt to apply?

Please take Patch Set v5 (fixes kbuild errors and commit message typos):
https://patchwork.kernel.org/patch/10298043/

thanks,
-djk


> thanks,

> greg k-h

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

end of thread, other threads:[~2018-03-24  4:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-20 17:57 [PATCH v2 0/2] Fix __earlycon_table stride... again Daniel Kurtz
2018-03-20 17:57 ` [PATCH v2 1/2] serial: sh-sci: Remove __initdata attribute for struct 'port_cfg' Daniel Kurtz
2018-03-20 17:57 ` [PATCH v2 2/2] earlycon: Use a pointer table to fix __earlycon_table stride Daniel Kurtz
2018-03-20 18:19   ` Guenter Roeck
2018-03-23  2:54   ` kbuild test robot
2018-03-23 13:34 ` [PATCH v2 0/2] Fix __earlycon_table stride... again Greg Kroah-Hartman
2018-03-24  4:49   ` Daniel Kurtz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).