mbox series

[PATCHv4,0/5] FWU: Handle meta-data in common code

Message ID 20230205030056.61345-1-jassisinghbrar@gmail.com
Headers show
Series FWU: Handle meta-data in common code | expand

Message

Jassi Brar Feb. 5, 2023, 3 a.m. UTC
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(-)

Comments

Simon Glass Feb. 6, 2023, 10 p.m. UTC | #1
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
Tom Rini Feb. 21, 2023, 8:08 p.m. UTC | #2
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.