* [PATCH net-next v5 0/2] netconsole: Enable compile time configuration @ 2023-08-10 9:54 Breno Leitao 2023-08-10 9:54 ` [PATCH net-next v5 1/2] netconsole: Create a allocation helper Breno Leitao 2023-08-10 9:54 ` [PATCH net-next v5 2/2] netconsole: Enable compile time configuration Breno Leitao 0 siblings, 2 replies; 5+ messages in thread From: Breno Leitao @ 2023-08-10 9:54 UTC (permalink / raw) To: rdunlap, benjamin.poirier, davem, kuba, edumazet; +Cc: netdev, pabeni Enable netconsole features to be set at compilation time. Create two Kconfig options that allow users to set extended logs and release prepending features at compilation time. The first patch de-duplicates the initialization code, and the second patch adds the support in the de-duplicated code, avoiding touching two different functions with the same change. v1 -> v2: * Improvements in the Kconfig help section. v2 -> v3: * Honour the Kconfig settings when creating sysfs targets * Add "by default" in a Kconfig help. v3 -> v4: * Create an additional patch, de-duplicating the initialization code for netconsole_target, and just patching it. v4 -> v5: * Remove complex code in the variable initialization. Breno Leitao (2): netconsole: Create a allocation helper netconsole: Enable compile time configuration drivers/net/Kconfig | 22 +++++++++++++++++++ drivers/net/netconsole.c | 47 +++++++++++++++++++++++----------------- 2 files changed, 49 insertions(+), 20 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v5 1/2] netconsole: Create a allocation helper 2023-08-10 9:54 [PATCH net-next v5 0/2] netconsole: Enable compile time configuration Breno Leitao @ 2023-08-10 9:54 ` Breno Leitao 2023-08-10 20:17 ` Simon Horman 2023-08-10 9:54 ` [PATCH net-next v5 2/2] netconsole: Enable compile time configuration Breno Leitao 1 sibling, 1 reply; 5+ messages in thread From: Breno Leitao @ 2023-08-10 9:54 UTC (permalink / raw) To: rdunlap, benjamin.poirier, davem, kuba, edumazet, Paolo Abeni Cc: netdev, open list De-duplicate the initialization and allocation code for struct netconsole_target. The same allocation and initialization code is duplicated in two different places in the netconsole subsystem, when the netconsole target is initialized by command line parameters (alloc_param_target()), and dynamically by sysfs (make_netconsole_target()). Create a helper function, and call it from the two different functions. Suggested-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Breno Leitao <leitao@debian.org> --- drivers/net/netconsole.c | 42 +++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 87f18aedd3bd..f93b98d64a3c 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -167,19 +167,16 @@ static void netconsole_target_put(struct netconsole_target *nt) #endif /* CONFIG_NETCONSOLE_DYNAMIC */ -/* Allocate new target (from boot/module param) and setup netpoll for it */ -static struct netconsole_target *alloc_param_target(char *target_config) +/* Allocate and initialize with defaults. + * Note that these targets get their config_item fields zeroed-out. + */ +static struct netconsole_target *alloc_and_init(void) { - int err = -ENOMEM; struct netconsole_target *nt; - /* - * Allocate and initialize with defaults. - * Note that these targets get their config_item fields zeroed-out. - */ nt = kzalloc(sizeof(*nt), GFP_KERNEL); if (!nt) - goto fail; + return nt; nt->np.name = "netconsole"; strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); @@ -187,6 +184,21 @@ static struct netconsole_target *alloc_param_target(char *target_config) nt->np.remote_port = 6666; eth_broadcast_addr(nt->np.remote_mac); + return nt; +} + +/* Allocate new target (from boot/module param) and setup netpoll for it */ +static struct netconsole_target *alloc_param_target(char *target_config) +{ + struct netconsole_target *nt; + int err; + + nt = alloc_and_init(); + if (!nt) { + err = -ENOMEM; + goto fail; + } + if (*target_config == '+') { nt->extended = true; target_config++; @@ -664,23 +676,13 @@ static const struct config_item_type netconsole_target_type = { static struct config_item *make_netconsole_target(struct config_group *group, const char *name) { - unsigned long flags; struct netconsole_target *nt; + unsigned long flags; - /* - * Allocate and initialize with defaults. - * Target is disabled at creation (!enabled). - */ - nt = kzalloc(sizeof(*nt), GFP_KERNEL); + nt = alloc_and_init(); if (!nt) return ERR_PTR(-ENOMEM); - nt->np.name = "netconsole"; - strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); - nt->np.local_port = 6665; - nt->np.remote_port = 6666; - eth_broadcast_addr(nt->np.remote_mac); - /* Initialize the config_item member */ config_item_init_type_name(&nt->item, name, &netconsole_target_type); -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v5 1/2] netconsole: Create a allocation helper 2023-08-10 9:54 ` [PATCH net-next v5 1/2] netconsole: Create a allocation helper Breno Leitao @ 2023-08-10 20:17 ` Simon Horman 2023-08-11 8:58 ` Breno Leitao 0 siblings, 1 reply; 5+ messages in thread From: Simon Horman @ 2023-08-10 20:17 UTC (permalink / raw) To: Breno Leitao Cc: rdunlap, benjamin.poirier, davem, kuba, edumazet, Paolo Abeni, netdev, open list On Thu, Aug 10, 2023 at 02:54:50AM -0700, Breno Leitao wrote: > De-duplicate the initialization and allocation code for struct > netconsole_target. > > The same allocation and initialization code is duplicated in two > different places in the netconsole subsystem, when the netconsole target > is initialized by command line parameters (alloc_param_target()), and > dynamically by sysfs (make_netconsole_target()). > > Create a helper function, and call it from the two different functions. > > Suggested-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: Breno Leitao <leitao@debian.org> > --- > drivers/net/netconsole.c | 42 +++++++++++++++++++++------------------- > 1 file changed, 22 insertions(+), 20 deletions(-) > > diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c > index 87f18aedd3bd..f93b98d64a3c 100644 > --- a/drivers/net/netconsole.c > +++ b/drivers/net/netconsole.c > @@ -167,19 +167,16 @@ static void netconsole_target_put(struct netconsole_target *nt) > > #endif /* CONFIG_NETCONSOLE_DYNAMIC */ > > -/* Allocate new target (from boot/module param) and setup netpoll for it */ > -static struct netconsole_target *alloc_param_target(char *target_config) > +/* Allocate and initialize with defaults. > + * Note that these targets get their config_item fields zeroed-out. > + */ > +static struct netconsole_target *alloc_and_init(void) > { > - int err = -ENOMEM; > struct netconsole_target *nt; > > - /* > - * Allocate and initialize with defaults. > - * Note that these targets get their config_item fields zeroed-out. > - */ > nt = kzalloc(sizeof(*nt), GFP_KERNEL); > if (!nt) > - goto fail; > + return nt; > > nt->np.name = "netconsole"; > strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); > @@ -187,6 +184,21 @@ static struct netconsole_target *alloc_param_target(char *target_config) > nt->np.remote_port = 6666; > eth_broadcast_addr(nt->np.remote_mac); > > + return nt; > +} > + > +/* Allocate new target (from boot/module param) and setup netpoll for it */ > +static struct netconsole_target *alloc_param_target(char *target_config) > +{ > + struct netconsole_target *nt; > + int err; Hi Breno, This function returns err. However, clang-16 W=1 and Smatch warn that there is a case where this may occur without err having being initialised. > + > + nt = alloc_and_init(); > + if (!nt) { > + err = -ENOMEM; > + goto fail; > + } > + > if (*target_config == '+') { > nt->extended = true; > target_config++; ... -- pw-bot: changes-requested ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v5 1/2] netconsole: Create a allocation helper 2023-08-10 20:17 ` Simon Horman @ 2023-08-11 8:58 ` Breno Leitao 0 siblings, 0 replies; 5+ messages in thread From: Breno Leitao @ 2023-08-11 8:58 UTC (permalink / raw) To: Simon Horman Cc: rdunlap, benjamin.poirier, davem, kuba, edumazet, Paolo Abeni, netdev, open list Hello Simon, On Thu, Aug 10, 2023 at 10:17:18PM +0200, Simon Horman wrote: > On Thu, Aug 10, 2023 at 02:54:50AM -0700, Breno Leitao wrote: > > De-duplicate the initialization and allocation code for struct > > netconsole_target. > > > > The same allocation and initialization code is duplicated in two > > different places in the netconsole subsystem, when the netconsole target > > is initialized by command line parameters (alloc_param_target()), and > > dynamically by sysfs (make_netconsole_target()). > > > > Create a helper function, and call it from the two different functions. > > > > Suggested-by: Eric Dumazet <edumazet@google.com> > > Signed-off-by: Breno Leitao <leitao@debian.org> > > --- > > drivers/net/netconsole.c | 42 +++++++++++++++++++++------------------- > > 1 file changed, 22 insertions(+), 20 deletions(-) > > > > diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c > > index 87f18aedd3bd..f93b98d64a3c 100644 > > --- a/drivers/net/netconsole.c > > +++ b/drivers/net/netconsole.c > > @@ -167,19 +167,16 @@ static void netconsole_target_put(struct netconsole_target *nt) > > > > #endif /* CONFIG_NETCONSOLE_DYNAMIC */ > > > > -/* Allocate new target (from boot/module param) and setup netpoll for it */ > > -static struct netconsole_target *alloc_param_target(char *target_config) > > +/* Allocate and initialize with defaults. > > + * Note that these targets get their config_item fields zeroed-out. > > + */ > > +static struct netconsole_target *alloc_and_init(void) > > { > > - int err = -ENOMEM; > > struct netconsole_target *nt; > > > > - /* > > - * Allocate and initialize with defaults. > > - * Note that these targets get their config_item fields zeroed-out. > > - */ > > nt = kzalloc(sizeof(*nt), GFP_KERNEL); > > if (!nt) > > - goto fail; > > + return nt; > > > > nt->np.name = "netconsole"; > > strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); > > @@ -187,6 +184,21 @@ static struct netconsole_target *alloc_param_target(char *target_config) > > nt->np.remote_port = 6666; > > eth_broadcast_addr(nt->np.remote_mac); > > > > + return nt; > > +} > > + > > +/* Allocate new target (from boot/module param) and setup netpoll for it */ > > +static struct netconsole_target *alloc_param_target(char *target_config) > > +{ > > + struct netconsole_target *nt; > > + int err; > > Hi Breno, > > This function returns err. > However, clang-16 W=1 and Smatch warn that there is a case > where this may occur without err having being initialised. That can really happen, if we get into this function: if (*target_config == 'r') { if (!nt->extended) { pr_err("Netconsole configuration error. Release feature requires extended log message"); goto fail; fail: return ERR_PTR(err); Let me update it. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v5 2/2] netconsole: Enable compile time configuration 2023-08-10 9:54 [PATCH net-next v5 0/2] netconsole: Enable compile time configuration Breno Leitao 2023-08-10 9:54 ` [PATCH net-next v5 1/2] netconsole: Create a allocation helper Breno Leitao @ 2023-08-10 9:54 ` Breno Leitao 1 sibling, 0 replies; 5+ messages in thread From: Breno Leitao @ 2023-08-10 9:54 UTC (permalink / raw) To: rdunlap, benjamin.poirier, davem, kuba, edumazet, Paolo Abeni Cc: netdev, open list Enable netconsole features to be set at compilation time. Create two Kconfig options that allow users to set extended logs and release prepending features at compilation time. Right now, the user needs to pass command line parameters to netconsole, such as "+"/"r" to enable extended logs and version prepending features. With these two options, the user could set the default values for the features at compile time, and don't need to pass it in the command line to get them enabled, simplifying the command line. Signed-off-by: Breno Leitao <leitao@debian.org> --- drivers/net/Kconfig | 22 ++++++++++++++++++++++ drivers/net/netconsole.c | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 368c6f5b327e..55fb9509bcae 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -332,6 +332,28 @@ config NETCONSOLE_DYNAMIC at runtime through a userspace interface exported using configfs. See <file:Documentation/networking/netconsole.rst> for details. +config NETCONSOLE_EXTENDED_LOG + bool "Set kernel extended message by default" + depends on NETCONSOLE + default n + help + Set extended log support for netconsole message. If this option is + set, log messages are transmitted with extended metadata header in a + format similar to /dev/kmsg. See + <file:Documentation/networking/netconsole.rst> for details. + +config NETCONSOLE_PREPEND_RELEASE + bool "Prepend kernel release version in the message by default" + depends on NETCONSOLE_EXTENDED_LOG + default n + help + Set kernel release to be prepended to each netconsole message by + default. If this option is set, the kernel release is prepended into + the first field of every netconsole message, so, the netconsole + server/peer can easily identify what kernel release is logging each + message. See <file:Documentation/networking/netconsole.rst> for + details. + config NETPOLL def_bool NETCONSOLE diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index f93b98d64a3c..1dc56d6b1c15 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -178,6 +178,11 @@ static struct netconsole_target *alloc_and_init(void) if (!nt) return nt; + if (IS_ENABLED(CONFIG_NETCONSOLE_EXTENDED_LOG)) + nt->extended = true; + if (IS_ENABLED(CONFIG_NETCONSOLE_PREPEND_RELEASE)) + nt->release = true; + nt->np.name = "netconsole"; strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); nt->np.local_port = 6665; -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-08-11 8:58 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-08-10 9:54 [PATCH net-next v5 0/2] netconsole: Enable compile time configuration Breno Leitao 2023-08-10 9:54 ` [PATCH net-next v5 1/2] netconsole: Create a allocation helper Breno Leitao 2023-08-10 20:17 ` Simon Horman 2023-08-11 8:58 ` Breno Leitao 2023-08-10 9:54 ` [PATCH net-next v5 2/2] netconsole: Enable compile time configuration Breno Leitao
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).