lkml.org 
[lkml]   [2020]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 186/367] crypto: picoxcell - adjust the position of tasklet_init and fix missed tasklet_kill
    Date
    From: Chuhong Yuan <hslester96@gmail.com>

    commit 7f8c36fe9be46862c4f3c5302f769378028a34fa upstream.

    Since tasklet is needed to be initialized before registering IRQ
    handler, adjust the position of tasklet_init to fix the wrong order.

    Besides, to fix the missed tasklet_kill, this patch adds a helper
    function and uses devm_add_action to kill the tasklet automatically.

    Fixes: ce92136843cb ("crypto: picoxcell - add support for the picoxcell crypto engines")
    Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/crypto/picoxcell_crypto.c | 15 +++++++++++++--
    1 file changed, 13 insertions(+), 2 deletions(-)

    --- a/drivers/crypto/picoxcell_crypto.c
    +++ b/drivers/crypto/picoxcell_crypto.c
    @@ -1595,6 +1595,11 @@ static const struct of_device_id spacc_o
    MODULE_DEVICE_TABLE(of, spacc_of_id_table);
    #endif /* CONFIG_OF */

    +static void spacc_tasklet_kill(void *data)
    +{
    + tasklet_kill(data);
    +}
    +
    static int spacc_probe(struct platform_device *pdev)
    {
    int i, err, ret;
    @@ -1637,6 +1642,14 @@ static int spacc_probe(struct platform_d
    return -ENXIO;
    }

    + tasklet_init(&engine->complete, spacc_spacc_complete,
    + (unsigned long)engine);
    +
    + ret = devm_add_action(&pdev->dev, spacc_tasklet_kill,
    + &engine->complete);
    + if (ret)
    + return ret;
    +
    if (devm_request_irq(&pdev->dev, irq->start, spacc_spacc_irq, 0,
    engine->name, engine)) {
    dev_err(engine->dev, "failed to request IRQ\n");
    @@ -1694,8 +1707,6 @@ static int spacc_probe(struct platform_d
    INIT_LIST_HEAD(&engine->completed);
    INIT_LIST_HEAD(&engine->in_progress);
    engine->in_flight = 0;
    - tasklet_init(&engine->complete, spacc_spacc_complete,
    - (unsigned long)engine);

    platform_set_drvdata(pdev, engine);


    \
     
     \ /
      Last update: 2020-02-10 13:45    [W:4.244 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site