| .. | .. |
|---|
| 294 | 294 | } |
|---|
| 295 | 295 | |
|---|
| 296 | 296 | |
|---|
| 297 | | -static DEFINE_SPINLOCK(pcmcia_vpp_lock); |
|---|
| 297 | +static DEFINE_MUTEX(pcmcia_vpp_lock); |
|---|
| 298 | 298 | static int pcmcia_vpp_refcnt; |
|---|
| 299 | 299 | static void pcmciamtd_set_vpp(struct map_info *map, int on) |
|---|
| 300 | 300 | { |
|---|
| 301 | 301 | struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1; |
|---|
| 302 | 302 | struct pcmcia_device *link = dev->p_dev; |
|---|
| 303 | | - unsigned long flags; |
|---|
| 304 | 303 | |
|---|
| 305 | 304 | pr_debug("dev = %p on = %d vpp = %d\n\n", dev, on, dev->vpp); |
|---|
| 306 | | - spin_lock_irqsave(&pcmcia_vpp_lock, flags); |
|---|
| 305 | + mutex_lock(&pcmcia_vpp_lock); |
|---|
| 307 | 306 | if (on) { |
|---|
| 308 | 307 | if (++pcmcia_vpp_refcnt == 1) /* first nested 'on' */ |
|---|
| 309 | 308 | pcmcia_fixup_vpp(link, dev->vpp); |
|---|
| .. | .. |
|---|
| 311 | 310 | if (--pcmcia_vpp_refcnt == 0) /* last nested 'off' */ |
|---|
| 312 | 311 | pcmcia_fixup_vpp(link, 0); |
|---|
| 313 | 312 | } |
|---|
| 314 | | - spin_unlock_irqrestore(&pcmcia_vpp_lock, flags); |
|---|
| 313 | + mutex_unlock(&pcmcia_vpp_lock); |
|---|
| 315 | 314 | } |
|---|
| 316 | 315 | |
|---|
| 317 | 316 | |
|---|