.. | .. |
---|
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 | |
---|