mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-29 23:53:33 +08:00
dfu: dfu_sf: avoid double free of SPI device
Multiple DFU entities may share the same SPI device. We must make sure that the SPI device is only freed once. When using the driver model it is not necessary to free the SPI device. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Acked-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
parent
cbea241e93
commit
57cba225fa
@ -87,7 +87,23 @@ static unsigned int dfu_polltimeout_sf(struct dfu_entity *dfu)
|
||||
|
||||
static void dfu_free_entity_sf(struct dfu_entity *dfu)
|
||||
{
|
||||
spi_flash_free(dfu->data.sf.dev);
|
||||
/*
|
||||
* In the DM case it is not necessary to free the SPI device.
|
||||
* For the non-DM case we must ensure that the the SPI device is only
|
||||
* freed once.
|
||||
*/
|
||||
if (!CONFIG_IS_ENABLED(DM_SPI_FLASH)) {
|
||||
struct spi_flash *dev = dfu->data.sf.dev;
|
||||
|
||||
if (!dev)
|
||||
return;
|
||||
dfu->data.sf.dev = NULL;
|
||||
list_for_each_entry(dfu, &dfu_list, list) {
|
||||
if (dfu->data.sf.dev == dev)
|
||||
dfu->data.sf.dev = NULL;
|
||||
}
|
||||
spi_flash_free(dev);
|
||||
}
|
||||
}
|
||||
|
||||
static struct spi_flash *parse_dev(char *devstr)
|
||||
|
Loading…
Reference in New Issue
Block a user