* Fastmap update v2 (pile 7)
@ 2014-11-30 12:22 Richard Weinberger
2014-11-30 12:22 ` Richard Weinberger
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw)
To: dedekind1; +Cc: linux-mtd, linux-kernel
Artem,
this is pile 7 of 7.
[PATCH 1/4] UBI: Fastmap: Add blank line after declarations
[PATCH 2/4] Add drivers/mtd/ubi/fastmap-wl.c to MAINTAINERS file
[PATCH 3/4] UBI: Fastmap: Remove is_fm_block()
[PATCH 4/4] UBI: Fastmap: Optimize anchor PEB search
Thanks,
//richard
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/4] UBI: Fastmap: Add blank line after declarations 2014-11-30 12:22 Fastmap update v2 (pile 7) Richard Weinberger @ 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: Richard Weinberger, linux-mtd, linux-kernel Another checkpatch complaint: WARNING: Missing a blank line after declarations Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index 7a72af2..067aa90 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -21,6 +21,7 @@ static void update_fastmap_work_fn(struct work_struct *wrk) { struct ubi_device *ubi = container_of(wrk, struct ubi_device, fm_work); + ubi_update_fastmap(ubi); spin_lock(&ubi->wl_lock); ubi->fm_work_scheduled = 0; -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 1/4] UBI: Fastmap: Add blank line after declarations @ 2014-11-30 12:22 ` Richard Weinberger 0 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: linux-mtd, linux-kernel, Richard Weinberger Another checkpatch complaint: WARNING: Missing a blank line after declarations Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index 7a72af2..067aa90 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -21,6 +21,7 @@ static void update_fastmap_work_fn(struct work_struct *wrk) { struct ubi_device *ubi = container_of(wrk, struct ubi_device, fm_work); + ubi_update_fastmap(ubi); spin_lock(&ubi->wl_lock); ubi->fm_work_scheduled = 0; -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] Add drivers/mtd/ubi/fastmap-wl.c to MAINTAINERS file 2014-11-30 12:22 Fastmap update v2 (pile 7) Richard Weinberger @ 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: Richard Weinberger, linux-mtd, linux-kernel Signed-off-by: Richard Weinberger <richard@nod.at> --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index ea4d005..87d4d36 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9631,6 +9631,7 @@ M: Richard Weinberger <richard@nod.at> L: linux-mtd@lists.infradead.org S: Maintained F: drivers/mtd/ubi/fastmap.c +F: drivers/mtd/ubi/fastmap-wl.c USB ACM DRIVER M: Oliver Neukum <oliver@neukum.org> -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] Add drivers/mtd/ubi/fastmap-wl.c to MAINTAINERS file @ 2014-11-30 12:22 ` Richard Weinberger 0 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: linux-mtd, linux-kernel, Richard Weinberger Signed-off-by: Richard Weinberger <richard@nod.at> --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index ea4d005..87d4d36 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9631,6 +9631,7 @@ M: Richard Weinberger <richard@nod.at> L: linux-mtd@lists.infradead.org S: Maintained F: drivers/mtd/ubi/fastmap.c +F: drivers/mtd/ubi/fastmap-wl.c USB ACM DRIVER M: Oliver Neukum <oliver@neukum.org> -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] UBI: Fastmap: Remove is_fm_block() 2014-11-30 12:22 Fastmap update v2 (pile 7) Richard Weinberger @ 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: Richard Weinberger, linux-mtd, linux-kernel This function was added to fastmap in a very early stage to have paranoid assertions. With the current fastmap implementation this assert will never trigger as fastmap PEBs are not seen by the WL sub-system. Remove it to save us some CPU cycles. Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 19 ------------------- drivers/mtd/ubi/wl.c | 5 ----- drivers/mtd/ubi/wl.h | 5 ----- 3 files changed, 29 deletions(-) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index 067aa90..b2a6653 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -29,25 +29,6 @@ static void update_fastmap_work_fn(struct work_struct *wrk) } /** - * is_fm_block - returns 1 if a PEB is currently used in a fastmap. - * @ubi: UBI device description object - * @pnum: the to be checked PEB - */ -static int is_fm_block(struct ubi_device *ubi, int pnum) -{ - int i; - - if (!ubi->fm) - return 0; - - for (i = 0; i < ubi->fm->used_blocks; i++) - if (ubi->fm->e[i]->pnum == pnum) - return 1; - - return 0; -} - -/** * find_anchor_wl_entry - find wear-leveling entry to used as anchor PEB. * @root: the RB-tree where to look for */ diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c index c51c4e8..f642740 100644 --- a/drivers/mtd/ubi/wl.c +++ b/drivers/mtd/ubi/wl.c @@ -585,7 +585,6 @@ static int schedule_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, struct ubi_work *wl_wrk; ubi_assert(e); - ubi_assert(!is_fm_block(ubi, e->pnum)); dbg_wl("schedule erasure of PEB %d, EC %d, torture %d", e->pnum, e->ec, torture); @@ -1045,8 +1044,6 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, dbg_wl("erase PEB %d EC %d LEB %d:%d", pnum, e->ec, wl_wrk->vol_id, wl_wrk->lnum); - ubi_assert(!is_fm_block(ubi, e->pnum)); - err = sync_erase(ubi, e, wl_wrk->torture); if (!err) { /* Fine, we've erased it successfully */ @@ -1526,7 +1523,6 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai) e->pnum = aeb->pnum; e->ec = aeb->ec; - ubi_assert(!is_fm_block(ubi, e->pnum)); ubi->lookuptbl[e->pnum] = e; if (schedule_erase(ubi, e, aeb->vol_id, aeb->lnum, 0)) { wl_entry_destroy(ubi, e); @@ -1547,7 +1543,6 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai) e->pnum = aeb->pnum; e->ec = aeb->ec; ubi_assert(e->ec >= 0); - ubi_assert(!is_fm_block(ubi, e->pnum)); wl_tree_add(e, &ubi->free); ubi->free_count++; diff --git a/drivers/mtd/ubi/wl.h b/drivers/mtd/ubi/wl.h index fbc2d8e..bd1f07e 100644 --- a/drivers/mtd/ubi/wl.h +++ b/drivers/mtd/ubi/wl.h @@ -1,7 +1,6 @@ #ifndef UBI_WL_H #define UBI_WL_H #ifdef CONFIG_MTD_UBI_FASTMAP -static int is_fm_block(struct ubi_device *ubi, int pnum); static int anchor_pebs_avalible(struct rb_root *root); static void update_fastmap_work_fn(struct work_struct *wrk); static struct ubi_wl_entry *find_anchor_wl_entry(struct rb_root *root); @@ -18,10 +17,6 @@ static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi, struct rb_root *root); #else /* !CONFIG_MTD_UBI_FASTMAP */ static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi); -static inline int is_fm_block(struct ubi_device *ubi, int pnum) -{ - return 0; -} static inline void ubi_fastmap_close(struct ubi_device *ubi) { } static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi, -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] UBI: Fastmap: Remove is_fm_block() @ 2014-11-30 12:22 ` Richard Weinberger 0 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: linux-mtd, linux-kernel, Richard Weinberger This function was added to fastmap in a very early stage to have paranoid assertions. With the current fastmap implementation this assert will never trigger as fastmap PEBs are not seen by the WL sub-system. Remove it to save us some CPU cycles. Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 19 ------------------- drivers/mtd/ubi/wl.c | 5 ----- drivers/mtd/ubi/wl.h | 5 ----- 3 files changed, 29 deletions(-) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index 067aa90..b2a6653 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -29,25 +29,6 @@ static void update_fastmap_work_fn(struct work_struct *wrk) } /** - * is_fm_block - returns 1 if a PEB is currently used in a fastmap. - * @ubi: UBI device description object - * @pnum: the to be checked PEB - */ -static int is_fm_block(struct ubi_device *ubi, int pnum) -{ - int i; - - if (!ubi->fm) - return 0; - - for (i = 0; i < ubi->fm->used_blocks; i++) - if (ubi->fm->e[i]->pnum == pnum) - return 1; - - return 0; -} - -/** * find_anchor_wl_entry - find wear-leveling entry to used as anchor PEB. * @root: the RB-tree where to look for */ diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c index c51c4e8..f642740 100644 --- a/drivers/mtd/ubi/wl.c +++ b/drivers/mtd/ubi/wl.c @@ -585,7 +585,6 @@ static int schedule_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, struct ubi_work *wl_wrk; ubi_assert(e); - ubi_assert(!is_fm_block(ubi, e->pnum)); dbg_wl("schedule erasure of PEB %d, EC %d, torture %d", e->pnum, e->ec, torture); @@ -1045,8 +1044,6 @@ static int erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk, dbg_wl("erase PEB %d EC %d LEB %d:%d", pnum, e->ec, wl_wrk->vol_id, wl_wrk->lnum); - ubi_assert(!is_fm_block(ubi, e->pnum)); - err = sync_erase(ubi, e, wl_wrk->torture); if (!err) { /* Fine, we've erased it successfully */ @@ -1526,7 +1523,6 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai) e->pnum = aeb->pnum; e->ec = aeb->ec; - ubi_assert(!is_fm_block(ubi, e->pnum)); ubi->lookuptbl[e->pnum] = e; if (schedule_erase(ubi, e, aeb->vol_id, aeb->lnum, 0)) { wl_entry_destroy(ubi, e); @@ -1547,7 +1543,6 @@ int ubi_wl_init(struct ubi_device *ubi, struct ubi_attach_info *ai) e->pnum = aeb->pnum; e->ec = aeb->ec; ubi_assert(e->ec >= 0); - ubi_assert(!is_fm_block(ubi, e->pnum)); wl_tree_add(e, &ubi->free); ubi->free_count++; diff --git a/drivers/mtd/ubi/wl.h b/drivers/mtd/ubi/wl.h index fbc2d8e..bd1f07e 100644 --- a/drivers/mtd/ubi/wl.h +++ b/drivers/mtd/ubi/wl.h @@ -1,7 +1,6 @@ #ifndef UBI_WL_H #define UBI_WL_H #ifdef CONFIG_MTD_UBI_FASTMAP -static int is_fm_block(struct ubi_device *ubi, int pnum); static int anchor_pebs_avalible(struct rb_root *root); static void update_fastmap_work_fn(struct work_struct *wrk); static struct ubi_wl_entry *find_anchor_wl_entry(struct rb_root *root); @@ -18,10 +17,6 @@ static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi, struct rb_root *root); #else /* !CONFIG_MTD_UBI_FASTMAP */ static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi); -static inline int is_fm_block(struct ubi_device *ubi, int pnum) -{ - return 0; -} static inline void ubi_fastmap_close(struct ubi_device *ubi) { } static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi, -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] UBI: Fastmap: Optimize anchor PEB search 2014-11-30 12:22 Fastmap update v2 (pile 7) Richard Weinberger @ 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: Richard Weinberger, linux-mtd, linux-kernel The UBI RB trees are sorted by the PEB number, hence we don't have to traverse the whole tree because ubi_rb_for_each_entry() walks the tree in sort order. Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index b2a6653..c7ad2a7 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -39,7 +39,10 @@ static struct ubi_wl_entry *find_anchor_wl_entry(struct rb_root *root) int max_ec = UBI_MAX_ERASECOUNTER; ubi_rb_for_each_entry(p, e, root, u.rb) { - if (e->pnum < UBI_FM_MAX_START && e->ec < max_ec) { + if (e->pnum >= UBI_FM_MAX_START) + break; + + if (e->ec < max_ec) { victim = e; max_ec = e->ec; } @@ -74,6 +77,8 @@ static int anchor_pebs_avalible(struct rb_root *root) ubi_rb_for_each_entry(p, e, root, u.rb) if (e->pnum < UBI_FM_MAX_START) return 1; + else + break; return 0; } -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] UBI: Fastmap: Optimize anchor PEB search @ 2014-11-30 12:22 ` Richard Weinberger 0 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-11-30 12:22 UTC (permalink / raw) To: dedekind1; +Cc: linux-mtd, linux-kernel, Richard Weinberger The UBI RB trees are sorted by the PEB number, hence we don't have to traverse the whole tree because ubi_rb_for_each_entry() walks the tree in sort order. Signed-off-by: Richard Weinberger <richard@nod.at> --- drivers/mtd/ubi/fastmap-wl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c index b2a6653..c7ad2a7 100644 --- a/drivers/mtd/ubi/fastmap-wl.c +++ b/drivers/mtd/ubi/fastmap-wl.c @@ -39,7 +39,10 @@ static struct ubi_wl_entry *find_anchor_wl_entry(struct rb_root *root) int max_ec = UBI_MAX_ERASECOUNTER; ubi_rb_for_each_entry(p, e, root, u.rb) { - if (e->pnum < UBI_FM_MAX_START && e->ec < max_ec) { + if (e->pnum >= UBI_FM_MAX_START) + break; + + if (e->ec < max_ec) { victim = e; max_ec = e->ec; } @@ -74,6 +77,8 @@ static int anchor_pebs_avalible(struct rb_root *root) ubi_rb_for_each_entry(p, e, root, u.rb) if (e->pnum < UBI_FM_MAX_START) return 1; + else + break; return 0; } -- 1.8.4.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] UBI: Fastmap: Optimize anchor PEB search 2014-11-30 12:22 ` Richard Weinberger (?) @ 2014-12-05 15:23 ` Richard Weinberger -1 siblings, 0 replies; 10+ messages in thread From: Richard Weinberger @ 2014-12-05 15:23 UTC (permalink / raw) To: dedekind1; +Cc: linux-mtd, linux-kernel Am 30.11.2014 um 13:22 schrieb Richard Weinberger: > The UBI RB trees are sorted by the PEB number, hence > we don't have to traverse the whole tree because ubi_rb_for_each_entry() > walks the tree in sort order. > > Signed-off-by: Richard Weinberger <richard@nod.at> Please ignore this patch. It is horrible wrong. *facepalm*, //richard ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-12-05 15:23 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-11-30 12:22 Fastmap update v2 (pile 7) Richard Weinberger 2014-11-30 12:22 ` [PATCH 1/4] UBI: Fastmap: Add blank line after declarations Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` [PATCH 2/4] Add drivers/mtd/ubi/fastmap-wl.c to MAINTAINERS file Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` [PATCH 3/4] UBI: Fastmap: Remove is_fm_block() Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger 2014-11-30 12:22 ` [PATCH 4/4] UBI: Fastmap: Optimize anchor PEB search Richard Weinberger 2014-11-30 12:22 ` Richard Weinberger 2014-12-05 15:23 ` Richard Weinberger
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.