Message ID | 20230205030056.61345-1-jassisinghbrar@gmail.com |
---|---|
Headers | show |
Series | FWU: Handle meta-data in common code | expand |
Hi, On Sat, 4 Feb 2023 at 20:01, <jassisinghbrar@gmail.com> wrote: > > From: Jassi Brar <jaswinder.singh@linaro.org> > > The patchset reduces ~400 lines of code, while keeping the functionality same and making > meta-data operations much faster (by using cached structures). > > Issue: > meta-data copies (primary and secondary) are being handled by the backend/storage layer > instead of the common core in fwu.c (as also noted by Ilias) that is, gpt_blk.c manages > meta-data and similarly raw_mtd.c will have to do the same when it arrives. The code > could by make smaller, cleaner and optimised. > > Basic idea: > Introduce .read_mdata() and .write_mdata() in fwu_mdata_ops that simply read/write > meta-data copy. The core code takes care of integrity and redundancy of the meta-data, > as a result we can get rid of every other callback .get_mdata() .update_mdata() > .get_mdata_part_num() .read_mdata_partition() .write_mdata_partition() and the > corresponding wrapper functions thereby making the code 100s of LOC smaller. > > Get rid of fwu_check_mdata_validity() and fwu_mdata_check() which expected underlying > layer to manage and verify mdata copies. > Implement fwu_get_verified_mdata(struct fwu_mdata *mdata) public function that reads, > verifies and, if needed, fixes the meta-data copies. > > Verified copy of meta-data is now cached as 'g_mdata' in fwu.c, which avoids multiple > low-level expensive read and parse calls. > gpt meta-data partition numbers are now cached in gpt_blk.c, so that we don't have to do expensive part_get_info() and uid ops. > > Changes since v3: > * Fix error log wording > * call fwu_write_mdata() with part & PRIMARY_PART ? true: false > > Changes since v2: > * Drop whitespace changes > * Fix missing mdata copy before return > > Changes since v1: > * Fix typos and misc cosmetic changes > * Catch error returns > > > Jassi Brar (5): > fwu: gpt: use cached meta-data partition numbers > fwu: move meta-data management in core > fwu: gpt: implement read_mdata and write_mdata callbacks > fwu: meta-data: switch to management by common code > fwu: rename fwu_get_verified_mdata to fwu_get_mdata > > cmd/fwu_mdata.c | 17 +- > drivers/fwu-mdata/fwu-mdata-uclass.c | 151 +------------- > drivers/fwu-mdata/gpt_blk.c | 175 +++++----------- > include/fwu.h | 198 ++---------------- > lib/fwu_updates/fwu.c | 294 +++++++++++---------------- > 5 files changed, 207 insertions(+), 628 deletions(-) > > -- > 2.34.1 > Nice to see this. It would be great to expand the tests in test/dm/fwu_mdata.c at some point. Regards, Simon
On Sat, Feb 04, 2023 at 09:00:56PM -0600, jassisinghbrar@gmail.com wrote: > From: Jassi Brar <jaswinder.singh@linaro.org> > > The patchset reduces ~400 lines of code, while keeping the functionality same and making > meta-data operations much faster (by using cached structures). > > Issue: > meta-data copies (primary and secondary) are being handled by the backend/storage layer > instead of the common core in fwu.c (as also noted by Ilias) that is, gpt_blk.c manages > meta-data and similarly raw_mtd.c will have to do the same when it arrives. The code > could by make smaller, cleaner and optimised. > > Basic idea: > Introduce .read_mdata() and .write_mdata() in fwu_mdata_ops that simply read/write > meta-data copy. The core code takes care of integrity and redundancy of the meta-data, > as a result we can get rid of every other callback .get_mdata() .update_mdata() > .get_mdata_part_num() .read_mdata_partition() .write_mdata_partition() and the > corresponding wrapper functions thereby making the code 100s of LOC smaller. > > Get rid of fwu_check_mdata_validity() and fwu_mdata_check() which expected underlying > layer to manage and verify mdata copies. > Implement fwu_get_verified_mdata(struct fwu_mdata *mdata) public function that reads, > verifies and, if needed, fixes the meta-data copies. > > Verified copy of meta-data is now cached as 'g_mdata' in fwu.c, which avoids multiple > low-level expensive read and parse calls. > gpt meta-data partition numbers are now cached in gpt_blk.c, so that we don't have to do expensive part_get_info() and uid ops. > > Changes since v3: > * Fix error log wording > * call fwu_write_mdata() with part & PRIMARY_PART ? true: false > > Changes since v2: > * Drop whitespace changes > * Fix missing mdata copy before return > > Changes since v1: > * Fix typos and misc cosmetic changes > * Catch error returns > > > Jassi Brar (5): > fwu: gpt: use cached meta-data partition numbers > fwu: move meta-data management in core > fwu: gpt: implement read_mdata and write_mdata callbacks > fwu: meta-data: switch to management by common code > fwu: rename fwu_get_verified_mdata to fwu_get_mdata > > cmd/fwu_mdata.c | 17 +- > drivers/fwu-mdata/fwu-mdata-uclass.c | 151 +------------- > drivers/fwu-mdata/gpt_blk.c | 175 +++++----------- > include/fwu.h | 198 ++---------------- > lib/fwu_updates/fwu.c | 294 +++++++++++---------------- > 5 files changed, 207 insertions(+), 628 deletions(-) FWIW, aside from the failure I reported, everything else seems fine.
From: Jassi Brar <jaswinder.singh@linaro.org> The patchset reduces ~400 lines of code, while keeping the functionality same and making meta-data operations much faster (by using cached structures). Issue: meta-data copies (primary and secondary) are being handled by the backend/storage layer instead of the common core in fwu.c (as also noted by Ilias) that is, gpt_blk.c manages meta-data and similarly raw_mtd.c will have to do the same when it arrives. The code could by make smaller, cleaner and optimised. Basic idea: Introduce .read_mdata() and .write_mdata() in fwu_mdata_ops that simply read/write meta-data copy. The core code takes care of integrity and redundancy of the meta-data, as a result we can get rid of every other callback .get_mdata() .update_mdata() .get_mdata_part_num() .read_mdata_partition() .write_mdata_partition() and the corresponding wrapper functions thereby making the code 100s of LOC smaller. Get rid of fwu_check_mdata_validity() and fwu_mdata_check() which expected underlying layer to manage and verify mdata copies. Implement fwu_get_verified_mdata(struct fwu_mdata *mdata) public function that reads, verifies and, if needed, fixes the meta-data copies. Verified copy of meta-data is now cached as 'g_mdata' in fwu.c, which avoids multiple low-level expensive read and parse calls. gpt meta-data partition numbers are now cached in gpt_blk.c, so that we don't have to do expensive part_get_info() and uid ops. Changes since v3: * Fix error log wording * call fwu_write_mdata() with part & PRIMARY_PART ? true: false Changes since v2: * Drop whitespace changes * Fix missing mdata copy before return Changes since v1: * Fix typos and misc cosmetic changes * Catch error returns Jassi Brar (5): fwu: gpt: use cached meta-data partition numbers fwu: move meta-data management in core fwu: gpt: implement read_mdata and write_mdata callbacks fwu: meta-data: switch to management by common code fwu: rename fwu_get_verified_mdata to fwu_get_mdata cmd/fwu_mdata.c | 17 +- drivers/fwu-mdata/fwu-mdata-uclass.c | 151 +------------- drivers/fwu-mdata/gpt_blk.c | 175 +++++----------- include/fwu.h | 198 ++---------------- lib/fwu_updates/fwu.c | 294 +++++++++++---------------- 5 files changed, 207 insertions(+), 628 deletions(-)