* [iproute2-next 0/2] devlink: add flash update overwrite mask @ 2020-09-29 23:42 Jacob Keller 2020-09-29 23:42 ` [iproute2-next 1/2] Update kernel headers for devlink Jacob Keller 2020-09-29 23:42 ` [iproute2-next 2/2] devlink: support setting the overwrite mask Jacob Keller 0 siblings, 2 replies; 4+ messages in thread From: Jacob Keller @ 2020-09-29 23:42 UTC (permalink / raw) To: netdev; +Cc: dsahern, Jacob Keller This series implements the iproute2 side of the new DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK. This attribute is used to allow userspace to indicate what a device should do with various subsections of a flash component when updating. For example, a flash component might contain vital data such as the PCIe serial number or configuration fields such as settings that control device bootup. The overwrite mask allows the user to specify what behavior they want when performing an update. If nothing is specified, then the update should preserve all vital fields and configuration. By specifying "overwrite identifiers" the user requests that the flash update should overwrite any identifiers in the updated flash component with identifier values from the provided flash image. $devlink dev flash pci/0000:af:00.0 file flash_image.bin overwrite identifiers By specifying "overwrite settings" the user requests that the flash update should overwrite any settings in the updated flash component with setting values from the provided flash image. $devlink dev flash pci/0000:af:00.0 file flash_image.bin overwrite settings These options may be combined, in which case both subsections will be sent in the overwrite mask, resulting in a request to overwrite all settings and identifiers stored in the updated flash components. $devlink dev flash pci/0000:af:00.0 file flash_image.bin overwrite settings overwrite identifiers Jacob Keller (2): Update kernel headers for devlink devlink: support setting the overwrite mask devlink/devlink.c | 48 ++++++++++++++++++++++++++++++++++-- include/uapi/linux/devlink.h | 2 ++ 2 files changed, 48 insertions(+), 2 deletions(-) base-commit: d2be31d9b671ec0b3e32f56f9c913e249ed048bd -- 2.28.0.497.g54e85e7af1ac ^ permalink raw reply [flat|nested] 4+ messages in thread
* [iproute2-next 1/2] Update kernel headers for devlink 2020-09-29 23:42 [iproute2-next 0/2] devlink: add flash update overwrite mask Jacob Keller @ 2020-09-29 23:42 ` Jacob Keller 2020-09-29 23:42 ` [iproute2-next 2/2] devlink: support setting the overwrite mask Jacob Keller 1 sibling, 0 replies; 4+ messages in thread From: Jacob Keller @ 2020-09-29 23:42 UTC (permalink / raw) To: netdev; +Cc: dsahern, Jacob Keller The recent changes to support an overwrite mask require the _BITUL macro to be included. The uapi/linux/devlink.h header did not include <linux/const> resulting in compile failures using the macros that relied upon it. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> --- include/uapi/linux/devlink.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 39f5cadc7f07..92498c204e42 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -13,6 +13,8 @@ #ifndef _LINUX_DEVLINK_H_ #define _LINUX_DEVLINK_H_ +#include <linux/const.h> + #define DEVLINK_GENL_NAME "devlink" #define DEVLINK_GENL_VERSION 0x1 #define DEVLINK_GENL_MCGRP_CONFIG_NAME "config" -- 2.28.0.497.g54e85e7af1ac ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [iproute2-next 2/2] devlink: support setting the overwrite mask 2020-09-29 23:42 [iproute2-next 0/2] devlink: add flash update overwrite mask Jacob Keller 2020-09-29 23:42 ` [iproute2-next 1/2] Update kernel headers for devlink Jacob Keller @ 2020-09-29 23:42 ` Jacob Keller 2020-09-30 15:53 ` David Ahern 1 sibling, 1 reply; 4+ messages in thread From: Jacob Keller @ 2020-09-29 23:42 UTC (permalink / raw) To: netdev; +Cc: dsahern, Jacob Keller Add support for specifying the overwrite sections to allow in the flash update command. This is done by adding a new "overwrite" option which can take either "settings" or "identifiers" passing the overwrite mode multiple times will combine the fields using bitwise-OR. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> --- devlink/devlink.c | 48 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 0374175eda3d..5cf2cd194788 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -302,6 +302,7 @@ static void ifname_map_free(struct ifname_map *ifname_map) #define DL_OPT_TRAP_POLICER_BURST BIT(36) #define DL_OPT_HEALTH_REPORTER_AUTO_DUMP BIT(37) #define DL_OPT_PORT_FUNCTION_HW_ADDR BIT(38) +#define DL_OPT_FLASH_OVERWRITE BIT(39) struct dl_opts { uint64_t present; /* flags of present items */ @@ -349,6 +350,7 @@ struct dl_opts { uint64_t trap_policer_burst; char port_function_hw_addr[MAX_ADDR_LEN]; uint32_t port_function_hw_addr_len; + uint32_t overwrite_mask; }; struct dl { @@ -1285,6 +1287,19 @@ eswitch_encap_mode_get(const char *typestr, return 0; } +static int flash_overwrite_section_get(const char *sectionstr, uint32_t *mask) +{ + if (strcmp(sectionstr, "settings") == 0) { + *mask |= DEVLINK_FLASH_OVERWRITE_SETTINGS; + } else if (strcmp(sectionstr, "identifiers") == 0) { + *mask |= DEVLINK_FLASH_OVERWRITE_IDENTIFIERS; + } else { + pr_err("Unknown overwrite section \"%s\"\n", sectionstr); + return -EINVAL; + } + return 0; +} + static int param_cmode_get(const char *cmodestr, enum devlink_param_cmode *cmode) { @@ -1627,6 +1642,21 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required, if (err) return err; o_found |= DL_OPT_FLASH_COMPONENT; + + } else if (dl_argv_match(dl, "overwrite") && + (o_all & DL_OPT_FLASH_OVERWRITE)) { + const char *sectionstr; + + dl_arg_inc(dl); + err = dl_argv_str(dl, §ionstr); + if(err) + return err; + err = flash_overwrite_section_get(sectionstr, + &opts->overwrite_mask); + if (err) + return err; + o_found |= DL_OPT_FLASH_OVERWRITE; + } else if (dl_argv_match(dl, "reporter") && (o_all & DL_OPT_HEALTH_REPORTER_NAME)) { dl_arg_inc(dl); @@ -1767,6 +1797,18 @@ dl_function_attr_put(struct nlmsghdr *nlh, const struct dl_opts *opts) mnl_attr_nest_end(nlh, nest); } +static void +dl_flash_update_overwrite_put(struct nlmsghdr *nlh, const struct dl_opts *opts) +{ + struct nla_bitfield32 overwrite_mask; + + overwrite_mask.selector = DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS; + overwrite_mask.value = opts->overwrite_mask; + + mnl_attr_put(nlh, DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK, + sizeof(overwrite_mask), &overwrite_mask); +} + static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl) { struct dl_opts *opts = &dl->opts; @@ -1854,6 +1896,8 @@ static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl) if (opts->present & DL_OPT_FLASH_COMPONENT) mnl_attr_put_strz(nlh, DEVLINK_ATTR_FLASH_UPDATE_COMPONENT, opts->flash_component); + if (opts->present & DL_OPT_FLASH_OVERWRITE) + dl_flash_update_overwrite_put(nlh, opts); if (opts->present & DL_OPT_HEALTH_REPORTER_NAME) mnl_attr_put_strz(nlh, DEVLINK_ATTR_HEALTH_REPORTER_NAME, opts->reporter_name); @@ -1954,7 +1998,7 @@ static void cmd_dev_help(void) pr_err(" devlink dev param show [DEV name PARAMETER]\n"); pr_err(" devlink dev reload DEV [ netns { PID | NAME | ID } ]\n"); pr_err(" devlink dev info [ DEV ]\n"); - pr_err(" devlink dev flash DEV file PATH [ component NAME ]\n"); + pr_err(" devlink dev flash DEV file PATH [ component NAME ] [ overwrite SECTION ]\n"); } static bool cmp_arr_last_handle(struct dl *dl, const char *bus_name, @@ -3219,7 +3263,7 @@ static int cmd_dev_flash(struct dl *dl) NLM_F_REQUEST | NLM_F_ACK); err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_FLASH_FILE_NAME, - DL_OPT_FLASH_COMPONENT); + DL_OPT_FLASH_COMPONENT | DL_OPT_FLASH_OVERWRITE); if (err) return err; -- 2.28.0.497.g54e85e7af1ac ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [iproute2-next 2/2] devlink: support setting the overwrite mask 2020-09-29 23:42 ` [iproute2-next 2/2] devlink: support setting the overwrite mask Jacob Keller @ 2020-09-30 15:53 ` David Ahern 0 siblings, 0 replies; 4+ messages in thread From: David Ahern @ 2020-09-30 15:53 UTC (permalink / raw) To: Jacob Keller, netdev On 9/29/20 4:42 PM, Jacob Keller wrote: > Add support for specifying the overwrite sections to allow in the flash > update command. This is done by adding a new "overwrite" option which > can take either "settings" or "identifiers" passing the overwrite mode > multiple times will combine the fields using bitwise-OR. > per my last request, please roll the cover letter information into this patch log. Headers are updated by a sync, not individual patch sets making this a 1-patch set and the git log should contain the example commands and overview from the cover letter. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-09-30 15:53 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-09-29 23:42 [iproute2-next 0/2] devlink: add flash update overwrite mask Jacob Keller 2020-09-29 23:42 ` [iproute2-next 1/2] Update kernel headers for devlink Jacob Keller 2020-09-29 23:42 ` [iproute2-next 2/2] devlink: support setting the overwrite mask Jacob Keller 2020-09-30 15:53 ` David Ahern
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.