File Index
Files and directories
Sign in
FILE

locking.rst

File preview with syntax highlighting.

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