| Notes on the (20000210) SMP-ization of the bridging code: |
| |
| Each bridge has a hash table of MAC addresses. This table is protected |
| by a rwlock hash_lock. The entries are refcounted; 'getting' an entry |
| is done in the usual way: read_lock the table, find the entry, |
| increment it's refcount and unlock the table. Bottom half context |
| acquires this lock in read as well as write mode, therefore we always |
| need to locally disable BHs when acquiring this lock. |
| |
| Each bridge also has an rwlock called lock. This slightly misnamed |
| lock protects the bridge's port_list. All stp code acquires this lock |
| in read mode, the only piece of code that acquires this lock in write |
| mode is the ioctl code (br_ioctl.c). Bottom halves never acquire this |
| lock in write mode, therefore we can use read_lock instead of |
| read_lock_bh in all cases. |
| |
| All ioctls are globally serialized by the semaphore ioctl_mutex. All |
| code which acquires the bridge lock in write mode also acquires |
| ioctl_mutex. Therefore, if we have already grabbed ioctl_mutex we |
| don't need to read_lock the bridge lock anymore; the ioctl_mutex will |
| protect against concurrent writers. |