Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: remove SHM spinlock

This removes the SHM spinlock.
SHM is protected by wl->mutex.

Signed-off-by: Michael Buesch <mb@bu3sch.de>
Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Michael Buesch and committed by
John W. Linville
69eddc8a 77ca07ff

+8 -67
-2
drivers/net/wireless/b43/b43.h
··· 635 635 rwlock_t tx_lock; 636 636 /* Lock for LEDs access. */ 637 637 spinlock_t leds_lock; 638 - /* Lock for SHM access. */ 639 - spinlock_t shm_lock; 640 638 641 639 /* We can only have one operating interface (802.11 core) 642 640 * at a time. General information about this interface follows.
+4 -10
drivers/net/wireless/b43/debugfs.c
··· 125 125 unsigned int routing, addr, mask, set; 126 126 u16 val; 127 127 int res; 128 - unsigned long flags; 129 128 130 129 res = sscanf(buf, "0x%X 0x%X 0x%X 0x%X", 131 130 &routing, &addr, &mask, &set); ··· 141 142 if ((mask > 0xFFFF) || (set > 0xFFFF)) 142 143 return -E2BIG; 143 144 144 - spin_lock_irqsave(&dev->wl->shm_lock, flags); 145 145 if (mask == 0) 146 146 val = 0; 147 147 else 148 - val = __b43_shm_read16(dev, routing, addr); 148 + val = b43_shm_read16(dev, routing, addr); 149 149 val &= mask; 150 150 val |= set; 151 - __b43_shm_write16(dev, routing, addr, val); 152 - spin_unlock_irqrestore(&dev->wl->shm_lock, flags); 151 + b43_shm_write16(dev, routing, addr, val); 153 152 154 153 return 0; 155 154 } ··· 201 204 unsigned int routing, addr, mask, set; 202 205 u32 val; 203 206 int res; 204 - unsigned long flags; 205 207 206 208 res = sscanf(buf, "0x%X 0x%X 0x%X 0x%X", 207 209 &routing, &addr, &mask, &set); ··· 217 221 if ((mask > 0xFFFFFFFF) || (set > 0xFFFFFFFF)) 218 222 return -E2BIG; 219 223 220 - spin_lock_irqsave(&dev->wl->shm_lock, flags); 221 224 if (mask == 0) 222 225 val = 0; 223 226 else 224 - val = __b43_shm_read32(dev, routing, addr); 227 + val = b43_shm_read32(dev, routing, addr); 225 228 val &= mask; 226 229 val |= set; 227 - __b43_shm_write32(dev, routing, addr, val); 228 - spin_unlock_irqrestore(&dev->wl->shm_lock, flags); 230 + b43_shm_write32(dev, routing, addr, val); 229 231 230 232 return 0; 231 233 }
+4 -51
drivers/net/wireless/b43/main.c
··· 390 390 b43_write32(dev, B43_MMIO_SHM_CONTROL, control); 391 391 } 392 392 393 - u32 __b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset) 393 + u32 b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset) 394 394 { 395 395 u32 ret; 396 396 ··· 413 413 return ret; 414 414 } 415 415 416 - u32 b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset) 417 - { 418 - struct b43_wl *wl = dev->wl; 419 - unsigned long flags; 420 - u32 ret; 421 - 422 - spin_lock_irqsave(&wl->shm_lock, flags); 423 - ret = __b43_shm_read32(dev, routing, offset); 424 - spin_unlock_irqrestore(&wl->shm_lock, flags); 425 - 426 - return ret; 427 - } 428 - 429 - u16 __b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset) 416 + u16 b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset) 430 417 { 431 418 u16 ret; 432 419 ··· 434 447 return ret; 435 448 } 436 449 437 - u16 b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset) 438 - { 439 - struct b43_wl *wl = dev->wl; 440 - unsigned long flags; 441 - u16 ret; 442 - 443 - spin_lock_irqsave(&wl->shm_lock, flags); 444 - ret = __b43_shm_read16(dev, routing, offset); 445 - spin_unlock_irqrestore(&wl->shm_lock, flags); 446 - 447 - return ret; 448 - } 449 - 450 - void __b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value) 450 + void b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value) 451 451 { 452 452 if (routing == B43_SHM_SHARED) { 453 453 B43_WARN_ON(offset & 0x0001); ··· 454 480 b43_write32(dev, B43_MMIO_SHM_DATA, value); 455 481 } 456 482 457 - void b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value) 458 - { 459 - struct b43_wl *wl = dev->wl; 460 - unsigned long flags; 461 - 462 - spin_lock_irqsave(&wl->shm_lock, flags); 463 - __b43_shm_write32(dev, routing, offset, value); 464 - spin_unlock_irqrestore(&wl->shm_lock, flags); 465 - } 466 - 467 - void __b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value) 483 + void b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value) 468 484 { 469 485 if (routing == B43_SHM_SHARED) { 470 486 B43_WARN_ON(offset & 0x0001); ··· 468 504 } 469 505 b43_shm_control_word(dev, routing, offset); 470 506 b43_write16(dev, B43_MMIO_SHM_DATA, value); 471 - } 472 - 473 - void b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value) 474 - { 475 - struct b43_wl *wl = dev->wl; 476 - unsigned long flags; 477 - 478 - spin_lock_irqsave(&wl->shm_lock, flags); 479 - __b43_shm_write16(dev, routing, offset, value); 480 - spin_unlock_irqrestore(&wl->shm_lock, flags); 481 507 } 482 508 483 509 /* Read HostFlags */ ··· 4820 4866 /* Initialize struct b43_wl */ 4821 4867 wl->hw = hw; 4822 4868 spin_lock_init(&wl->leds_lock); 4823 - spin_lock_init(&wl->shm_lock); 4824 4869 mutex_init(&wl->mutex); 4825 4870 spin_lock_init(&wl->hardirq_lock); 4826 4871 INIT_LIST_HEAD(&wl->devlist);
-4
drivers/net/wireless/b43/main.h
··· 112 112 void b43_tsf_write(struct b43_wldev *dev, u64 tsf); 113 113 114 114 u32 b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset); 115 - u32 __b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset); 116 115 u16 b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset); 117 - u16 __b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset); 118 116 void b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value); 119 - void __b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value); 120 117 void b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value); 121 - void __b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value); 122 118 123 119 u64 b43_hf_read(struct b43_wldev *dev); 124 120 void b43_hf_write(struct b43_wldev *dev, u64 value);