~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/pcmcia/locking.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 =======
  2 Locking
  3 =======
  4 
  5 This file explains the locking and exclusion scheme used in the PCCARD
  6 and PCMCIA subsystems.
  7 
  8 
  9 A) Overview, Locking Hierarchy:
 10 ===============================
 11 
 12 pcmcia_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 
 22 B) Exclusion
 23 ============
 24 
 25 The following functions and callbacks to struct pcmcia_socket must
 26 be 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 
 42 The following functions and callbacks to struct pcmcia_socket must
 43 be 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 
 51 Note that send_event() and `struct pcmcia_callback *callback` must not be
 52 called with "ops_mutex" held.
 53 
 54 
 55 C) Protection
 56 =============
 57 
 58 1. Global Data:
 59 ---------------
 60 struct list_head        pcmcia_socket_list;
 61 
 62 protected by pcmcia_socket_list_rwsem;
 63 
 64 
 65 2. Per-Socket Data:
 66 -------------------
 67 The resource_ops and their data are protected by ops_mutex.
 68 
 69 The "main" struct pcmcia_socket is protected as follows (read-only fields
 70 or 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 
109 3. Per PCMCIA-device Data:
110 --------------------------
111 
112 The "main" struct pcmcia_device is protected as follows (read-only fields
113 or 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;

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php