netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
@ 2019-09-12 11:29 Jiri Pirko
  2019-09-12 11:29 ` [patch iproute2-next v4 1/2] devlink: implement flash update status monitoring Jiri Pirko
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jiri Pirko @ 2019-09-12 11:29 UTC (permalink / raw)
  To: netdev; +Cc: stephen, dsahern, jakub.kicinski, saeedm, mlxsw, f.fainelli

From: Jiri Pirko <jiri@mellanox.com>

I was under impression they are already merged, but apparently they are
not. I just rebased them on top of current iproute2 net-next tree.

Jiri Pirko (2):
  devlink: implement flash update status monitoring
  devlink: implement flash status monitoring

 devlink/devlink.c      | 258 ++++++++++++++++++++++++++++++++++++++++-
 devlink/mnlg.c         |   5 +
 devlink/mnlg.h         |   1 +
 man/man8/devlink-dev.8 |  11 ++
 4 files changed, 271 insertions(+), 4 deletions(-)

-- 
2.20.1


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

* [patch iproute2-next v4 1/2] devlink: implement flash update status monitoring
  2019-09-12 11:29 [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches Jiri Pirko
@ 2019-09-12 11:29 ` Jiri Pirko
  2019-09-12 11:29 ` [patch iproute2-next v4 2/2] devlink: implement flash " Jiri Pirko
  2019-09-13 17:25 ` [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches David Ahern
  2 siblings, 0 replies; 9+ messages in thread
From: Jiri Pirko @ 2019-09-12 11:29 UTC (permalink / raw)
  To: netdev; +Cc: stephen, dsahern, jakub.kicinski, saeedm, mlxsw, f.fainelli

From: Jiri Pirko <jiri@mellanox.com>

Kernel sends notifications about flash update status, so implement these
messages for monitoring.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v3->v4:
- rebased (traps)
---
 devlink/devlink.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/devlink/devlink.c b/devlink/devlink.c
index 2f084c020765..31c319e3ef7a 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -443,6 +443,10 @@ static const enum mnl_attr_data_type devlink_policy[DEVLINK_ATTR_MAX + 1] = {
 	[DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT] = MNL_TYPE_U64,
 	[DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS] = MNL_TYPE_U64,
 	[DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = MNL_TYPE_U64,
+	[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT] = MNL_TYPE_STRING,
+	[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG] = MNL_TYPE_STRING,
+	[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE] = MNL_TYPE_U64,
+	[DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL] = MNL_TYPE_U64,
 	[DEVLINK_ATTR_STATS] = MNL_TYPE_NESTED,
 	[DEVLINK_ATTR_TRAP_NAME] = MNL_TYPE_STRING,
 	[DEVLINK_ATTR_TRAP_ACTION] = MNL_TYPE_U8,
@@ -3878,6 +3882,9 @@ static const char *cmd_name(uint8_t cmd)
 	case DEVLINK_CMD_REGION_SET: return "set";
 	case DEVLINK_CMD_REGION_NEW: return "new";
 	case DEVLINK_CMD_REGION_DEL: return "del";
+	case DEVLINK_CMD_FLASH_UPDATE: return "begin";
+	case DEVLINK_CMD_FLASH_UPDATE_END: return "end";
+	case DEVLINK_CMD_FLASH_UPDATE_STATUS: return "status";
 	case DEVLINK_CMD_TRAP_GET: return "get";
 	case DEVLINK_CMD_TRAP_SET: return "set";
 	case DEVLINK_CMD_TRAP_NEW: return "new";
@@ -3914,6 +3921,10 @@ static const char *cmd_obj(uint8_t cmd)
 	case DEVLINK_CMD_REGION_NEW:
 	case DEVLINK_CMD_REGION_DEL:
 		return "region";
+	case DEVLINK_CMD_FLASH_UPDATE:
+	case DEVLINK_CMD_FLASH_UPDATE_END:
+	case DEVLINK_CMD_FLASH_UPDATE_STATUS:
+		return "flash";
 	case DEVLINK_CMD_TRAP_GET:
 	case DEVLINK_CMD_TRAP_SET:
 	case DEVLINK_CMD_TRAP_NEW:
@@ -3948,6 +3959,29 @@ static bool cmd_filter_check(struct dl *dl, uint8_t cmd)
 	return false;
 }
 
+static void pr_out_flash_update(struct dl *dl, struct nlattr **tb)
+{
+	__pr_out_handle_start(dl, tb, true, false);
+
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG])
+		pr_out_str(dl, "msg",
+			   mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG]));
+
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT])
+		pr_out_str(dl, "component",
+			   mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT]));
+
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE])
+		pr_out_u64(dl, "done",
+			   mnl_attr_get_u64(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE]));
+
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL])
+		pr_out_u64(dl, "total",
+			   mnl_attr_get_u64(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL]));
+
+	pr_out_handle_end(dl);
+}
+
 static void pr_out_region(struct dl *dl, struct nlattr **tb);
 static void pr_out_trap(struct dl *dl, struct nlattr **tb, bool array);
 static void pr_out_trap_group(struct dl *dl, struct nlattr **tb, bool array);
