[PATCH v5] net/ice: support customized search path for DDP package
Zeng, ZhichaoX
zhichaox.zeng at intel.com
Fri Sep 20 10:34:55 CEST 2024
Hi Bruce, thanks for your reply.
> -----Original Message-----
> From: Richardson, Bruce <bruce.richardson at intel.com>
> Sent: Thursday, September 19, 2024 3:50 PM
> To: Zeng, ZhichaoX <zhichaox.zeng at intel.com>
> Cc: dev at dpdk.org
> Subject: Re: [PATCH v5] net/ice: support customized search path for DDP
> package
>
> On Thu, Sep 19, 2024 at 11:29:34AM +0800, Zhichao Zeng wrote:
> > This patch adds support for customizing firmware search path for DDP
> > package like the kernel behavior, it will read the search path from
> > "/sys/module/firmware_class/parameters/path", and try to load DDP
> > package.
> >
> > Also, updates documentation for loading the DDP package in ice.rst.
> >
> > Signed-off-by: Zhichao Zeng <zhichaox.zeng at intel.com>
> >
> > ---
> > v5: update documentation, fix code logic
> > v4: fix CI error
> > v3: update doc, fix code error
> > v2: separate the patch and rewrite the log
> > ---
<snip>
> > diff --git a/drivers/net/ice/ice_ethdev.c
> > b/drivers/net/ice/ice_ethdev.c index 304f959b7e..f0389cc4ee 100644
> > --- a/drivers/net/ice/ice_ethdev.c
> > +++ b/drivers/net/ice/ice_ethdev.c
> > @@ -1873,21 +1873,61 @@ ice_load_pkg_type(struct ice_hw *hw)
> > return package_type;
> > }
> >
> > +static int ice_read_customized_path(char *pkg_file, uint16_t
> > +buff_len) {
> > + FILE *fp = fopen(ICE_PKG_FILE_CUSTOMIZED_PATH, "r");
> > + int ret = 0;
> > +
> > + if (fp == NULL) {
> > + PMD_INIT_LOG(INFO, "Failed to read CUSTOMIZED_PATH");
> > + return -EIO;
> > + }
> > +
> > + if (fgets(pkg_file, buff_len, fp) == NULL) {
> > + ret = -EIO;
> > + goto exit;
> > + }
> > +
> > + if (strlen(pkg_file) <= 1)
> > + goto exit;
> > +
> > + pkg_file[strlen(pkg_file) - 1] = '\0';
>
> This line is unnecessary and, if it were necessary, also incorrect:
> * fgets already guarantees to null-terminate
> * if it didn't null terminate, then strlen wouldn't even work so this
> statement would be completely broken.
>
> Also, as this line is unnecessary, the lines above it, and the label below are
> unnecessary too.
The string read by fgets ends with "\n", my intention was to remove the newline.
> > +exit:
> > + fclose(fp);
> > + return ret;
> > +}
> > +
> > int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t
> > dsn) {
> > struct ice_hw *hw = &adapter->hw;
> > char pkg_file[ICE_MAX_PKG_FILENAME_SIZE];
> > + char customized_path[ICE_MAX_PKG_FILENAME_SIZE];
> > char opt_ddp_filename[ICE_MAX_PKG_FILENAME_SIZE];
> > void *buf;
> > size_t bufsz;
> > int err;
> >
> > - if (!use_dsn)
> > - goto no_dsn;
> > + ice_read_customized_path(customized_path,
> > +ICE_MAX_PKG_FILENAME_SIZE);
> >
> > memset(opt_ddp_filename, 0, ICE_MAX_PKG_FILENAME_SIZE);
> > snprintf(opt_ddp_filename, ICE_MAX_PKG_FILENAME_SIZE,
> > "ice-%016" PRIx64 ".pkg", dsn);
> > +
> > + if (strlen(customized_path) > 1) {
>
> Is this really the best way to check for validity of the search path?
> I would tend to ignore length and use the return value from the function
> "ice_read_customized_path". Again, maybe check the logic used in the kernel
> for validating the path read.
Will use the return value instead of string length and check the logic in kernel.
>
> > + if (use_dsn) {
> > + snprintf(pkg_file, RTE_DIM(pkg_file),
> > + "%s/%s", customized_path,
> opt_ddp_filename);
> > + if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0)
> > + goto load_fw;
> > + }
> > + snprintf(pkg_file, RTE_DIM(pkg_file), "%s/%s",
> customized_path, "ice.pkg");
> > + if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0)
> > + goto load_fw;
> > + }
> > +
> > + if (!use_dsn)
> > + goto no_dsn;
> > +
>
> This is changing the search path logic compared to v4. Does it match what the
> kernel does in finding a package?
>
The kernel searches for DDP packages in the CUSTOMIZED_PATH first, then the default path.
Regards
Zhichao
> > strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_UPDATES,
> > ICE_MAX_PKG_FILENAME_SIZE);
> > strcat(pkg_file, opt_ddp_filename);
> > diff --git a/drivers/net/ice/ice_ethdev.h
> > b/drivers/net/ice/ice_ethdev.h index 3ea9f37dc8..8b644ed700 100644
> > --- a/drivers/net/ice/ice_ethdev.h
> > +++ b/drivers/net/ice/ice_ethdev.h
> > @@ -51,6 +51,7 @@
> > #define ICE_PKG_FILE_UPDATES
> "/lib/firmware/updates/intel/ice/ddp/ice.pkg"
> > #define ICE_PKG_FILE_SEARCH_PATH_DEFAULT
> "/lib/firmware/intel/ice/ddp/"
> > #define ICE_PKG_FILE_SEARCH_PATH_UPDATES
> "/lib/firmware/updates/intel/ice/ddp/"
> > +#define ICE_PKG_FILE_CUSTOMIZED_PATH
> "/sys/module/firmware_class/parameters/path"
> > #define ICE_MAX_PKG_FILENAME_SIZE 256
> >
> > #define MAX_ACL_NORMAL_ENTRIES 256
> > --
> > 2.34.1
> >
More information about the dev
mailing list