• Axel Lin's avatar
    spi: bitbang: Let spi_bitbang_start() take a reference to master · 94c69f76
    Axel Lin authored
    Many drivers that use bitbang library have a leak on probe error paths.
    This is because once a spi_master_get() call succeeds, we need an additional
    spi_master_put() call to free the memory.
    
    Fix this issue by moving the code taking a reference to master to
    spi_bitbang_start(), so spi_bitbang_start() will take a reference to master on
    success. With this change, the caller is responsible for calling
    spi_bitbang_stop() to decrement the reference and spi_master_put() as
    counterpart of spi_alloc_master() to prevent a memory leak.
    
    So now we have below patten for drivers using bitbang library:
    
    probe:
    spi_alloc_master        -> Init reference count to 1
    spi_bitbang_start       -> Increment reference count
    remove:
    spi_bitbang_stop        -> Decrement reference count
    spi_master_put          -> Decrement reference count (reference count reaches 0)
    
    Fixup all users accordingly.
    Signed-off-by: default avatarAxel Lin <axel.lin@ingics.com>
    Suggested-by: default avatarUwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
    Acked-by: default avatarUwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    94c69f76
spi-efm32.c 11.9 KB