Message ID | 20181119115121.7699-1-boris.brezillon@bootlin.com |
---|---|
State | Superseded |
Delegated to: | Jagannadha Sutradharudu Teki |
Headers | show |
Series | [U-Boot,1/9] mtd: Add a function to report when the MTD dev list has been updated | expand |
Crap! I forgot to pass -v2 to git format patch. On Mon, 19 Nov 2018 12:51:13 +0100 Boris Brezillon <boris.brezillon@bootlin.com> wrote: > We need to parse mtdparts/mtids again everytime a device has been > added/removed from the MTD list, but there's currently no way to know > when such an update has been done. > > Add an ->updated field to the idr struct that we set to true every time > a device is added/removed and expose a function returning the value > of this field and resetting it to false. > > Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> > --- > Changes in v2: > - None > --- > drivers/mtd/mtdcore.c | 16 +++++++++++++++- > include/linux/mtd/mtd.h | 1 + > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c > index fb6c779abbfe..7a15ded8c883 100644 > --- a/drivers/mtd/mtdcore.c > +++ b/drivers/mtd/mtdcore.c > @@ -87,14 +87,17 @@ struct idr_layer { > > struct idr { > struct idr_layer id[MAX_IDR_ID]; > + bool updated; > }; > > #define DEFINE_IDR(name) struct idr name; > > void idr_remove(struct idr *idp, int id) > { > - if (idp->id[id].used) > + if (idp->id[id].used) { > idp->id[id].used = 0; > + idp->updated = true; > + } > > return; > } > @@ -134,6 +137,7 @@ int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask) > if (idl->used == 0) { > idl->used = 1; > idl->ptr = ptr; > + idp->updated = true; > return i; > } > i++; > @@ -155,6 +159,16 @@ struct mtd_info *__mtd_next_device(int i) > } > EXPORT_SYMBOL_GPL(__mtd_next_device); > > +bool mtd_dev_list_updated(void) > +{ > + if (mtd_idr.updated) { > + mtd_idr.updated = false; > + return true; > + } > + > + return false; > +} > + > #ifndef __UBOOT__ > static LIST_HEAD(mtd_notifiers); > > diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h > index 68e591532492..d20ebd820289 100644 > --- a/include/linux/mtd/mtd.h > +++ b/include/linux/mtd/mtd.h > @@ -581,6 +581,7 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, > void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, > const uint64_t length, uint64_t *len_incl_bad, > int *truncated); > +bool mtd_dev_list_updated(void); > > /* drivers/mtd/mtd_uboot.c */ > int mtd_search_alternate_name(const char *mtdname, char *altname,
Hello Boris, Am 19.11.2018 um 13:40 schrieb Boris Brezillon: > Crap! I forgot to pass -v2 to git format patch. :-P Do you use u-boot:/tools/patman ? bye, Heiko > > On Mon, 19 Nov 2018 12:51:13 +0100 > Boris Brezillon <boris.brezillon@bootlin.com> wrote: > >> We need to parse mtdparts/mtids again everytime a device has been >> added/removed from the MTD list, but there's currently no way to know >> when such an update has been done. >> >> Add an ->updated field to the idr struct that we set to true every time >> a device is added/removed and expose a function returning the value >> of this field and resetting it to false. >> >> Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> >> --- >> Changes in v2: >> - None >> --- >> drivers/mtd/mtdcore.c | 16 +++++++++++++++- >> include/linux/mtd/mtd.h | 1 + >> 2 files changed, 16 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c >> index fb6c779abbfe..7a15ded8c883 100644 >> --- a/drivers/mtd/mtdcore.c >> +++ b/drivers/mtd/mtdcore.c >> @@ -87,14 +87,17 @@ struct idr_layer { >> >> struct idr { >> struct idr_layer id[MAX_IDR_ID]; >> + bool updated; >> }; >> >> #define DEFINE_IDR(name) struct idr name; >> >> void idr_remove(struct idr *idp, int id) >> { >> - if (idp->id[id].used) >> + if (idp->id[id].used) { >> idp->id[id].used = 0; >> + idp->updated = true; >> + } >> >> return; >> } >> @@ -134,6 +137,7 @@ int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask) >> if (idl->used == 0) { >> idl->used = 1; >> idl->ptr = ptr; >> + idp->updated = true; >> return i; >> } >> i++; >> @@ -155,6 +159,16 @@ struct mtd_info *__mtd_next_device(int i) >> } >> EXPORT_SYMBOL_GPL(__mtd_next_device); >> >> +bool mtd_dev_list_updated(void) >> +{ >> + if (mtd_idr.updated) { >> + mtd_idr.updated = false; >> + return true; >> + } >> + >> + return false; >> +} >> + >> #ifndef __UBOOT__ >> static LIST_HEAD(mtd_notifiers); >> >> diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h >> index 68e591532492..d20ebd820289 100644 >> --- a/include/linux/mtd/mtd.h >> +++ b/include/linux/mtd/mtd.h >> @@ -581,6 +581,7 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, >> void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, >> const uint64_t length, uint64_t *len_incl_bad, >> int *truncated); >> +bool mtd_dev_list_updated(void); >> >> /* drivers/mtd/mtd_uboot.c */ >> int mtd_search_alternate_name(const char *mtdname, char *altname, >
On Mon, 19 Nov 2018 14:30:28 +0100 Heiko Schocher <hs@denx.de> wrote: > Hello Boris, > > Am 19.11.2018 um 13:40 schrieb Boris Brezillon: > > Crap! I forgot to pass -v2 to git format patch. > > :-P > > Do you use u-boot:/tools/patman ? Nope, I don't, but I guess I should :-).
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index fb6c779abbfe..7a15ded8c883 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -87,14 +87,17 @@ struct idr_layer { struct idr { struct idr_layer id[MAX_IDR_ID]; + bool updated; }; #define DEFINE_IDR(name) struct idr name; void idr_remove(struct idr *idp, int id) { - if (idp->id[id].used) + if (idp->id[id].used) { idp->id[id].used = 0; + idp->updated = true; + } return; } @@ -134,6 +137,7 @@ int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask) if (idl->used == 0) { idl->used = 1; idl->ptr = ptr; + idp->updated = true; return i; } i++; @@ -155,6 +159,16 @@ struct mtd_info *__mtd_next_device(int i) } EXPORT_SYMBOL_GPL(__mtd_next_device); +bool mtd_dev_list_updated(void) +{ + if (mtd_idr.updated) { + mtd_idr.updated = false; + return true; + } + + return false; +} + #ifndef __UBOOT__ static LIST_HEAD(mtd_notifiers); diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 68e591532492..d20ebd820289 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -581,6 +581,7 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, const uint64_t length, uint64_t *len_incl_bad, int *truncated); +bool mtd_dev_list_updated(void); /* drivers/mtd/mtd_uboot.c */ int mtd_search_alternate_name(const char *mtdname, char *altname,
We need to parse mtdparts/mtids again everytime a device has been added/removed from the MTD list, but there's currently no way to know when such an update has been done. Add an ->updated field to the idr struct that we set to true every time a device is added/removed and expose a function returning the value of this field and resetting it to false. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> --- Changes in v2: - None --- drivers/mtd/mtdcore.c | 16 +++++++++++++++- include/linux/mtd/mtd.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-)