Blame view
Documentation/pcmcia/locking.rst
2.5 KB
3bdab16c5 docs: pcmcia: con... |
1 2 3 |
======= Locking ======= |
3d0682618 pcmcia: add locki... |
4 5 6 7 8 9 |
This file explains the locking and exclusion scheme used in the PCCARD and PCMCIA subsystems. A) Overview, Locking Hierarchy: =============================== |
3bdab16c5 docs: pcmcia: con... |
10 11 12 13 14 15 16 17 |
pcmcia_socket_list_rwsem - protects only the list of sockets - skt_mutex - serializes card insert / ejection - ops_mutex - serializes socket operation |
3d0682618 pcmcia: add locki... |
18 19 20 21 22 23 |
B) Exclusion ============ The following functions and callbacks to struct pcmcia_socket must |
3bdab16c5 docs: pcmcia: con... |
24 |
be called with "skt_mutex" held:: |
3d0682618 pcmcia: add locki... |
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
socket_detect_change() send_event() socket_reset() socket_shutdown() socket_setup() socket_remove() socket_insert() socket_early_resume() socket_late_resume() socket_resume() socket_suspend() struct pcmcia_callback *callback The following functions and callbacks to struct pcmcia_socket must |
3bdab16c5 docs: pcmcia: con... |
41 |
be called with "ops_mutex" held:: |
3d0682618 pcmcia: add locki... |
42 43 44 |
socket_reset() socket_setup() |
cfe5d8095 pcmcia: use ops_m... |
45 46 |
struct pccard_operations *ops struct pccard_resource_ops *resource_ops; |
3d0682618 pcmcia: add locki... |
47 |
|
3bdab16c5 docs: pcmcia: con... |
48 |
Note that send_event() and `struct pcmcia_callback *callback` must not be |
3d0682618 pcmcia: add locki... |
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
called with "ops_mutex" held. C) Protection ============= 1. Global Data: --------------- struct list_head pcmcia_socket_list; protected by pcmcia_socket_list_rwsem; 2. Per-Socket Data: ------------------- |
cfe5d8095 pcmcia: use ops_m... |
64 |
The resource_ops and their data are protected by ops_mutex. |
3d0682618 pcmcia: add locki... |
65 66 67 |
The "main" struct pcmcia_socket is protected as follows (read-only fields or single-use fields not mentioned): |
3bdab16c5 docs: pcmcia: con... |
68 |
- by pcmcia_socket_list_rwsem:: |
3d0682618 pcmcia: add locki... |
69 |
struct list_head socket_list; |
3bdab16c5 docs: pcmcia: con... |
70 |
- by thread_lock:: |
3d0682618 pcmcia: add locki... |
71 |
unsigned int thread_events; |
3bdab16c5 docs: pcmcia: con... |
72 |
- by skt_mutex:: |
3d0682618 pcmcia: add locki... |
73 74 75 76 |
u_int suspended_state; void (*tune_bridge); struct pcmcia_callback *callback; int resume_status; |
3bdab16c5 docs: pcmcia: con... |
77 |
- by ops_mutex:: |
3d0682618 pcmcia: add locki... |
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
socket_state_t socket; u_int state; u_short lock_count; pccard_mem_map cis_mem; void __iomem *cis_virt; struct { } irq; io_window_t io[]; pccard_mem_map win[]; struct list_head cis_cache; size_t fake_cis_len; u8 *fake_cis; u_int irq_mask; void (*zoom_video); int (*power_hook); u8 resource...; struct list_head devices_list; u8 device_count; struct pcmcia_state; |
94a819f80 pcmcia: assert lo... |
96 97 98 99 |
3. Per PCMCIA-device Data: -------------------------- |
831527b73 pcmcia: Fix typo ... |
100 |
The "main" struct pcmcia_device is protected as follows (read-only fields |
94a819f80 pcmcia: assert lo... |
101 |
or single-use fields not mentioned): |
3bdab16c5 docs: pcmcia: con... |
102 |
- by pcmcia_socket->ops_mutex:: |
94a819f80 pcmcia: assert lo... |
103 104 105 106 107 108 109 110 111 |
struct list_head socket_device_list; struct config_t *function_config; u16 _irq:1; u16 _io:1; u16 _win:4; u16 _locked:1; u16 allow_func_id_match:1; u16 suspended:1; u16 _removed:1; |
3bdab16c5 docs: pcmcia: con... |
112 |
- by the PCMCIA driver:: |
94a819f80 pcmcia: assert lo... |
113 114 115 116 |
io_req_t io; irq_req_t irq; config_req_t conf; window_handle_t win; |