From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Sun, 9 Dec 2018 00:40:35 +0100 Subject: [U-Boot] [PATCH v4 01/11] mtd: Add a function to report when the MTD dev list has been updated In-Reply-To: <20181202095432.23713-2-boris.brezillon@bootlin.com> References: <20181202095432.23713-1-boris.brezillon@bootlin.com> <20181202095432.23713-2-boris.brezillon@bootlin.com> Message-ID: <20181209004035.1c9330ae@jawa> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Boris, > 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 > Tested-by: Heiko Schocher This series fixed a but on Vybrid, when I run several times "mtdpart default" after calling sf probe for two SPI-NOR memories. When I called "mtdpart default" for the second time, the mtd partitions were gone despite being visible with "mtdparts" command. Hence, Tested-by: Lukasz Majewski > --- > Changes in v4: > - Add T-b tag > > Changes in v2: > - None > > 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, Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: