Tomato 1.28
[tomato.git] / release / src / router / bridge / doc / SMPNOTES
blob42ddb698284bac9aad3262b1c75e8943208f2c9f
1 $Id: SMPNOTES,v 1.1.1.4 2003/10/14 08:09:37 sparq Exp $
3 Notes on the (20000210) SMP-ization of the bridging code:
5 Each bridge has a hash table of MAC addresses. This table is protected
6 by a rwlock hash_lock. The entries are refcounted; 'getting' an entry
7 is done in the usual way: read_lock the table, find the entry,
8 increment it's refcount and unlock the table. Bottom half context
9 acquires this lock in read as well as write mode, therefore we always
10 need to locally disable BHs when acquiring this lock.
12 Each bridge also has an rwlock called lock. This slightly misnamed
13 lock protects the bridge's port_list. All stp code acquires this lock
14 in read mode, the only piece of code that acquires this lock in write
15 mode is the ioctl code (br_ioctl.c). Bottom halves never acquire this
16 lock in write mode, therefore we can use read_lock instead of
17 read_lock_bh in all cases.
19 All ioctls are globally serialized by the semaphore ioctl_mutex. All
20 code which acquires the bridge lock in write mode also acquires
21 ioctl_mutex. Therefore, if we have already grabbed ioctl_mutex we
22 don't need to read_lock the bridge lock anymore; the ioctl_mutex will
23 protect against concurrent writers.