Message ID | 20231029034845.1169614-12-seanga2@gmail.com |
---|---|
State | Superseded |
Delegated to: | Dario Binacchi |
Headers | show |
Series | nand: Add sandbox tests | expand |
Sean, All, On Sun, Oct 29, 2023 at 4:49 AM Sean Anderson <seanga2@gmail.com> wrote: > > This performs the opposite of nand_register, allowing drivers to unregister > nand devices. This is probably unnecessary for most regular drivers, but we > expect sandbox drivers to get repeatedly bound/unbound, so this will help > avoid dangling pointers. > > Signed-off-by: Sean Anderson <seanga2@gmail.com> > --- > > drivers/mtd/nand/raw/nand.c | 17 +++++++++++++++++ > include/nand.h | 1 + > 2 files changed, 18 insertions(+) > > diff --git a/drivers/mtd/nand/raw/nand.c b/drivers/mtd/nand/raw/nand.c > index 3abd82068fb..80017b3dddd 100644 > --- a/drivers/mtd/nand/raw/nand.c > +++ b/drivers/mtd/nand/raw/nand.c > @@ -74,6 +74,23 @@ int nand_register(int devnum, struct mtd_info *mtd) > return 0; > } > > +void nand_unregister(struct mtd_info *mtd) > +{ > + int devnum = nand_mtd_to_devnum(mtd); > + > + if (devnum < 0) > + return; > + > + if (nand_curr_device == devnum) > + nand_curr_device = -1; > + > + total_nand_size -= mtd->size / 1024; > + > + del_mtd_device(nand_info[devnum]); > + > + nand_info[devnum] = NULL; > +} > + > #if !CONFIG_IS_ENABLED(SYS_NAND_SELF_INIT) > static void nand_init_chip(int i) > { > diff --git a/include/nand.h b/include/nand.h > index c1d7533aaac..fc584f5ef7a 100644 > --- a/include/nand.h > +++ b/include/nand.h > @@ -22,6 +22,7 @@ int nand_mtd_to_devnum(struct mtd_info *mtd); > #if CONFIG_IS_ENABLED(SYS_NAND_SELF_INIT) > void board_nand_init(void); > int nand_register(int devnum, struct mtd_info *mtd); > +void nand_unregister(struct mtd_info *mtd); > #else > struct nand_chip; > > -- > 2.37.1 > Reviewed-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> Thanks and regards, Dario
diff --git a/drivers/mtd/nand/raw/nand.c b/drivers/mtd/nand/raw/nand.c index 3abd82068fb..80017b3dddd 100644 --- a/drivers/mtd/nand/raw/nand.c +++ b/drivers/mtd/nand/raw/nand.c @@ -74,6 +74,23 @@ int nand_register(int devnum, struct mtd_info *mtd) return 0; } +void nand_unregister(struct mtd_info *mtd) +{ + int devnum = nand_mtd_to_devnum(mtd); + + if (devnum < 0) + return; + + if (nand_curr_device == devnum) + nand_curr_device = -1; + + total_nand_size -= mtd->size / 1024; + + del_mtd_device(nand_info[devnum]); + + nand_info[devnum] = NULL; +} + #if !CONFIG_IS_ENABLED(SYS_NAND_SELF_INIT) static void nand_init_chip(int i) { diff --git a/include/nand.h b/include/nand.h index c1d7533aaac..fc584f5ef7a 100644 --- a/include/nand.h +++ b/include/nand.h @@ -22,6 +22,7 @@ int nand_mtd_to_devnum(struct mtd_info *mtd); #if CONFIG_IS_ENABLED(SYS_NAND_SELF_INIT) void board_nand_init(void); int nand_register(int devnum, struct mtd_info *mtd); +void nand_unregister(struct mtd_info *mtd); #else struct nand_chip;
This performs the opposite of nand_register, allowing drivers to unregister nand devices. This is probably unnecessary for most regular drivers, but we expect sandbox drivers to get repeatedly bound/unbound, so this will help avoid dangling pointers. Signed-off-by: Sean Anderson <seanga2@gmail.com> --- drivers/mtd/nand/raw/nand.c | 17 +++++++++++++++++ include/nand.h | 1 + 2 files changed, 18 insertions(+)