diff options
author | Nicolas Pitre <nico@cam.org> | 2005-11-23 17:07:56 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-11-29 13:36:35 -0500 |
commit | 8bc3b3804a6123e634be26359558aa998102506a (patch) | |
tree | 87141f0f991a81f6e18c2c5b7a7c7cc62ce1fd7f /drivers/mtd | |
parent | 7ac571f8d0f843fb818f7c70ec77784545e91bc4 (diff) |
[MTD] cfi_cmdset_0001: relax locking rules for multi hardware partition support
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 143f01a4c170..69c04945591f 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * (C) 2000 Red Hat. GPL'd | 5 | * (C) 2000 Red Hat. GPL'd |
6 | * | 6 | * |
7 | * $Id: cfi_cmdset_0001.c,v 1.185 2005/11/07 11:14:22 gleixner Exp $ | 7 | * $Id: cfi_cmdset_0001.c,v 1.186 2005/11/23 22:07:52 nico Exp $ |
8 | * | 8 | * |
9 | * | 9 | * |
10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> | 10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> |
@@ -644,9 +644,8 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr | |||
644 | * | 644 | * |
645 | * - contension arbitration is handled in the owner's context. | 645 | * - contension arbitration is handled in the owner's context. |
646 | * | 646 | * |
647 | * The 'shared' struct can be read when its lock is taken. | 647 | * The 'shared' struct can be read and/or written only when |
648 | * However any writes to it can only be made when the current | 648 | * its lock is taken. |
649 | * owner's lock is also held. | ||
650 | */ | 649 | */ |
651 | struct flchip_shared *shared = chip->priv; | 650 | struct flchip_shared *shared = chip->priv; |
652 | struct flchip *contender; | 651 | struct flchip *contender; |
@@ -675,14 +674,13 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr | |||
675 | } | 674 | } |
676 | timeo = jiffies + HZ; | 675 | timeo = jiffies + HZ; |
677 | spin_lock(&shared->lock); | 676 | spin_lock(&shared->lock); |
677 | spin_unlock(contender->mutex); | ||
678 | } | 678 | } |
679 | 679 | ||
680 | /* We now own it */ | 680 | /* We now own it */ |
681 | shared->writing = chip; | 681 | shared->writing = chip; |
682 | if (mode == FL_ERASING) | 682 | if (mode == FL_ERASING) |
683 | shared->erasing = chip; | 683 | shared->erasing = chip; |
684 | if (contender && contender != chip) | ||
685 | spin_unlock(contender->mutex); | ||
686 | spin_unlock(&shared->lock); | 684 | spin_unlock(&shared->lock); |
687 | } | 685 | } |
688 | 686 | ||