}
 
 /* Calls the completion. Cannot be called with dev->lock hold. */
-static void s5p_aes_complete(struct s5p_aes_dev *dev, int err)
+static void s5p_aes_complete(struct ablkcipher_request *req, int err)
 {
-       dev->req->base.complete(&dev->req->base, err);
+       req->base.complete(&req->base, err);
 }
 
 static void s5p_unset_outdata(struct s5p_aes_dev *dev)
 {
        struct platform_device *pdev = dev_id;
        struct s5p_aes_dev *dev = platform_get_drvdata(pdev);
+       struct ablkcipher_request *req;
        int err_dma_tx = 0;
        int err_dma_rx = 0;
        int err_dma_hx = 0;
 
                spin_unlock_irqrestore(&dev->lock, flags);
 
-               s5p_aes_complete(dev, 0);
+               s5p_aes_complete(dev->req, 0);
                /* Device is still busy */
                tasklet_schedule(&dev->tasklet);
        } else {
 error:
        s5p_sg_done(dev);
        dev->busy = false;
+       req = dev->req;
        if (err_dma_hx == 1)
                s5p_set_dma_hashdata(dev, dev->hash_sg_iter);
 
        spin_unlock_irqrestore(&dev->lock, flags);
-       s5p_aes_complete(dev, err);
+       s5p_aes_complete(req, err);
 
 hash_irq_end:
        /*
        s5p_sg_done(dev);
        dev->busy = false;
        spin_unlock_irqrestore(&dev->lock, flags);
-       s5p_aes_complete(dev, err);
+       s5p_aes_complete(req, err);
 }
 
 static void s5p_tasklet_cb(unsigned long data)