Skip to main content

starnix_sync/
lock_ordering.rs

1// Copyright 2023 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use lock_ordering_macro::lock_ordering;
6
7lock_ordering! {
8    // keep-sorted start
9    AbstractSocketNamespaceLock => UnixSocketInnerLock,
10    AbstractSocketNamespaceLock => VsockSocketInnerLock,
11    AioPendingOperationsLock => WaitQueueImplLock,
12    AshmemStateLock => FsNodeWriteGuardStateLock,
13    AshmemStateLock => MemoryManagerStateLock,
14    BeforeFsNodeAppend => FsNodeAppend,
15    BinderFreezeLevel => BinderProcessStateLevel,
16    BinderFsDevicesLevel => DeviceRegistryStateLevel,
17    BinderFsDevicesLevel => FsNodeCacheLock,
18    BinderFsDevicesLevel => MemoryManagerStateLock,
19    BinderFsDevicesLevel => RwQueueInnerLock,
20    BinderObjectLevel => BinderThreadStateLock,
21    BinderProcessSharedMemoryLevel => BinderFreezeLevel,
22    BinderProcessSharedMemoryLevel => FsRenameRecursive,
23    BinderProcessSharedMemoryLevel => TaskFilesLock,
24    BinderProcessStateLevel => BinderContextManagerLevel,
25    BinderProcessStateLevel => BinderObjectLevel,
26    BinderProcessStateLevel => BinderThreadRequeueEventLock,
27    BinderProcsLevel => BinderProcessSharedMemoryLevel,
28    BinderThreadStateLock => BinderThreadRequeueEventLock,
29    BinderThreadStateLock => MemoryManagerStateLock,
30    BinderThreadStateLock => ThreadGroupMutableStateLock,
31    BinderThreadStateLock => WaiterEventHandlerLock,
32    CgroupChildrenLock => CgroupStateLock,
33    CgroupDirectoryInterfaceFilesLock => CgroupChildrenLock,
34    CgroupDirectoryInterfaceFilesLock => CgroupDirectoryNodesLock,
35    CgroupDirectoryInterfaceFilesLock => RwQueueInnerLock,
36    CgroupPidTableLock => CgroupStateLock,
37    CgroupStateLock => ThreadGroupMutableStateLock,
38    CgroupV1Level => CgroupPidTableLock,
39    CrashesPerProcessLock => ThrottledCoreDumpsLock,
40    DeviceMapperRegistryDevicesLock => DmDeviceStateLock,
41    DeviceMapperRegistryDevicesLock => DynamicThreadSpawnerLock,
42    DeviceRegistryStateLevel => NetlinkSocketInnerLock,
43    DeviceTerminalsLock => TerminalMutableStateLock,
44    DirEntryChildrenLevel => BinderFsDevicesLevel,
45    DirEntryChildrenLevel => CgroupDirectoryInterfaceFilesLock,
46    DirEntryChildrenLevel => FileSystemEntriesLock,
47    DirEntryChildrenLevel => FileSystemPermanentLock,
48    DirEntryChildrenLevel => InotifyStateLock,
49    DirEntryChildrenLevel => MmDumpable,
50    DirEntryChildrenLevel => NetstackDevicesLock,
51    DirEntryChildrenLevel => NmfsNetworkManagerLock,
52    DirEntryChildrenLevel => SeLinuxPendingEntriesLock,
53    DirEntryChildrenLevel => SeLinuxUpdateLock,
54    DirEntryChildrenLevel => UnixSocketInnerLock,
55    DirEntryChildrenRecursiveLevel => FsNodeCacheRecursiveLock,
56    DirEntryChildrenRecursiveLevel => MemoryDirectoryReaddirPositionLock,
57    DmDeviceStateLock => DirEntryChildrenLevel,
58    DmDeviceStateLock => MemoryManagerStateLock,
59    DynamicFileStateLock => CgroupV1Level,
60    DynamicFileStateLock => FsRegistryLock,
61    DynamicFileStateLock => MapInfoCacheBufLock,
62    DynamicFileStateLock => MemoryManagerStateLock,
63    DynamicFileStateLock => MemoryPressureMonitor,
64    DynamicFileStateLock => TaskCredsLock,
65    EbpfMapStateLevel => EbpfSuspendLock,
66    EbpfStateLock => EbpfSuspendLock,
67    EbpfStateLock => MemoryManagerStateLock,
68    EpollStateLock => BinderProcsLevel,
69    EpollStateLock => EventFdInnerLock,
70    EpollStateLock => MemoryPressureMonitor,
71    EpollStateLock => SuspendResumeManagerInnerLock,
72    EpollStateLock => TimerFileInfoLock,
73    EpollWaitableStateLock => WaitQueueImplLock,
74    ExecutorVmarManagerLock => ThreadGroupPtraceesLock,
75    FastrpcInnerState => MemoryManagerStateLock,
76    FdTableMutableStateLock => FsNodeInfoLevel,
77    FdTableMutableStateLock => MountsLevel,
78    FileEpollFilesLock => EpollStateLock,
79    FileObjectOffset => BeforeFsNodeAppend,
80    FileObjectOffset => DynamicFileStateLock,
81    FileObjectOffset => FuseFsNodeCacheLock,
82    FileObjectOffset => FuseFsNodeInfoLevel,
83    FileObjectOffset => FuseNodeStateLock,
84    FileObjectOffset => IcmpPingGidsLock,
85    FileObjectOffset => OverlayFsDirEntriesLock,
86    FileObjectOffset => PerfTraceEventQueueListLock,
87    FileObjectOffset => SeLinuxFsContextSidLock,
88    FileObjectOffset => SeLinuxPendingFileSystemsLock,
89    FileObjectOffset => SeLinuxQueryCacheResetLock,
90    FileObjectOffset => StubBytesFileStateLock,
91    FramebufferInfoLock => FramebufferPresentationReceiverLock,
92    FramebufferInfoLock => FramebufferViewBoundProtocolsLock,
93    FramebufferInfoLock => FramebufferViewIdentityLock,
94    FramebufferInfoLock => MemoryManagerStateLock,
95    FsContextStateLock => MountsLevel,
96    FsNodeAppend => MemoryManagerStateLock,
97    FsNodeAppend => UninterruptibleLock,
98    FsNodeCacheLock => FsNodeInfoLevel,
99    FsNodeCacheLock => SeLinuxQueryCacheResetLock,
100    FsNodeCacheRecursiveLock => FsNodeInfoRecursiveLevel,
101    FsNodeCacheRecursiveLock => SeLinuxQueryCacheResetLock,
102    FsNodeFlockInfoLock => WaitQueueImplLock,
103    FsNodeInfoLevel => FsNodeWriteGuardStateLock,
104    FsNodeInfoRecursiveLevel => FsRename,
105    FsNodeWriteGuardStateLock => FsNodeFsVerityLock,
106    FsNodeWriteGuardStateLock => SeLinuxQueryCacheResetLock,
107    FsNodeWriteGuardStateLock => ThreadGroupLimits,
108    FsNodeWriteGuardStateLock => WaitQueueImplLock,
109    FsRename => DirEntryChildrenLevel,
110    FsRenameRecursive => DirEntryChildrenRecursiveLevel,
111    FunctionFsStateLock => MemoryManagerStateLock,
112    FunctionFsStateLock => WaitQueueImplLock,
113    FuseConnectionStateLock => PortWaiterCallbacksLock,
114    FuseConnectionStateLock => WaitQueueImplLock,
115    FuseDirEntryChildrenLevel => FuseFsNodeCacheLock,
116    FuseDirEntryChildrenLevel => FuseFsNodeInfoLevel,
117    FuseDirEntryChildrenLevel => FuseNodeStateLock,
118    FuseFsNodeCacheLock => FuseFsNodeInfoLevel,
119    FuseFsNodeInfoLevel => UninterruptibleLock,
120    FuseFsRenameLevel => FuseDirEntryChildrenLevel,
121    FutexTableStateLock => FsContextStateLock,
122    FutexTableStateLock => FsNodeInfoLevel,
123    FutexTableStateLock => InflightVmsplicedPayloadsLock,
124    FutexTableStateLock => MemoryManagerStateLock,
125    GenericNetlinkServerStateLock => NetlinkSocketInnerLock,
126    InotifyStateLock => EventHandlerReadyQueueLock,
127    InotifyStateLock => MemoryManagerStateLock,
128    InotifyStateLock => PortWaiterCallbacksLock,
129    InotifyStateLock => WaitQueueImplLock,
130    InputEventRelayOpenedFilesLock => WaitQueueImplLock,
131    InputRelayDeviceInfosLock => InputDeviceInfoLock,
132    IoUringStateLock => MemoryManagerStateLock,
133    KernelsLock => StarnixKernelWakeLeaseLock,
134    LoopDeviceStateLock => FsContextStateLock,
135    LoopDeviceStateLock => FsNodeInfoLevel,
136    LoopDeviceStateLock => RemoteBundleInnerLock,
137    LoopDevicesLock => DeviceRegistryStateLevel,
138    LoopDevicesLock => DynamicThreadSpawnerLock,
139    LoopDevicesLock => LoopDeviceStateLock,
140    LoopDevicesLock => SimpleDirectoryEntriesLock,
141    LoopDevicesLock => TaskMutableStateLock,
142    MagmaConnectionsLock => DirEntryChildrenLevel,
143    MemoryAttributionPublisherLock => DynamicThreadSpawnerLock,
144    MemoryDirectoryReaddirPositionLock => DirEntryChildrenLevel,
145    MemoryManagerStateLock => ExpandoLock,
146    MemoryManagerStateLock => FsContextStateLock,
147    MemoryManagerStateLock => FsNodeInfoLevel,
148    MemoryManagerStateLock => InflightVmsplicedPayloadsLock,
149    MemoryManagerStateLock => MapInfoCacheBufLock,
150    MemoryManagerStateLock => SeLinuxFsContextSidLock,
151    MemoryManagerStateLock => SeLinuxQueryCacheResetLock,
152    MemoryManagerStateLock => ThreadGroupLimits,
153    MemoryManagerStateLock => UserFaultInner,
154    MemoryPressureMonitor => MemoryPressureMonitorClientState,
155    MemoryPressureMonitor => PortWaiterCallbacksLock,
156    MountsLevel => MountSubmountsLock,
157    NetlinkSocketInnerLock => EpollWaitableStateLock,
158    NetlinkSocketInnerLock => EventHandlerReadyQueueLock,
159    NetlinkSocketInnerLock => PortWaiterCallbacksLock,
160    NetstackDevicesLock => SimpleDirectoryEntriesLock,
161    NflogListenersLock => NetlinkSocketInnerLock,
162    OverlayFsDirEntriesLock => MemoryManagerStateLock,
163    OverlayFsStateLock => FsNodeCacheRecursiveLock,
164    OverlayFsStateLock => SeLinuxQueryCacheResetLock,
165    PerfTraceEventQueueListLock => PerfRingBufferStateLock,
166    PidTableLock => CgroupPidTableLock,
167    PidTableLock => MemoryAttributionPublisherLock,
168    PidTableLock => ThreadGroupMutableStateLock,
169    PidTableLock => ThreadGroupPtraceesLock,
170    PowerStatsManagerLock => DeviceRegistryStateLevel,
171    PowerStatsManagerLock => SimpleDirectoryEntriesLock,
172    QbgReadQueueLock => MemoryManagerStateLock,
173    RecordLocksStateLock => PortWaiterCallbacksLock,
174    RecordLocksStateLock => WaitQueueImplLock,
175    RemoteBinderHandleLevel => BinderProcsLevel,
176    RemoteBlockDeviceRegistryDevicesLock => SimpleDirectoryEntriesLock,
177    SeLinuxFsContextSidLock => SeLinuxQueryCacheResetLock,
178    SeLinuxQueryCacheResetLock => SeLinuxSecurityServerStateLock,
179    SignalFdMaskLock => ThreadGroupPendingSignalsLock,
180    SimpleDirectoryEntriesLock => FsNodeCacheLock,
181    SimpleDirectoryEntriesLock => RwQueueInnerLock,
182    SyslogSubscriptionLock => PortWaiterCallbacksLock,
183    SyslogSubscriptionLock => WaitQueueImplLock,
184    TaskCredsLock => DirEntryChildrenRecursiveLevel,
185    TaskCredsLock => FsNodeInfoRecursiveLevel,
186    TaskCredsLock => OverlayFsStateLock,
187    TaskCredsLock => TaskFilesLock,
188    TaskFilesLock => FdTableMutableStateLock,
189    TaskMutableStateLock => EpollWaitableStateLock,
190    TaskMutableStateLock => FutexTableStateLock,
191    TaskMutableStateLock => IntervalTimerState,
192    TaskMutableStateLock => PortWaiterCallbacksLock,
193    TaskMutableStateLock => ProfileHandleCacheLock,
194    TaskMutableStateLock => SeccompNotifierLock,
195    TaskMutableStateLock => SignalActionsLock,
196    TaskMutableStateLock => SignalFdMaskLock,
197    TaskMutableStateLock => TaskCommandLevel,
198    TaskMutableStateLock => TaskFilesLock,
199    TaskMutableStateLock => ThreadGroupLimits,
200    TaskMutableStateLock => UtsNamespaceLock,
201    TerminalMutableStateLock => EventHandlerReadyQueueLock,
202    TerminalMutableStateLock => TaskMutableStateLock,
203    ThreadGroupLimits => SeLinuxQueryCacheResetLock,
204    ThreadGroupMutableStateLock => DeviceTerminalsLock,
205    ThreadGroupPtraceesLock => ThreadGroupMutableStateLock,
206    TimerFileInfoLock => HrTimerManagerStateLock,
207    TimerFileInfoLock => TaskMutableStateLock,
208    TimerTableStateLock => HrTimerIsIntervalLock,
209    TimerTableStateLock => IntervalTimerState,
210    TracePerformanceEventManagerStateLock => PidToKoidMapInnerLock,
211    UEventNetlinkSocketDeviceListenerKeyLock => DeviceRegistryStateLevel,
212    UninterruptibleLock => AioPendingOperationsLock,
213    UninterruptibleLock => AshmemStateLock,
214    UninterruptibleLock => CgroupV1Level,
215    UninterruptibleLock => ComponentMountRecordLock,
216    UninterruptibleLock => CrashesPerProcessLock,
217    UninterruptibleLock => DevKmsgLock,
218    UninterruptibleLock => DeviceMapperRegistryDevicesLock,
219    UninterruptibleLock => EbpfMapStateLevel,
220    UninterruptibleLock => EbpfStateLock,
221    UninterruptibleLock => ExecutorVmarManagerLock,
222    UninterruptibleLock => FastrpcInnerState,
223    UninterruptibleLock => FileEpollFilesLock,
224    UninterruptibleLock => FramebufferInfoLock,
225    UninterruptibleLock => FsNodeFlockInfoLock,
226    UninterruptibleLock => FunctionFsStateLock,
227    UninterruptibleLock => FuseConnectionStateLock,
228    UninterruptibleLock => GenericNetlinkServerStateLock,
229    UninterruptibleLock => InotifyWatchersLock,
230    UninterruptibleLock => InputDeviceFileNodesLock,
231    UninterruptibleLock => InputEventRelayOpenedFilesLock,
232    UninterruptibleLock => IoUringStateLock,
233    UninterruptibleLock => KernelIpTables,
234    UninterruptibleLock => KernelSwapFiles,
235    UninterruptibleLock => LoopDevicesLock,
236    UninterruptibleLock => MagmaConnectionsLock,
237    UninterruptibleLock => MemoryXattrStorageLevel,
238    UninterruptibleLock => NflogListenersLock,
239    UninterruptibleLock => OverlayFsStateLock,
240    UninterruptibleLock => PerfEventLevel,
241    UninterruptibleLock => PidTableLock,
242    UninterruptibleLock => PowerStatsManagerLock,
243    UninterruptibleLock => QbgReadQueueLock,
244    UninterruptibleLock => QipcrtrSocketInnerLock,
245    UninterruptibleLock => RecordLocksStateLock,
246    UninterruptibleLock => RemoteBinderHandleLevel,
247    UninterruptibleLock => RemoteBlockDeviceRegistryDevicesLock,
248    UninterruptibleLock => SeLinuxFsContextSidLock,
249    UninterruptibleLock => SeLinuxQueryCacheResetLock,
250    UninterruptibleLock => SyslogSubscriptionLock,
251    UninterruptibleLock => TaskCredsLock,
252    UninterruptibleLock => TracePerformanceEventManagerStateLock,
253    UninterruptibleLock => UinputDeviceStateLock,
254    UninterruptibleLock => UserFaultInner,
255    UninterruptibleLock => VsockSocketInnerLock,
256    UnixSocketInnerLock => EpollWaitableStateLock,
257    UnixSocketInnerLock => EventHandlerReadyQueueLock,
258    UnixSocketInnerLock => MemoryManagerStateLock,
259    UnixSocketInnerLock => PortWaiterCallbacksLock,
260    UnixSocketInnerLock => SeLinuxPeerSidLock,
261    UnixSocketInnerLock => SeLinuxQueryCacheResetLock,
262    UnixSocketInnerLock => SocketStateLock,
263    Unlocked => FileObjectOffset,
264    Unlocked => FuseFsRenameLevel,
265    Unlocked => UninterruptibleLock,
266    VsockSocketInnerLock => PortWaiterCallbacksLock,
267    VsockSocketInnerLock => WaitQueueImplLock,
268    WaitQueueImplLock => PortWaiterWaitQueuesLock,
269    WaitQueueImplLock => SeLinuxQueryCacheResetLock,
270    WaiterEventHandlerLock => EpollWaitableStateLock,
271    // keep-sorted end
272
273    // Terminal Levels. No lock level should ever be defined after this.
274    // Can be used for any locks that is never acquired before any other lock.
275    // keep-sorted start
276    Terminal(AioEventsLock),
277    Terminal(AndroidUsbCcToggleEnableLock),
278    Terminal(AuditDenyCountsLock),
279    Terminal(AuditNetlinkClientAuditResponseLock),
280    Terminal(AuditQueueLock),
281    Terminal(AuditSinkLock),
282    Terminal(BinderThreadRequeueEventLock),
283    Terminal(BootedLock),
284    Terminal(CgroupDirectoryNodesLock),
285    Terminal(ComponentControllerLock),
286    Terminal(CoreDumpListLock),
287    Terminal(CpuC2ProxyCacheLock),
288    Terminal(CpuFreqProxyCacheLock),
289    Terminal(DynamicThreadSpawnerLock),
290    Terminal(EbpfVerifierDependenciesLock),
291    Terminal(EventFdInnerLock),
292    Terminal(EventHandlerReadyQueueLock),
293    Terminal(ExpandoLock),
294    Terminal(FileAsyncOwnerLock),
295    Terminal(FileLeaseLock),
296    Terminal(FileServerStatsLock),
297    Terminal(FileSystemEntriesLock),
298    Terminal(FileSystemPermanentLock),
299    Terminal(FramebufferMemoryLock),
300    Terminal(FramebufferPresentationReceiverLock),
301    Terminal(FramebufferSceneStateLock),
302    Terminal(FramebufferViewBoundProtocolsLock),
303    Terminal(FramebufferViewIdentityLock),
304    Terminal(FsNodeFsVerityLock),
305    Terminal(FsRegistryLock),
306    Terminal(FuchsiaRemoteTargetLock),
307    Terminal(FunctionFsResultLock),
308    Terminal(FuseConnectionsLock),
309    Terminal(FuseNodeStateLock),
310    Terminal(HrTimerIsIntervalLock),
311    Terminal(HrTimerManagerStateLock),
312    Terminal(IcmpPingGidsLock),
313    Terminal(InotifyWatchersLock),
314    Terminal(InputDeviceInfoLock),
315    Terminal(InputFileInputFileLock),
316    Terminal(InputRelayDisplaySizeLock),
317    Terminal(KgslAllocatorLock),
318    Terminal(KgslContextsLock),
319    Terminal(KgslGpuObjsLock),
320    Terminal(KgslSyncSourcesLock),
321    Terminal(MagmaBuffersLock),
322    Terminal(MagmaDevicesLock),
323    Terminal(MagmaSemaphoresLock),
324    Terminal(MapInfoCacheBufLock),
325    Terminal(MemoryManagerCachedStatsLock),
326    Terminal(NamespaceFlagsLock),
327    Terminal(NanohubContentsLock),
328    Terminal(NanohubServiceLock),
329    Terminal(NetnsIdLock),
330    Terminal(NmfsNetworkManagerLock),
331    Terminal(NotFoundCountsLock),
332    Terminal(OdpmRailLastReadingLock),
333    Terminal(OdpmRailProxyLock),
334    Terminal(PagerFilesByInodeLock),
335    Terminal(PagerFilesystemsLock),
336    Terminal(PerfFormatIdLookupTableLock),
337    Terminal(PerfRingBufferStateLock),
338    Terminal(PidToKoidMapInnerLock),
339    Terminal(PortWaiterCallbacksLock),
340    Terminal(PortWaiterWaitQueuesLock),
341    Terminal(PowerMessageCountersLock),
342    Terminal(PrefetchQueueStateLock),
343    Terminal(PrefetchWorkerReceiversLock),
344    Terminal(ProfileHandleCacheLock),
345    Terminal(PsiProviderHistoryLock),
346    Terminal(PtsIdsSetLock),
347    Terminal(QbgShutdownLock),
348    Terminal(RcuCacheLock),
349    Terminal(RcuHashMapLock),
350    Terminal(ReadWriteBytesFileLock),
351    Terminal(RebootErrorStateLock),
352    Terminal(RemoteBinderControllerLock),
353    Terminal(RemoteBinderResponderLock),
354    Terminal(RemoteBundleInnerLock),
355    Terminal(RemoteUnixDomainSocketStateLock),
356    Terminal(RwQueueInnerLock),
357    Terminal(SeLinuxPeerSidLock),
358    Terminal(SeLinuxPendingEntriesLock),
359    Terminal(SeLinuxPendingFileSystemsLock),
360    Terminal(SeLinuxSecurityServerStateLock),
361    Terminal(SeLinuxUpdateLock),
362    Terminal(SignalActionsLock),
363    Terminal(SocketStateLock),
364    Terminal(StarnixKernelWakeLeaseLock),
365    Terminal(StubBytesFileStateLock),
366    Terminal(SuspendResumeManagerInnerLock),
367    Terminal(SyscallLogFiltersLock),
368    Terminal(SyslogStateLock),
369    Terminal(TaskCommandLevel),
370    Terminal(ThermalChargeLevelLock),
371    Terminal(ThreadLockupDetectorRegistryLock),
372    Terminal(ThrottledCoreDumpsLock),
373    Terminal(TouchPowerPolicyEnabledLock),
374    Terminal(TraceFsDataLock),
375    Terminal(TunDevTunLock),
376    Terminal(UinputDeviceStateLock),
377    Terminal(UtsNamespaceLock),
378    Terminal(VmspliceSegmentsLock),
379    Terminal(WakeSourcesLock),
380    Terminal(WakeWatchersLock),
381    // keep-sorted end
382}