Bladeren bron

mm_list: remove lock_irq restriction on `MMListInner`

greatbridf 10 maanden geleden
bovenliggende
commit
360dd9da38
1 gewijzigde bestanden met toevoegingen van 7 en 9 verwijderingen
  1. 7 9
      src/kernel/mem/mm_list.rs

+ 7 - 9
src/kernel/mem/mm_list.rs

@@ -47,8 +47,6 @@ struct MMListInner {
 
 #[derive(Debug)]
 pub struct MMList {
-    /// # Safety
-    /// This field might be used in IRQ context, so it should be locked with `lock_irq()`.
     inner: ArcSwap<Mutex<MMListInner>>,
     /// Only used in kernel space to switch page tables on context switch.
     root_page_table: AtomicUsize,
@@ -211,7 +209,7 @@ impl MMList {
 
     pub fn new_cloned(&self) -> Self {
         let inner = self.inner.borrow();
-        let inner = inner.lock_irq();
+        let inner = inner.lock();
 
         let page_table = PageTable::new();
         let list = Self {
@@ -287,7 +285,7 @@ impl MMList {
 
     /// No need to do invalidation manually, `PageTable` already does it.
     pub fn unmap(&self, start: VAddr, len: usize) -> KResult<()> {
-        self.inner.borrow().lock_irq().unmap(start, len)
+        self.inner.borrow().lock().unmap(start, len)
     }
 
     pub fn mmap_hint(
@@ -298,7 +296,7 @@ impl MMList {
         permission: Permission,
     ) -> KResult<VAddr> {
         let inner = self.inner.borrow();
-        let mut inner = inner.lock_irq();
+        let mut inner = inner.lock();
 
         if hint == VAddr::NULL {
             let at = inner.find_available(hint, len).ok_or(ENOMEM)?;
@@ -326,14 +324,14 @@ impl MMList {
     ) -> KResult<VAddr> {
         self.inner
             .borrow()
-            .lock_irq()
+            .lock()
             .mmap(at, len, mapping.clone(), permission)
             .map(|_| at)
     }
 
     pub fn set_break(&self, pos: Option<VAddr>) -> VAddr {
         let inner = self.inner.borrow();
-        let mut inner = inner.lock_irq();
+        let mut inner = inner.lock();
 
         // SAFETY: `set_break` is only called in syscalls, where program break should be valid.
         assert!(inner.break_start.is_some() && inner.break_pos.is_some());
@@ -383,7 +381,7 @@ impl MMList {
     /// This should be called only **once** for every thread.
     pub fn register_break(&self, start: VAddr) {
         let inner = self.inner.borrow();
-        let mut inner = inner.lock_irq();
+        let mut inner = inner.lock();
         assert!(inner.break_start.is_none() && inner.break_pos.is_none());
 
         inner.break_start = Some(start.into());
@@ -403,7 +401,7 @@ impl MMList {
         }
 
         let inner = self.inner.borrow();
-        let inner = inner.lock_irq();
+        let inner = inner.lock();
 
         let mut offset = 0;
         let mut remaining = len;