[lkml]   [2012]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[RFC PATCH] spi/bcm63xx: Ensure that memory is freed only after it is no longer used
    The call to spi_unregister_master() in the device remove function frees device
    memory, and with it any device local data. However, device local data is still
    accessed after the call to spi_unregister_master().

    Acquire a reference to the SPI device and release it after cleanup is complete
    to solve the problem.

    Cc: Florian Fainelli <>
    Signed-off-by: Guenter Roeck <>
    Several drivers have this problem, and I am trying to find a common fix.

    This solution is modeled after the approach used in spi-txx9spi:txx9spi_remove.
    The other possible fix would be to move spi_unregister_master() to the end of
    bcm63xx_spi_remove(), but I am not sure if it is a good idea to clean up
    before the call to spi_unregister_master().

    drivers/spi/spi-bcm63xx.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
    index 6e25ef1..ea0aaa3 100644
    --- a/drivers/spi/spi-bcm63xx.c
    +++ b/drivers/spi/spi-bcm63xx.c
    @@ -438,7 +438,7 @@ out:

    static int __devexit bcm63xx_spi_remove(struct platform_device *pdev)
    - struct spi_master *master = platform_get_drvdata(pdev);
    + struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
    struct bcm63xx_spi *bs = spi_master_get_devdata(master);

    @@ -452,6 +452,8 @@ static int __devexit bcm63xx_spi_remove(struct platform_device *pdev)

    platform_set_drvdata(pdev, 0);

    + spi_master_put(master);
    return 0;


     \ /
      Last update: 2012-08-10 23:22    [W:0.022 / U:5.680 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site