/DragonOS/kernel/src/common/ |
H A D | spinlock.h | 22 int8_t lock; // 1:unlocked 0:locked member 25 extern void __arch_spin_lock(spinlock_t *lock); 26 extern void __arch_spin_unlock(spinlock_t *lock); 28 extern void __arch_spin_lock_no_preempt(spinlock_t *lock); 29 extern void __arch_spin_unlock_no_preempt(spinlock_t *lock); 31 extern long __arch_spin_trylock(spinlock_t *lock); 38 void spin_lock(spinlock_t *lock) in spin_lock() argument 40 __arch_spin_lock(lock); in spin_lock() 48 void spin_unlock(spinlock_t *lock) in spin_unlock() argument 50 __arch_spin_unlock(lock); in spin_unlock() [all …]
|
/DragonOS/kernel/src/arch/x86_64/asm/ |
H A D | spinlock.c | 4 void __arch_spin_lock(spinlock_t *lock) in __arch_spin_lock() argument 15 : "=m"(lock->lock)::"memory"); in __arch_spin_lock() 19 void __arch_spin_unlock(spinlock_t *lock) in __arch_spin_unlock() argument 21 __asm__ __volatile__("movb $1, %0 \n\t" : "=m"(lock->lock)::"memory"); in __arch_spin_unlock() 25 void __arch_spin_lock_no_preempt(spinlock_t *lock) in __arch_spin_lock_no_preempt() argument 36 : "=m"(lock->lock)::"memory"); in __arch_spin_lock_no_preempt() 39 void __arch_spin_unlock_no_preempt(spinlock_t *lock) in __arch_spin_unlock_no_preempt() argument 41 __asm__ __volatile__("movb $1, %0 \n\t" : "=m"(lock->lock)::"memory"); in __arch_spin_unlock_no_preempt() 44 long __arch_spin_trylock(spinlock_t *lock) in __arch_spin_trylock() argument 50 : "=q"(tmp_val), "=m"(lock->lock) in __arch_spin_trylock()
|
/DragonOS/kernel/src/libs/ |
H A D | spinlock.rs | 18 lock: AtomicBool, field 28 lock: &'a SpinLock<T>, field 48 unsafe { &mut *this.lock.data.get() } in leak() 53 self.lock.force_unlock(); in unlock_no_preempt() 65 lock: AtomicBool::new(false), in new() 71 pub fn lock(&self) -> SpinLockGuard<T> { in lock() method 107 lock: self, in try_lock() 122 .lock in inner_try_lock() 133 lock: self, in try_lock_irqsave() 147 lock: self, in try_lock_no_preempt() [all …]
|
H A D | rwlock.rs | 39 lock: AtomicU32, field 47 lock: &'a AtomicU32, field 79 lock: AtomicU32::new(0), in new() 106 let value = self.lock.fetch_add(READER, Ordering::Acquire); in current_reader() 110 self.lock.fetch_sub(READER, Ordering::Release); in current_reader() 143 self.lock.fetch_sub(READER, Ordering::Release); in inner_try_read() 148 lock: &self.lock, in inner_try_read() 195 let state = self.lock.load(Ordering::Relaxed); in reader_count() 203 return (self.lock.load(Ordering::Relaxed) & WRITER) / WRITER; in writer_count() 241 .lock in inner_try_write() [all …]
|
H A D | mutex.rs | 40 lock: &'a Mutex<T>, field 62 pub fn lock(&self) -> MutexGuard<T> { in lock() method 64 let mut inner: SpinLockGuard<MutexInner> = self.inner.lock(); in lock() 84 return MutexGuard { lock: self }; in lock() 93 let mut inner = self.inner.lock(); in try_lock() 101 return Ok(MutexGuard { lock: self }); in try_lock() 117 let mut inner: SpinLockGuard<MutexInner> = self.inner.lock(); in unlock() 153 return unsafe { &*self.lock.data.get() }; in deref() 160 return unsafe { &mut *self.lock.data.get() }; in deref_mut() 167 self.lock.unlock(); in drop()
|
/DragonOS/kernel/src/arch/riscv64/asm/ |
H A D | spinlock.c | 4 void __arch_spin_lock(spinlock_t *lock) in __arch_spin_lock() argument 10 void __arch_spin_unlock(spinlock_t *lock) in __arch_spin_unlock() argument 16 void __arch_spin_lock_no_preempt(spinlock_t *lock) in __arch_spin_lock_no_preempt() argument 21 void __arch_spin_unlock_no_preempt(spinlock_t *lock) in __arch_spin_unlock_no_preempt() argument 26 long __arch_spin_trylock(spinlock_t *lock) in __arch_spin_trylock() argument
|
/DragonOS/kernel/src/driver/input/serio/i8042/ |
H A D | i8042_driver.rs | 47 r.inner.lock().self_ref = Arc::downgrade(&r); in new() 74 device.set_driver(Some(self.inner.lock().self_ref.clone())); in probe() 107 self.inner.lock().devices.clone() in devices() 111 let mut guard = self.inner.lock(); in add_device() 121 let mut guard = self.inner.lock(); in delete_device() 126 self.inner.lock().bus = bus; in set_bus() 130 self.inner.lock().bus.clone() in bus() 140 self.inner.lock().kernfs_inode = inode; in set_inode() 144 self.inner.lock().kernfs_inode.clone() in inode() 148 self.inner.lock().parent.clone() in parent() [all …]
|
/DragonOS/kernel/src/filesystem/ramfs/ |
H A D | mod.rs | 140 let mut root_guard: SpinLockGuard<RamFSInode> = result.root_inode.0.lock(); in new() 163 let mut inode = self.0.lock(); in truncate() 200 let inode: SpinLockGuard<RamFSInode> = self.0.lock(); in read_at() 233 let mut inode: SpinLockGuard<RamFSInode> = self.0.lock(); in write_at() 253 return self.0.lock().fs.upgrade().unwrap(); in fs() 261 let inode = self.0.lock(); in metadata() 269 let mut inode = self.0.lock(); in set_metadata() 281 let mut inode = self.0.lock(); in resize() 299 let mut inode = self.0.lock(); in create_with_data() 337 result.0.lock().self_ref = Arc::downgrade(&result); in create_with_data() [all …]
|
/DragonOS/docs/kernel/locking/ |
H A D | mutex.md | 49   当需要读取、修改Mutex保护的数据时,请先使用Mutex的`lock()`方法。该方法会返回一个`MutexGuard`。您可以使用被保护的数据的成员函数来进行一些操作。或… 56 let mut g :MutexGuard<Vec<i32>>= x.lock(); 101 ### 4.2. lock - 加锁 106 pub fn lock(&self) -> MutexGuard<T> 145 **`void mutex_init(mutex_t *lock)`** 151 **`void mutex_lock(mutex_t *lock)`** 157 **`void mutex_unlock(mutex_t *lock)`** 163 **`void mutex_trylock(mutex_t *lock)`** 169 **`void mutex_is_locked(mutex_t *lock)`**
|
H A D | spinlock.md | 19 需要先调用`lock()`方法,然后当离开临界区时,手动调用`unlock()`方法。我们并没有向编译器显式地指定该自旋锁到底保护的是哪些数据。 39 lock: RawSpinlock, 55   当需要读取、修改SpinLock保护的数据时,请先使用SpinLock的`lock()`方法。该方法会返回一个`SpinLockGuard`。您可以使用被保护的数据的成员函数… 62 let mut g :SpinLockGuard<Vec<i32>>= x.lock(); 94   `SpinLock`之所以能够实现编译期检查,是因为它引入了一个`SpinLockGuard`作为守卫。我们在编写代码的时候,保证只有调用`SpinLock`的`lock()…
|
/DragonOS/kernel/src/driver/open_firmware/ |
H A D | device_node.rs | 62 self.inner.lock().properties.push(prop); in add_property() 66 self.inner.lock().properties.clone() in properties() 70 self.inner.lock().parent.upgrade() in parent() 74 self.inner.lock().parent = Arc::downgrade(&parent); in set_parent() 78 self.inner.lock().children.clone() in children() 82 self.inner.lock().children.push(child); in add_child() 86 self.inner.lock().sibling.as_ref().and_then(|s| s.upgrade()) in sibling() 90 self.inner.lock().sibling = Some(Arc::downgrade(&sibling)); in set_sibling() 94 self.inner.lock().private_data.clone() in private_data() 98 self.inner.lock().private_data = Some(data); in set_private_data()
|
/DragonOS/kernel/src/driver/input/ps2_mouse/ |
H A D | ps_mouse_driver.rs | 97 r.inner.lock().self_ref = Arc::downgrade(&r); in new() 103 let guard = self.inner.lock(); in process_packet() 132 self.inner.lock().devices.clone() in devices() 136 let mut guard = self.inner.lock(); in add_device() 146 let mut guard = self.inner.lock(); in delete_device() 151 self.inner.lock().bus = bus; in set_bus() 155 self.inner.lock().bus.clone() in bus() 165 self.inner.lock().kernfs_inode = inode; in set_inode() 169 self.inner.lock().kernfs_inode.clone() in inode() 173 self.inner.lock().parent.clone() in parent() [all …]
|
/DragonOS/user/apps/test-for-robustfutex/ |
H A D | README.md | 1 # 测试robust lock机制 4 1、robust lock机制中的两个系统调用是否能正常使用
|
/DragonOS/kernel/src/driver/disk/ahci/ |
H A D | ahci_inode.rs | 63 result.0.lock().self_ref = Arc::downgrade(&result); in new() 71 self.0.lock().fs = fs; in set_fs() 93 return Ok(self.0.lock().metadata.clone()); in metadata() 97 return self.0.lock().fs.upgrade().unwrap(); in fs() 105 let mut inode = self.0.lock(); in set_metadata() 129 return self.0.lock().disk.read_at_bytes(offset, len, buf); in read_at() 148 return self.0.lock().disk.write_at_bytes(offset, len, buf); in write_at()
|
/DragonOS/kernel/src/virt/kvm/ |
H A D | mod.rs | 25 let mut vm_list = VM_LIST.lock(); in push_vm() 36 let mut vm_list = VM_LIST.lock(); in remove_vm() 47 let mut vm_list = VM_LIST.lock(); in update_vm() 52 let vm_list = VM_LIST.lock(); in vm()
|
H A D | vcpu_dev.rs | 90 result.0.lock().self_ref = Arc::downgrade(&result); in new() 115 return Ok(self.0.lock().metadata.clone()); in metadata() 119 return self.0.lock().fs.upgrade().unwrap(); in fs() 127 let mut inode = self.0.lock(); in set_metadata() 166 vcpu.lock().virtualize_cpu()?; in ioctl() 187 vcpu.lock().set_regs(kvm_regs)?; in ioctl()
|
/DragonOS/kernel/src/filesystem/procfs/ |
H A D | mod.rs | 360 let mut root_guard: SpinLockGuard<ProcFSInode> = result.root_inode.0.lock(); in new() 379 meminfo_file.0.lock().fdata.pid = Pid::new(0); in new() 380 meminfo_file.0.lock().fdata.ftype = ProcFileType::ProcMeminfo; in new() 392 kmsg_file.0.lock().fdata.pid = Pid::new(1); in new() 393 kmsg_file.0.lock().fdata.ftype = ProcFileType::ProcKmsg; in new() 423 status_file.0.lock().fdata.pid = pid; in register_pid() 424 status_file.0.lock().fdata.ftype = ProcFileType::ProcStatus; in register_pid() 458 let mut inode: SpinLockGuard<ProcFSInode> = self.0.lock(); in open() 481 let guard: SpinLockGuard<ProcFSInode> = self.0.lock(); in close() 503 let inode: SpinLockGuard<ProcFSInode> = self.0.lock(); in read_at() [all …]
|
/DragonOS/kernel/crates/intertrait/ |
H A D | .gitignore | 1 # Cargo lock in subs 2 **/Cargo.lock
|
/DragonOS/kernel/src/filesystem/devfs/ |
H A D | null_dev.rs | 58 result.0.lock().self_ref = Arc::downgrade(&result); in new() 66 self.0.lock().fs = fs; in set_fs() 88 return Ok(self.0.lock().metadata.clone()); in metadata() 92 return self.0.lock().fs.upgrade().unwrap(); in fs() 100 let mut inode = self.0.lock(); in set_metadata()
|
H A D | zero_dev.rs | 58 result.0.lock().self_ref = Arc::downgrade(&result); in new() 66 self.0.lock().fs = fs; in set_fs() 88 return Ok(self.0.lock().metadata.clone()); in metadata() 92 return self.0.lock().fs.upgrade().unwrap(); in fs() 100 let mut inode = self.0.lock(); in set_metadata()
|
H A D | mod.rs | 84 let mut root_guard: SpinLockGuard<DevFSInode> = devfs.root_inode.0.lock(); in new() 155 device.set_fs(dev_char_inode.0.lock().fs.clone()); in register_device() 173 device.set_fs(dev_block_inode.0.lock().fs.clone()); in register_device() 297 let guard: SpinLockGuard<DevFSInode> = self.0.lock(); in add_dir() 320 let mut this = self.0.lock(); in add_dev() 333 .lock() in remove() 385 result.0.lock().self_ref = Arc::downgrade(&result); in do_create_with_data() 418 let guard: SpinLockGuard<DevFSInode> = self.0.lock(); in create_with_data() 424 let inode = self.0.lock(); in find() 449 return self.0.lock().fs.upgrade().unwrap(); in fs() [all …]
|
/DragonOS/kernel/src/filesystem/ |
H A D | eventfd.rs | 112 let val = self.eventfd.lock().count; in read_at() 118 .lock() in read_at() 127 let mut eventfd = self.eventfd.lock(); in read_at() 167 let eventfd = self.eventfd.lock(); in write_at() 180 let mut eventfd = self.eventfd.lock(); in write_at() 196 if self.eventfd.lock().count != 0 { in poll() 199 if self.eventfd.lock().count != u64::MAX { in poll() 226 self.epitems.lock().push_back(epitem); in kernel_ioctl()
|
/DragonOS/kernel/src/ipc/ |
H A D | pipe.rs | 103 self.epitems.lock().push_back(epitem); in add_epoll() 161 let mut guard = result.inner.lock(); in new() 173 let inode = self.inner.lock(); in readable() 178 let inode = self.inner.lock(); in writeable() 206 let mut inode = self.inner.lock(); in read_at() 231 inode = self.inner.lock(); in read_at() 281 let mut guard = self.inner.lock(); in open() 300 let inode = self.inner.lock(); in metadata() 314 let mut guard = self.inner.lock(); in close() 361 let mut inode = self.inner.lock(); in write_at() [all …]
|
/DragonOS/kernel/src/driver/base/map/ |
H A D | mod.rs | 67 .lock() in kobj_map() 88 .lock() in kobj_unmap() 107 if let Some(map) = domain.0.lock().0.get((dev_t.major().data() % 255) as usize) { in kobj_lookup() 131 pub fn lock(&self) -> SpinLockGuard<DevsMap> { in lock() method 132 self.0.lock() in lock()
|
/DragonOS/kernel/src/filesystem/vfs/ |
H A D | file.rs | 138 .lock() in fmt() 161 let mut guard = self.xarray.lock(); in add_page() 167 let mut guard = self.xarray.lock(); in get_page() 174 let mut guard = self.xarray.lock(); in remove_page() 224 f.inode.open(f.private_data.lock(), &mode)?; in new() 302 .read_at(offset, len, buf, self.private_data.lock()) in do_read() 344 .write_at(offset, len, buf, self.private_data.lock()) in do_write() 430 let mut readdir_subdirs_name = self.readdir_subdirs_name.lock(); in readdir() 495 readdir_subdirs_name: SpinLock::new(self.readdir_subdirs_name.lock().clone()), in try_clone() 496 private_data: SpinLock::new(self.private_data.lock().clone()), in try_clone() [all …]
|