/DragonOS/kernel/src/libs/ |
H A D | spinlock.rs | 27 pub struct SpinLockGuard<'a, T: 'a> { struct 34 impl<'a, T: 'a> SpinLockGuard<'a, T> { implementation 71 pub fn lock(&self) -> SpinLockGuard<T> { in lock() 83 pub fn lock_no_preempt(&self) -> SpinLockGuard<T> { in lock_no_preempt() 92 pub fn lock_irqsave(&self) -> SpinLockGuard<T> { in lock_irqsave() 101 pub fn try_lock(&self) -> Result<SpinLockGuard<T>, SystemError> { in try_lock() 106 return Ok(SpinLockGuard { in try_lock() 128 pub fn try_lock_irqsave(&self) -> Result<SpinLockGuard<T>, SystemError> { in try_lock_irqsave() 132 return Ok(SpinLockGuard { in try_lock_irqsave() 144 pub fn try_lock_no_preempt(&self) -> Result<SpinLockGuard<T>, SystemError> { in try_lock_no_preempt() [all …]
|
H A D | wait_queue.rs | 17 spinlock::{SpinLock, SpinLockGuard}, 37 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock_irqsave(); in prepare_to_wait_event() 54 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock_irqsave(); in finish_wait() 67 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock_irqsave(); in sleep() 82 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock_irqsave(); in sleep_with_func() 113 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock(); in sleep_without_schedule() 125 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock(); in sleep_without_schedule_uninterruptible() 135 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock(); in sleep_uninterruptible() 148 pub fn sleep_unlock_spinlock<T>(&self, to_unlock: SpinLockGuard<T>) { in sleep_unlock_spinlock() 150 let mut guard: SpinLockGuard<InnerWaitQueue> = self.0.lock(); in sleep_unlock_spinlock() [all …]
|
H A D | mutex.rs | 12 libs::spinlock::SpinLockGuard, 64 let mut inner: SpinLockGuard<MutexInner> = self.inner.lock(); in lock() 117 let mut inner: SpinLockGuard<MutexInner> = self.inner.lock(); in unlock()
|
/DragonOS/docs/kernel/locking/ |
H A D | spinlock.md | 55   当需要读取、修改SpinLock保护的数据时,请先使用SpinLock的`lock()`方法。该方法会返回一个`SpinLockGuard`。您可以使用被保护的数据的成员函数… 62 let mut g :SpinLockGuard<Vec<i32>>= x.lock(); 94 …SpinLockGuard`作为守卫。我们在编写代码的时候,保证只有调用`SpinLock`的`lock()`方法加锁后,才能生成一个`SpinLockGuard`。 并且,当我们想要访问受保护的… 104 - 如果函数B需要访问临界区内的数据,那么,函数B应当接收一个类型为`&SpinLockGuard`的参数,这个守卫由函数A获得。这样一来,函数B就能访问临界区内的数据。
|
/DragonOS/kernel/src/exception/ |
H A D | resend.rs | 3 use crate::{exception::irqdesc::IrqDescState, libs::spinlock::SpinLockGuard}; 16 desc_inner_guard: &mut SpinLockGuard<'_, InnerIrqDesc>, in irq_check_and_resend() 72 desc_inner_guard: &SpinLockGuard<'_, InnerIrqDesc>, in try_retrigger()
|
H A D | handle.rs | 10 libs::{once::Once, spinlock::SpinLockGuard}, 66 let out = |din: SpinLockGuard<InnerIrqDesc>| { in handle() 102 let mut desc_inner_guard: SpinLockGuard<'_, InnerIrqDesc> = irq_desc.inner(); in handle() 161 fn irq_may_run(desc_inner_guard: &SpinLockGuard<'_, InnerIrqDesc>) -> bool { in irq_may_run() 212 action_inner: &mut SpinLockGuard<'_, InnerIrqAction>, in do_irq_wake_thread() 241 mut desc_inner_guard: SpinLockGuard<'_, InnerIrqDesc>, in handle_irq_event() 242 ) -> SpinLockGuard<'a, InnerIrqDesc> { in handle_irq_event() 271 let mut action_inner: SpinLockGuard<'_, InnerIrqAction> = action.inner(); in do_handle_irq_event() 296 desc_inner_guard: &SpinLockGuard<'_, InnerIrqDesc>, in cond_unmask_eoi_irq() 335 fn warn_no_thread(irq: IrqNumber, action_inner: &mut SpinLockGuard<'_, InnerIrqAction>) { in warn_no_thread()
|
H A D | manage.rs | 14 libs::{cpumask::CpuMask, spinlock::SpinLockGuard}, 173 |e: SystemError, mut action_guard: SpinLockGuard<'_, InnerIrqAction>| -> SystemError { in inner_setup_irq() 192 action_guard: SpinLockGuard<'_, InnerIrqAction>| in inner_setup_irq() 200 desc_guard: SpinLockGuard<'_, InnerIrqDesc>, in inner_setup_irq() 203 action_guard: SpinLockGuard<'_, InnerIrqAction>| in inner_setup_irq() 209 let err_out_mismatch = |old_action_guard: SpinLockGuard<'_, InnerIrqAction>, in inner_setup_irq() 210 desc_guard: SpinLockGuard<'_, InnerIrqDesc>, in inner_setup_irq() 211 action_guard: SpinLockGuard<'_, InnerIrqAction>, in inner_setup_irq() 320 let mut desc_inner_guard: SpinLockGuard<'_, InnerIrqDesc> = desc.inner(); in inner_setup_irq() 629 desc_inner_guard: &mut SpinLockGuard<'_, InnerIrqDesc>, in irq_activate_and_startup() [all …]
|
/DragonOS/kernel/src/filesystem/devfs/ |
H A D | null_dev.rs | 7 use crate::libs::spinlock::SpinLockGuard; 77 _data: SpinLockGuard<FilePrivateData>, in open() 83 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 117 _data: SpinLockGuard<FilePrivateData>, in read_at() 128 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
H A D | zero_dev.rs | 7 use crate::libs::spinlock::SpinLockGuard; 77 _data: SpinLockGuard<FilePrivateData>, in open() 83 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 117 _data: SpinLockGuard<FilePrivateData>, in read_at() 136 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
H A D | mod.rs | 16 spinlock::{SpinLock, SpinLockGuard}, 84 let mut root_guard: SpinLockGuard<DevFSInode> = devfs.root_inode.0.lock(); in new() 297 let guard: SpinLockGuard<DevFSInode> = self.0.lock(); in add_dir() 344 mut guard: SpinLockGuard<DevFSInode>, in do_create_with_data() 400 _data: SpinLockGuard<FilePrivateData>, in open() 406 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 418 let guard: SpinLockGuard<DevFSInode> = self.0.lock(); in create_with_data() 453 let inode: SpinLockGuard<DevFSInode> = self.0.lock(); in get_entry_name() 542 _data: SpinLockGuard<FilePrivateData>, in read_at() 554 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
/DragonOS/kernel/src/driver/disk/ahci/ |
H A D | ahci_inode.rs | 9 use crate::libs::spinlock::SpinLockGuard; 82 _data: SpinLockGuard<FilePrivateData>, in open() 88 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 122 data: SpinLockGuard<FilePrivateData>, in read_at() 141 data: SpinLockGuard<FilePrivateData>, in write_at()
|
/DragonOS/kernel/src/mm/ |
H A D | mmio_buddy.rs | 2 use crate::libs::spinlock::{SpinLock, SpinLockGuard}; 149 low_list_guard: &mut SpinLockGuard<MmioFreeRegionList>, in split_block() 172 list_guard: &mut SpinLockGuard<MmioFreeRegionList>, in query_addr_region() 185 let pop_list: &mut SpinLockGuard<MmioFreeRegionList> = in query_addr_region() 197 let low_list_guard: &mut SpinLockGuard<MmioFreeRegionList> = in query_addr_region() 216 let low_list_guard: &mut SpinLockGuard<MmioFreeRegionList> = in query_addr_region() 308 let mut list_guard: SpinLockGuard<MmioFreeRegionList> = in mmio_buddy_query_addr_region() 326 list_guard: &mut SpinLockGuard<MmioFreeRegionList>, in push_block() 354 list_guard: &mut SpinLockGuard<MmioFreeRegionList>, in pop_buddy_block() 386 list_guard: &mut SpinLockGuard<MmioFreeRegionList>, in pop_block() [all …]
|
H A D | memblock.rs | 8 spinlock::{SpinLock, SpinLockGuard}, 105 inner: &mut SpinLockGuard<'_, InnerMemBlockManager>, in do_add_block() 172 inner: &mut SpinLockGuard<'_, InnerMemBlockManager>, in do_insert_area() 188 inner: &mut SpinLockGuard<'_, InnerMemBlockManager>, in do_merge_blocks() 249 fn do_remove_region(&self, inner: &mut SpinLockGuard<'_, InnerMemBlockManager>, index: usize) { in do_remove_region() 274 inner: &mut SpinLockGuard<'_, InnerMemBlockManager>, in isolate_range() 409 inner: &SpinLockGuard<'_, InnerMemBlockManager>, in do_is_overlapped() 470 inner: SpinLockGuard<'a, InnerMemBlockManager>,
|
/DragonOS/kernel/src/virt/kvm/ |
H A D | kvm_dev.rs | 9 use crate::libs::spinlock::SpinLockGuard; 95 _data: SpinLockGuard<FilePrivateData>, in open() 102 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 167 _data: SpinLockGuard<FilePrivateData>, in read_at() 178 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
H A D | vcpu_dev.rs | 10 use crate::libs::spinlock::SpinLockGuard; 103 _data: SpinLockGuard<FilePrivateData>, in open() 110 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 203 _data: SpinLockGuard<FilePrivateData>, in read_at() 214 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
H A D | vm_dev.rs | 9 use crate::libs::spinlock::SpinLockGuard; 101 _data: SpinLockGuard<FilePrivateData>, in open() 108 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 199 _data: SpinLockGuard<FilePrivateData>, in read_at() 210 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
/DragonOS/kernel/src/filesystem/kernfs/ |
H A D | callback.rs | 3 libs::spinlock::SpinLockGuard, 38 private_data: SpinLockGuard<'a, Option<KernInodePrivateData>>, 45 private_data: SpinLockGuard<'a, Option<KernInodePrivateData>>, in new()
|
/DragonOS/kernel/src/filesystem/ramfs/ |
H A D | mod.rs | 11 libs::spinlock::{SpinLock, SpinLockGuard}, 140 let mut root_guard: SpinLockGuard<RamFSInode> = result.root_inode.0.lock(); in new() 177 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 183 _data: SpinLockGuard<FilePrivateData>, in open() 194 _data: SpinLockGuard<FilePrivateData>, in read_at() 200 let inode: SpinLockGuard<RamFSInode> = self.0.lock(); in read_at() 226 _data: SpinLockGuard<FilePrivateData>, in write_at() 233 let mut inode: SpinLockGuard<RamFSInode> = self.0.lock(); in write_at() 350 let mut inode: SpinLockGuard<RamFSInode> = self.0.lock(); in link() 351 let mut other_locked: SpinLockGuard<RamFSInode> = other.0.lock(); in link() [all …]
|
/DragonOS/kernel/src/driver/tty/ |
H A D | tty_port.rs | 7 use crate::libs::spinlock::{SpinLock, SpinLockGuard}; 81 fn port_data(&self) -> SpinLockGuard<TtyPortData>; in port_data() 122 fn port_data(&self) -> SpinLockGuard<TtyPortData> { in port_data()
|
/DragonOS/kernel/src/driver/keyboard/ |
H A D | ps2_keyboard.rs | 33 spinlock::{SpinLock, SpinLockGuard}, 122 _data: SpinLockGuard<FilePrivateData>, in read_at() 132 _data: SpinLockGuard<FilePrivateData>, in write_at() 139 _data: SpinLockGuard<FilePrivateData>, in open() 145 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close()
|
/DragonOS/kernel/src/filesystem/ |
H A D | eventfd.rs | 4 use crate::libs::spinlock::{SpinLock, SpinLockGuard}; 83 _data: SpinLockGuard<FilePrivateData>, in open() 89 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 106 data: SpinLockGuard<FilePrivateData>, in read_at() 157 data: SpinLockGuard<FilePrivateData>, in write_at()
|
/DragonOS/kernel/src/driver/scsi/ |
H A D | mod.rs | 7 libs::spinlock::{SpinLock, SpinLockGuard}, 48 fn inner(&self) -> SpinLockGuard<InnerScsiManager> { in inner()
|
/DragonOS/kernel/src/filesystem/devpts/ |
H A D | mod.rs | 27 libs::spinlock::{SpinLock, SpinLockGuard}, 148 _data: SpinLockGuard<FilePrivateData>, in open() 161 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 171 _data: SpinLockGuard<FilePrivateData>, in read_at() 181 _data: SpinLockGuard<FilePrivateData>, in write_at()
|
/DragonOS/kernel/src/filesystem/procfs/ |
H A D | mod.rs | 24 spinlock::{SpinLock, SpinLockGuard}, 360 let mut root_guard: SpinLockGuard<ProcFSInode> = result.root_inode.0.lock(); in new() 454 mut data: SpinLockGuard<FilePrivateData>, in open() 458 let mut inode: SpinLockGuard<ProcFSInode> = self.0.lock(); in open() 480 fn close(&self, mut data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 481 let guard: SpinLockGuard<ProcFSInode> = self.0.lock(); in close() 497 data: SpinLockGuard<FilePrivateData>, in read_at() 503 let inode: SpinLockGuard<ProcFSInode> = self.0.lock(); in read_at() 550 _data: SpinLockGuard<FilePrivateData>, in write_at() 655 let mut inode: SpinLockGuard<ProcFSInode> = self.0.lock(); in link() [all …]
|
/DragonOS/kernel/src/driver/video/fbdev/base/ |
H A D | fbmem.rs | 39 spinlock::{SpinLock, SpinLockGuard}, 251 fn do_device_number(&self, inner_guard: &SpinLockGuard<'_, InnerFbDevice>) -> DeviceNumber { in do_device_number() 255 fn inner(&self) -> SpinLockGuard<InnerFbDevice> { in inner() 397 _data: SpinLockGuard<FilePrivateData>, in open() 403 fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> { in close() 411 _data: SpinLockGuard<FilePrivateData>, in read_at() 422 _data: SpinLockGuard<FilePrivateData>, in write_at()
|