diff options
author | Alex Shi <alex.shi@linaro.org> | 2017-10-04 12:02:51 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2017-10-04 12:02:51 +0800 |
commit | 95a8e64a288afaadb5e77210df0dfa02ffd0eb43 (patch) | |
tree | 3bedc7c74219d261d89a47307e9b519820637093 /drivers/block/skd_main.c | |
parent | 52e49f436844e374d67859cbfb2c9cc62eb7e59b (diff) | |
parent | 0e13335254d5d54933969dba1d7625f55e657f52 (diff) |
Merge tag 'v3.18.72' into linux-linaro-lsk-v3.18lsk-v3.18-17.09
This is the 3.18.72 stable release
Diffstat (limited to 'drivers/block/skd_main.c')
-rw-r--r-- | drivers/block/skd_main.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c index 1e46eb2305c0..f928e698f659 100644 --- a/drivers/block/skd_main.c +++ b/drivers/block/skd_main.c @@ -2214,6 +2214,9 @@ static void skd_send_fitmsg(struct skd_device *skdev, */ qcmd |= FIT_QCMD_MSGSIZE_64; + /* Make sure skd_msg_buf is written before the doorbell is triggered. */ + smp_wmb(); + SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND); } @@ -2260,6 +2263,9 @@ static void skd_send_special_fitmsg(struct skd_device *skdev, qcmd = skspcl->mb_dma_address; qcmd |= FIT_QCMD_QID_NORMAL + FIT_QCMD_MSGSIZE_128; + /* Make sure skd_msg_buf is written before the doorbell is triggered. */ + smp_wmb(); + SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND); } @@ -4679,15 +4685,16 @@ static void skd_free_disk(struct skd_device *skdev) { struct gendisk *disk = skdev->disk; - if (disk != NULL) { - struct request_queue *q = disk->queue; + if (disk && (disk->flags & GENHD_FL_UP)) + del_gendisk(disk); - if (disk->flags & GENHD_FL_UP) - del_gendisk(disk); - if (q) - blk_cleanup_queue(q); - put_disk(disk); + if (skdev->queue) { + blk_cleanup_queue(skdev->queue); + skdev->queue = NULL; + disk->queue = NULL; } + + put_disk(disk); skdev->disk = NULL; } |