staging: goldfish: switch from spinlock to mutex
authorKristina Martšenko <kristina.martsenko@gmail.com>
Mon, 24 Mar 2014 23:45:09 +0000 (01:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Apr 2014 03:12:55 +0000 (20:12 -0700)
Use a mutex instead of a spinlock in goldfish_nand.c, as suggested by
the TODO list.

Signed-off-by: Kristina Martšenko <kristina.martsenko@gmail.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/goldfish/README
drivers/staging/goldfish/goldfish_nand.c

index 93d65b0f0f83d6180a7d3cfb960e05619b081135..183af00532341919406768b0a361b45a2918d9c5 100644 (file)
@@ -5,7 +5,6 @@ Audio
 
 NAND
 ----
-- Switch from spinlock to mutex
 - Remove excess checking of parameters in calls
 - Use dma coherent memory not kmalloc/__pa for the memory (this is just
   a cleanliness issue not a correctness one)
index eca0873098cd5fccede95f5034d6a8015ce319cd..7f606f7dec69617d59568c2379f12cddeda0d44e 100644 (file)
 #include <linux/vmalloc.h>
 #include <linux/mtd/mtd.h>
 #include <linux/platform_device.h>
+#include <linux/mutex.h>
 
 #include <asm/div64.h>
 
 #include "goldfish_nand_reg.h"
 
 struct goldfish_nand {
-       spinlock_t              lock;
+       struct mutex            lock;
        unsigned char __iomem  *base;
        struct cmd_params       *cmd_params;
        size_t                  mtd_count;
@@ -77,10 +78,9 @@ static u32 goldfish_nand_cmd(struct mtd_info *mtd, enum nand_cmd cmd,
 {
        struct goldfish_nand *nand = mtd->priv;
        u32 rv;
-       unsigned long irq_flags;
        unsigned char __iomem  *base = nand->base;
 
-       spin_lock_irqsave(&nand->lock, irq_flags);
+       mutex_lock(&nand->lock);
        if (goldfish_nand_cmd_with_params(mtd, cmd, addr, len, ptr, &rv)) {
                writel(mtd - nand->mtd, base + NAND_DEV);
                writel((u32)(addr >> 32), base + NAND_ADDR_HIGH);
@@ -90,7 +90,7 @@ static u32 goldfish_nand_cmd(struct mtd_info *mtd, enum nand_cmd cmd,
                writel(cmd, base + NAND_COMMAND);
                rv = readl(base + NAND_RESULT);
        }
-       spin_unlock_irqrestore(&nand->lock, irq_flags);
+       mutex_unlock(&nand->lock);
        return rv;
 }
 
@@ -307,12 +307,11 @@ static int goldfish_nand_init_device(struct platform_device *pdev,
        u32 name_len;
        u32 result;
        u32 flags;
-       unsigned long irq_flags;
        unsigned char __iomem  *base = nand->base;
        struct mtd_info *mtd = &nand->mtd[id];
        char *name;
 
-       spin_lock_irqsave(&nand->lock, irq_flags);
+       mutex_lock(&nand->lock);
        writel(id, base + NAND_DEV);
        flags = readl(base + NAND_DEV_FLAGS);
        name_len = readl(base + NAND_DEV_NAME_LEN);
@@ -329,7 +328,7 @@ static int goldfish_nand_init_device(struct platform_device *pdev,
                "goldfish nand dev%d: size %llx, page %d, extra %d, erase %d\n",
                       id, mtd->size, mtd->writesize,
                       mtd->oobsize, mtd->erasesize);
-       spin_unlock_irqrestore(&nand->lock, irq_flags);
+       mutex_unlock(&nand->lock);
 
        mtd->priv = nand;
 
@@ -405,7 +404,7 @@ static int goldfish_nand_probe(struct platform_device *pdev)
        if (nand == NULL)
                return -ENOMEM;
 
-       spin_lock_init(&nand->lock);
+       mutex_init(&nand->lock);
        nand->base = base;
        nand->mtd_count = num_dev;
        platform_set_drvdata(pdev, nand);