@@ -4006,6 +4040,15 @@ static int cmd_mon_show_cb(const struct nlmsghdr *nlh, void *data)
 		pr_out_mon_header(genl->cmd);
 		pr_out_region(dl, tb);
 		break;
+	case DEVLINK_CMD_FLASH_UPDATE: /* fall through */
+	case DEVLINK_CMD_FLASH_UPDATE_END: /* fall through */
+	case DEVLINK_CMD_FLASH_UPDATE_STATUS:
+		mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb);
+		if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME])
+			return MNL_CB_ERROR;
+		pr_out_mon_header(genl->cmd);
+		pr_out_flash_update(dl, tb);
+		break;
 	case DEVLINK_CMD_TRAP_GET: /* fall through */
 	case DEVLINK_CMD_TRAP_SET: /* fall through */
 	case DEVLINK_CMD_TRAP_NEW: /* fall through */
-- 
2.20.1


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

* [patch iproute2-next v4 2/2] devlink: implement flash status monitoring
  2019-09-12 11:29 [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches Jiri Pirko
  2019-09-12 11:29 ` [patch iproute2-next v4 1/2] devlink: implement flash update status monitoring Jiri Pirko
@ 2019-09-12 11:29 ` Jiri Pirko
  2019-09-13 17:25 ` [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches David Ahern
  2 siblings, 0 replies; 9+ messages in thread
From: Jiri Pirko @ 2019-09-12 11:29 UTC (permalink / raw)
  To: netdev; +Cc: stephen, dsahern, jakub.kicinski, saeedm, mlxsw, f.fainelli

From: Jiri Pirko <jiri@mellanox.com>

Listen to status notifications coming from kernel during flashing and
put them on stdout to inform user about the status.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v3->v4:
- rebased (traps, pr_x conversion)
v2->v3:
- added example in man
v1->v2:
- fixed endless loop bug in case of no notifications
---
 devlink/devlink.c      | 215 ++++++++++++++++++++++++++++++++++++++++-
 devlink/mnlg.c         |   5 +
 devlink/mnlg.h         |   1 +
 man/man8/devlink-dev.8 |  11 +++
 4 files changed, 228 insertions(+), 4 deletions(-)

diff --git a/devlink/devlink.c b/devlink/devlink.c
index 31c319e3ef7a..00ebfb598515 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -25,6 +25,7 @@
 #include <linux/devlink.h>
 #include <libmnl/libmnl.h>
 #include <netinet/ether.h>
+#include <sys/types.h>
 
 #include "SNAPSHOT.h"
 #include "list.h"
@@ -96,6 +97,18 @@ pr_out_sp(unsigned int num, const char *fmt, ...)
 	g_new_line_count = 0;			\
 }
 
+static void __attribute__((format(printf, 1, 2)))
+pr_out_tty(const char *fmt, ...)
+{
+	va_list ap;
+
+	if (!isatty(STDOUT_FILENO))
+		return;
+	va_start(ap, fmt);
+	vprintf(fmt, ap);
+	va_end(ap);
+}
+
 static void __pr_out_indent_inc(void)
 {
 	if (g_indent_level + INDENT_STR_STEP > INDENT_STR_MAXLEN)
@@ -135,9 +148,8 @@ static int _mnlg_socket_recv_run(struct mnlg_socket *nlg,
 	return 0;
 }
 
-static int _mnlg_socket_sndrcv(struct mnlg_socket *nlg,
-			       const struct nlmsghdr *nlh,
-			       mnl_cb_t data_cb, void *data)
+static int _mnlg_socket_send(struct mnlg_socket *nlg,
+			     const struct nlmsghdr *nlh)
 {
 	int err;
 
@@ -146,6 +158,18 @@ static int _mnlg_socket_sndrcv(struct mnlg_socket *nlg,
 		pr_err("Failed to call mnlg_socket_send\n");
 		return -errno;
 	}
+	return 0;
+}
+
+static int _mnlg_socket_sndrcv(struct mnlg_socket *nlg,
+			       const struct nlmsghdr *nlh,
+			       mnl_cb_t data_cb, void *data)
+{
+	int err;
+
+	err = _mnlg_socket_send(nlg, nlh);
+	if (err)
+		return err;
 	return _mnlg_socket_recv_run(nlg, data_cb, data);
 }
 
@@ -2830,9 +2854,151 @@ static void cmd_dev_flash_help(void)
 	pr_err("Usage: devlink dev flash DEV file PATH [ component NAME ]\n");
 }
 
+
+struct cmd_dev_flash_status_ctx {
+	struct dl *dl;
+	char *last_msg;
+	char *last_component;
+	uint8_t not_first:1,
+		last_pc:1,
+		received_end:1,
+		flash_done:1;
+};
+
+static int nullstrcmp(const char *str1, const char *str2)
+{
+	if (str1 && str2)
+		return strcmp(str1, str2);
+	if (!str1 && !str2)
+		return 0;
+	return str1 ? 1 : -1;
+}
+
+static int cmd_dev_flash_status_cb(const struct nlmsghdr *nlh, void *data)
+{
+	struct cmd_dev_flash_status_ctx *ctx = data;
+	struct dl_opts *opts = &ctx->dl->opts;
+	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
+	struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {};
+	const char *component = NULL;
+	uint64_t done = 0, total = 0;
+	const char *msg = NULL;
+	const char *bus_name;
+	const char *dev_name;
+
+	if (genl->cmd != DEVLINK_CMD_FLASH_UPDATE_STATUS &&
+	    genl->cmd != DEVLINK_CMD_FLASH_UPDATE_END)
+		return MNL_CB_STOP;
+
+	mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb);
+	if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME])
+		return MNL_CB_ERROR;
+	bus_name = mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]);
+	dev_name = mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]);
+	if (strcmp(bus_name, opts->bus_name) ||
+	    strcmp(dev_name, opts->dev_name))
+		return MNL_CB_ERROR;
+
+	if (genl->cmd == DEVLINK_CMD_FLASH_UPDATE_END && ctx->not_first) {
+		pr_out("\n");
+		free(ctx->last_msg);
+		free(ctx->last_component);
+		ctx->received_end = 1;
+		return MNL_CB_STOP;
+	}
+
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG])
+		msg = mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG]);
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT])
+		component = mnl_attr_get_str(tb[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT]);
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE])
+		done = mnl_attr_get_u64(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE]);
+	if (tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL])
+		total = mnl_attr_get_u64(tb[DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL]);
+
+	if (!nullstrcmp(msg, ctx->last_msg) &&
+	    !nullstrcmp(component, ctx->last_component) &&
+	    ctx->last_pc && ctx->not_first) {
+		pr_out_tty("\b\b\b\b\b"); /* clean percentage */
+	} else {
+		if (ctx->not_first)
+			pr_out("\n");
+		if (component) {
+			pr_out("[%s] ", component);
+			free(ctx->last_component);
+			ctx->last_component = strdup(component);
+		}
+		if (msg) {
+			pr_out("%s", msg);
+			free(ctx->last_msg);
+			ctx->last_msg = strdup(msg);
+		}
+	}
+	if (total) {
+		pr_out_tty(" %3lu%%", (done * 100) / total);
+		ctx->last_pc = 1;
+	} else {
+		ctx->last_pc = 0;
+	}
+	fflush(stdout);
+	ctx->not_first = 1;
+
+	return MNL_CB_STOP;
+}
+
+static int cmd_dev_flash_fds_process(struct cmd_dev_flash_status_ctx *ctx,
+				     struct mnlg_socket *nlg_ntf,
+				     int pipe_r)
+{
+	int nlfd = mnlg_socket_get_fd(nlg_ntf);
+	fd_set fds[3];
+	int fdmax;
+	int i;
+	int err;
+	int err2;
+
+	for (i = 0; i < 3; i++)
+		FD_ZERO(&fds[i]);
+	FD_SET(pipe_r, &fds[0]);
+	fdmax = pipe_r + 1;
+	FD_SET(nlfd, &fds[0]);
+	if (nlfd >= fdmax)
+		fdmax = nlfd + 1;
+
+	while (select(fdmax, &fds[0], &fds[1], &fds[2], NULL) < 0) {
+		if (errno == EINTR)
+			continue;
+		pr_err("select() failed\n");
+		return -errno;
+	}
+	if (FD_ISSET(nlfd, &fds[0])) {
+		err = _mnlg_socket_recv_run(nlg_ntf,
+					    cmd_dev_flash_status_cb, ctx);
+		if (err)
+			return err;
+	}
+	if (FD_ISSET(pipe_r, &fds[0])) {
+		err = read(pipe_r, &err2, sizeof(err2));
+		if (err == -1) {
+			pr_err("Failed to read pipe\n");
+			return -errno;
+		}
+		if (err2)
+			return err2;
+		ctx->flash_done = 1;
+	}
+	return 0;
+}
+
+
 static int cmd_dev_flash(struct dl *dl)
 {
+	struct cmd_dev_flash_status_ctx ctx = {.dl = dl,};
+	struct mnlg_socket *nlg_ntf;
 	struct nlmsghdr *nlh;
+	int pipe_r, pipe_w;
+	int pipe_fds[2];
+	pid_t pid;
 	int err;
 
 	if (dl_argv_match(dl, "help") || dl_no_arg(dl)) {
@@ -2848,7 +3014,48 @@ static int cmd_dev_flash(struct dl *dl)
 	if (err)
 		return err;
 
-	return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+	nlg_ntf = mnlg_socket_open(DEVLINK_GENL_NAME, DEVLINK_GENL_VERSION);
+	if (!nlg_ntf)
+		return err;
+
+	err = _mnlg_socket_group_add(nlg_ntf, DEVLINK_GENL_MCGRP_CONFIG_NAME);
+	if (err)
+		return err;
+
+	err = pipe(pipe_fds);
+	if (err == -1)
+		return -errno;
+	pipe_r = pipe_fds[0];
+	pipe_w = pipe_fds[1];
+
+	pid = fork();
+	if (pid == -1) {
+		close(pipe_r);
+		close(pipe_w);
+		return -errno;
+	} else if (!pid) {
+		/* In child, just execute the flash and pass returned
+		 * value through pipe once it is done.
+		 */
+		close(pipe_r);
+		err = _mnlg_socket_send(dl->nlg, nlh);
+		write(pipe_w, &err, sizeof(err));
+		close(pipe_w);
+		exit(0);
+	}
+	close(pipe_w);
+
+	do {
+		err = cmd_dev_flash_fds_process(&ctx, nlg_ntf, pipe_r);
+		if (err)
+			goto out;
+	} while (!ctx.flash_done || (ctx.not_first && !ctx.received_end));
+
+	err = _mnlg_socket_recv_run(dl->nlg, NULL, NULL);
+out:
+	close(pipe_r);
+	mnlg_socket_close(nlg_ntf);
+	return err;
 }
 
 static int cmd_dev(struct dl *dl)
diff --git a/devlink/mnlg.c b/devlink/mnlg.c
index ee125df042f0..c7d25e8713a1 100644
--- a/devlink/mnlg.c
+++ b/devlink/mnlg.c
@@ -320,3 +320,8 @@ void mnlg_socket_close(struct mnlg_socket *nlg)
 	free(nlg->buf);
 	free(nlg);
 }
+
+int mnlg_socket_get_fd(struct mnlg_socket *nlg)
+{
+	return mnl_socket_get_fd(nlg->nl);
+}
diff --git a/devlink/mnlg.h b/devlink/mnlg.h
index 4d1babf3b4c2..61bc5a3f31aa 100644
--- a/devlink/mnlg.h
+++ b/devlink/mnlg.h
@@ -23,5 +23,6 @@ int mnlg_socket_recv_run(struct mnlg_socket *nlg, mnl_cb_t data_cb, void *data);
 int mnlg_socket_group_add(struct mnlg_socket *nlg, const char *group_name);
 struct mnlg_socket *mnlg_socket_open(const char *family_name, uint8_t version);
 void mnlg_socket_close(struct mnlg_socket *nlg);
+int mnlg_socket_get_fd(struct mnlg_socket *nlg);
 
 #endif /* _MNLG_H_ */
diff --git a/man/man8/devlink-dev.8 b/man/man8/devlink-dev.8
index 1804463b2321..1021ee8d064c 100644
--- a/man/man8/devlink-dev.8
+++ b/man/man8/devlink-dev.8
@@ -244,6 +244,17 @@ Sets the parameter internal_error_reset of specified devlink device to true.
 devlink dev reload pci/0000:01:00.0
 .RS 4
 Performs hot reload of specified devlink device.
+.RE
+.PP
+devlink dev flash pci/0000:01:00.0 file firmware.bin
+.RS 4
+Flashes the specified devlink device with provided firmware file name. If the driver supports it, user gets updates about the flash status. For example:
+.br
+Preparing to flash
+.br
+Flashing 100%
+.br
+Flashing done
 
 .SH SEE ALSO
 .BR devlink (8),
-- 
2.20.1


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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-12 11:29 [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches Jiri Pirko
  2019-09-12 11:29 ` [patch iproute2-next v4 1/2] devlink: implement flash update status monitoring Jiri Pirko
  2019-09-12 11:29 ` [patch iproute2-next v4 2/2] devlink: implement flash " Jiri Pirko
@ 2019-09-13 17:25 ` David Ahern
  2019-09-14  6:00   ` Jiri Pirko
  2 siblings, 1 reply; 9+ messages in thread
From: David Ahern @ 2019-09-13 17:25 UTC (permalink / raw)
  To: Jiri Pirko, netdev; +Cc: stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

On 9/12/19 12:29 PM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
> 
> I was under impression they are already merged, but apparently they are
> not. I just rebased them on top of current iproute2 net-next tree.
> 

they were not forgotten; they were dropped asking for changes.

thread is here:
https://lore.kernel.org/netdev/20190604134450.2839-3-jiri@resnulli.us/

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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-13 17:25 ` [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches David Ahern
@ 2019-09-14  6:00   ` Jiri Pirko
  2019-09-15 17:58     ` David Ahern
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Pirko @ 2019-09-14  6:00 UTC (permalink / raw)
  To: David Ahern; +Cc: netdev, stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

Fri, Sep 13, 2019 at 07:25:07PM CEST, dsahern@gmail.com wrote:
>On 9/12/19 12:29 PM, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@mellanox.com>
>> 
>> I was under impression they are already merged, but apparently they are
>> not. I just rebased them on top of current iproute2 net-next tree.
>> 
>
>they were not forgotten; they were dropped asking for changes.
>
>thread is here:
>https://lore.kernel.org/netdev/20190604134450.2839-3-jiri@resnulli.us/

Well not really. The path was discussed in the thread. However, that is
unrelated to the changes these patches do. The flashing itself is
already there and present. These patches only add status.

Did I missed something?

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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-14  6:00   ` Jiri Pirko
@ 2019-09-15 17:58     ` David Ahern
  2019-09-16  5:31       ` Jiri Pirko
  2019-09-16 10:09       ` Jiri Pirko
  0 siblings, 2 replies; 9+ messages in thread
From: David Ahern @ 2019-09-15 17:58 UTC (permalink / raw)
  To: Jiri Pirko, David Ahern
  Cc: netdev, stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

On 9/14/19 12:00 AM, Jiri Pirko wrote:
> Fri, Sep 13, 2019 at 07:25:07PM CEST, dsahern@gmail.com wrote:
>> On 9/12/19 12:29 PM, Jiri Pirko wrote:
>>> From: Jiri Pirko <jiri@mellanox.com>
>>>
>>> I was under impression they are already merged, but apparently they are
>>> not. I just rebased them on top of current iproute2 net-next tree.
>>>
>>
>> they were not forgotten; they were dropped asking for changes.
>>
>> thread is here:
>> https://lore.kernel.org/netdev/20190604134450.2839-3-jiri@resnulli.us/
> 
> Well not really. The path was discussed in the thread. However, that is
> unrelated to the changes these patches do. The flashing itself is
> already there and present. These patches only add status.
> 
> Did I missed something?
> 

you are thinking like a kernel developer and not a user.

The second patch has a man page change that should state that firmware
files are expected to be in /lib/firmware and that path is added by the
kernel so the path passed on the command line needs to drop that part.

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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-15 17:58     ` David Ahern
@ 2019-09-16  5:31       ` Jiri Pirko
  2019-09-16 10:09       ` Jiri Pirko
  1 sibling, 0 replies; 9+ messages in thread
From: Jiri Pirko @ 2019-09-16  5:31 UTC (permalink / raw)
  To: David Ahern; +Cc: netdev, stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

Sun, Sep 15, 2019 at 07:58:33PM CEST, dsahern@gmail.com wrote:
>On 9/14/19 12:00 AM, Jiri Pirko wrote:
>> Fri, Sep 13, 2019 at 07:25:07PM CEST, dsahern@gmail.com wrote:
>>> On 9/12/19 12:29 PM, Jiri Pirko wrote:
>>>> From: Jiri Pirko <jiri@mellanox.com>
>>>>
>>>> I was under impression they are already merged, but apparently they are
>>>> not. I just rebased them on top of current iproute2 net-next tree.
>>>>
>>>
>>> they were not forgotten; they were dropped asking for changes.
>>>
>>> thread is here:
>>> https://lore.kernel.org/netdev/20190604134450.2839-3-jiri@resnulli.us/
>> 
>> Well not really. The path was discussed in the thread. However, that is
>> unrelated to the changes these patches do. The flashing itself is
>> already there and present. These patches only add status.
>> 
>> Did I missed something?
>> 
>
>you are thinking like a kernel developer and not a user.
>
>The second patch has a man page change that should state that firmware
>files are expected to be in /lib/firmware and that path is added by the
>kernel so the path passed on the command line needs to drop that part.

ok

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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-15 17:58     ` David Ahern
  2019-09-16  5:31       ` Jiri Pirko
@ 2019-09-16 10:09       ` Jiri Pirko
  2019-09-16 14:49         ` David Ahern
  1 sibling, 1 reply; 9+ messages in thread
From: Jiri Pirko @ 2019-09-16 10:09 UTC (permalink / raw)
  To: David Ahern; +Cc: netdev, stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

Sun, Sep 15, 2019 at 07:58:33PM CEST, dsahern@gmail.com wrote:
>On 9/14/19 12:00 AM, Jiri Pirko wrote:
>> Fri, Sep 13, 2019 at 07:25:07PM CEST, dsahern@gmail.com wrote:
>>> On 9/12/19 12:29 PM, Jiri Pirko wrote:
>>>> From: Jiri Pirko <jiri@mellanox.com>
>>>>
>>>> I was under impression they are already merged, but apparently they are
>>>> not. I just rebased them on top of current iproute2 net-next tree.
>>>>
>>>
>>> they were not forgotten; they were dropped asking for changes.
>>>
>>> thread is here:
>>> https://lore.kernel.org/netdev/20190604134450.2839-3-jiri@resnulli.us/
>> 
>> Well not really. The path was discussed in the thread. However, that is
>> unrelated to the changes these patches do. The flashing itself is
>> already there and present. These patches only add status.
>> 
>> Did I missed something?
>> 
>
>you are thinking like a kernel developer and not a user.
>
>The second patch has a man page change that should state that firmware
>files are expected to be in /lib/firmware and that path is added by the
>kernel so the path passed on the command line needs to drop that part.

The manpage change is just addition to the "EXAMPLES" section.
The fact that the file is expected to be in /lib/firmware is in the
devlink flash description right above:


   devlink dev flash - write device's non-volatile memory.
       DEV - specifies the devlink device to write to.

       file PATH - Path to the file which will be written into device's flash. The path needs to be relative to one of the directories
       searched by the kernel firmware loaded, such as /lib/firmware. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

       component NAME - If device stores multiple firmware images in non-volatile memory, this parameter may be used to indicate which
       firmware image should be written.  The value of NAME should match the component names from devlink dev info and may be driver-
       dependent.

EXAMPLES
       devlink dev show
           Shows the state of all devlink devices on the system.

       devlink dev show pci/0000:01:00.0
           Shows the state of specified devlink device.

       devlink dev eswitch show pci/0000:01:00.0
           Shows the eswitch mode of specified devlink device.

       devlink dev eswitch set pci/0000:01:00.0 mode switchdev
           Sets the eswitch mode of specified devlink device to switchdev.

       devlink dev param show pci/0000:01:00.0 name max_macs
           Shows the parameter max_macs attributes.

       devlink dev param set pci/0000:01:00.0 name internal_error_reset value true cmode runtime
           Sets the parameter internal_error_reset of specified devlink device to true.

       devlink dev reload pci/0000:01:00.0
           Performs hot reload of specified devlink device.

       devlink dev flash pci/0000:01:00.0 file firmware.bin
           Flashes the specified devlink device with provided firmware file name. If the driver supports it, user gets updates about the
           flash status. For example:
           Preparing to flash
           Flashing 100%
           Flashing done


I don't understand what is that you need :(

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

* Re: [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches
  2019-09-16 10:09       ` Jiri Pirko
@ 2019-09-16 14:49         ` David Ahern
  0 siblings, 0 replies; 9+ messages in thread
From: David Ahern @ 2019-09-16 14:49 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: netdev, stephen, jakub.kicinski, saeedm, mlxsw, f.fainelli

On 9/16/19 4:09 AM, Jiri Pirko wrote:
> The fact that the file is expected to be in /lib/firmware is in the
> devlink flash description right above:
> 
> 
>    devlink dev flash - write device's non-volatile memory.
>        DEV - specifies the devlink device to write to.
> 
>        file PATH - Path to the file which will be written into device's flash. The path needs to be relative to one of the directories
>        searched by the kernel firmware loaded, such as /lib/firmware. 

fine. applied both to iproute2-next.

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

end of thread, other threads:[~2019-09-16 14:49 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-12 11:29 [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches Jiri Pirko
2019-09-12 11:29 ` [patch iproute2-next v4 1/2] devlink: implement flash update status monitoring Jiri Pirko
2019-09-12 11:29 ` [patch iproute2-next v4 2/2] devlink: implement flash " Jiri Pirko
2019-09-13 17:25 ` [patch iproute2-next v4 0/2] devlink: couple forgotten flash patches David Ahern
2019-09-14  6:00   ` Jiri Pirko
2019-09-15 17:58     ` David Ahern
2019-09-16  5:31       ` Jiri Pirko
2019-09-16 10:09       ` Jiri Pirko
2019-09-16 14:49         ` David Ahern

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).