Blame view

Documentation/pcmcia/locking.rst 2.5 KB
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
1
2
3
  =======
  Locking
  =======
3d0682618   Dominik Brodowski   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   Mauro Carvalho Chehab   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   Dominik Brodowski   pcmcia: add locki...
18
19
20
21
22
23
  
  
  B) Exclusion
  ============
  
  The following functions and callbacks to struct pcmcia_socket must
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
24
  be called with "skt_mutex" held::
3d0682618   Dominik Brodowski   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   Mauro Carvalho Chehab   docs: pcmcia: con...
41
  be called with "ops_mutex" held::
3d0682618   Dominik Brodowski   pcmcia: add locki...
42
43
44
  
  	socket_reset()
  	socket_setup()
cfe5d8095   Dominik Brodowski   pcmcia: use ops_m...
45
46
  	struct pccard_operations	*ops
  	struct pccard_resource_ops	*resource_ops;
3d0682618   Dominik Brodowski   pcmcia: add locki...
47

3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
48
  Note that send_event() and `struct pcmcia_callback *callback` must not be
3d0682618   Dominik Brodowski   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   Dominik Brodowski   pcmcia: use ops_m...
64
  The resource_ops and their data are protected by ops_mutex.
3d0682618   Dominik Brodowski   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   Mauro Carvalho Chehab   docs: pcmcia: con...
68
  - by pcmcia_socket_list_rwsem::
3d0682618   Dominik Brodowski   pcmcia: add locki...
69
  	struct list_head	socket_list;
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
70
  - by thread_lock::
3d0682618   Dominik Brodowski   pcmcia: add locki...
71
  	unsigned int		thread_events;
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
72
  - by skt_mutex::
3d0682618   Dominik Brodowski   pcmcia: add locki...
73
74
75
76
  	u_int			suspended_state;
  	void			(*tune_bridge);
  	struct pcmcia_callback	*callback;
  	int			resume_status;
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
77
  - by ops_mutex::
3d0682618   Dominik Brodowski   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   Dominik Brodowski   pcmcia: assert lo...
96
97
98
99
  
  
  3. Per PCMCIA-device Data:
  --------------------------
831527b73   Nik Nyby   pcmcia: Fix typo ...
100
  The "main" struct pcmcia_device is protected as follows (read-only fields
94a819f80   Dominik Brodowski   pcmcia: assert lo...
101
  or single-use fields not mentioned):
3bdab16c5   Mauro Carvalho Chehab   docs: pcmcia: con...
102
  - by pcmcia_socket->ops_mutex::
94a819f80   Dominik Brodowski   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   Mauro Carvalho Chehab   docs: pcmcia: con...
112
  - by the PCMCIA driver::
94a819f80   Dominik Brodowski   pcmcia: assert lo...
113
114
115
116
  	io_req_t		io;
  	irq_req_t		irq;
  	config_req_t		conf;
  	window_handle_t		win;