Skip to content

Commit 582dc1e

Browse files
committed
Bump to v0.5.5
1 parent 02baca4 commit 582dc1e

File tree

6 files changed

+43
-37
lines changed

6 files changed

+43
-37
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
# Changelog
22

3+
## 0.5.5
4+
5+
### Bug Fixes
6+
7+
- [Fix memory leak in `PageTable64::dealloc_tree`](https://github.com/arceos-org/page_table_multiarch/pull/22).
8+
39
## 0.5.4
410

5-
## New Features
11+
### New Features
612

713
- [Fix invalid query result](https://github.com/arceos-org/page_table_multiarch/pull/17).
814
- [Fix incorrect TLB flush VA bits on aarch64](https://github.com/arceos-org/page_table_multiarch/pull/21).

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ resolver = "2"
44
members = ["page_table_multiarch", "page_table_entry"]
55

66
[workspace.package]
7-
version = "0.5.4"
7+
version = "0.5.5"
88
edition = "2024"
99
authors = ["Yuekai Jia <[email protected]>"]
1010
license = "GPL-3.0-or-later OR Apache-2.0 OR MulanPSL-2.0"

page_table_multiarch/src/arch/riscv.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ use page_table_entry::riscv::Rv64PTE;
55

66
#[inline]
77
fn riscv_flush_tlb(vaddr: Option<memory_addr::VirtAddr>) {
8-
unsafe {
9-
if let Some(vaddr) = vaddr {
10-
riscv::asm::sfence_vma(0, vaddr.as_usize())
11-
} else {
12-
riscv::asm::sfence_vma_all();
13-
}
8+
if let Some(vaddr) = vaddr {
9+
riscv::asm::sfence_vma(0, vaddr.as_usize())
10+
} else {
11+
riscv::asm::sfence_vma_all();
1412
}
1513
}
1614

page_table_multiarch/src/bits64.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,7 @@ impl<M: PagingMetaData, PTE: GenericPTE, H: PagingHandler> PageTable64<M, PTE, H
200200
PageSize::Size4K
201201
};
202202
let tlb = self.map(vaddr, paddr, page_size, flags).inspect_err(|e| {
203-
error!(
204-
"failed to map page: {:#x?}({:?}) -> {:#x?}, {:?}",
205-
vaddr_usize, page_size, paddr, e
206-
)
203+
error!("failed to map page: {vaddr_usize:#x?}({page_size:?}) -> {paddr:#x?}, {e:?}")
207204
})?;
208205
if flush_tlb_by_page {
209206
M::flush_tlb(Some(vaddr));
@@ -245,7 +242,7 @@ impl<M: PagingMetaData, PTE: GenericPTE, H: PagingHandler> PageTable64<M, PTE, H
245242
let vaddr = vaddr_usize.into();
246243
let (_, page_size, tlb) = self
247244
.unmap(vaddr)
248-
.inspect_err(|e| error!("failed to unmap page: {:#x?}, {:?}", vaddr_usize, e))?;
245+
.inspect_err(|e| error!("failed to unmap page: {vaddr_usize:#x?}, {e:?}"))?;
249246
if flush_tlb_by_page {
250247
tlb.flush();
251248
} else {
@@ -287,7 +284,7 @@ impl<M: PagingMetaData, PTE: GenericPTE, H: PagingHandler> PageTable64<M, PTE, H
287284
let vaddr = vaddr_usize.into();
288285
let (page_size, tlb) = self
289286
.protect(vaddr, flags)
290-
.inspect_err(|e| error!("failed to protect page: {:#x?}, {:?}", vaddr_usize, e))?;
287+
.inspect_err(|e| error!("failed to protect page: {vaddr_usize:#x?}, {e:?}"))?;
291288
if flush_tlb_by_page {
292289
tlb.flush();
293290
} else {

page_table_multiarch/tests/alloc_tests.rs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ const PAGE_LAYOUT: Layout = unsafe { Layout::from_size_align_unchecked(4096, 409
1515
thread_local! {
1616
static ALLOCATED: RefCell<HashSet<usize>> = RefCell::default();
1717
}
18+
1819
struct TrackPagingHandler<M: PagingMetaData>(PhantomData<M>);
20+
1921
impl<M: PagingMetaData> PagingHandler for TrackPagingHandler<M> {
2022
fn alloc_frame() -> Option<PhysAddr> {
2123
let ptr = unsafe { alloc::alloc(PAGE_LAYOUT) } as usize;
@@ -38,9 +40,7 @@ impl<M: PagingMetaData> PagingHandler for TrackPagingHandler<M> {
3840
}
3941

4042
fn phys_to_virt(paddr: PhysAddr) -> VirtAddr {
41-
if paddr.as_usize() == 0 {
42-
panic!();
43-
}
43+
assert!(paddr.as_usize() > 0);
4444
VirtAddr::from_usize(paddr.as_usize())
4545
}
4646
}
@@ -91,36 +91,41 @@ fn run_test_for<M: PagingMetaData<VirtAddr = VirtAddr>, PTE: GenericPTE>() -> Pa
9191
}
9292

9393
#[test]
94-
fn test_dealloc() -> PagingResult<()> {
95-
#[cfg(target_arch = "x86_64")]
94+
fn test_dealloc_x86() -> PagingResult<()> {
9695
run_test_for::<
9796
page_table_multiarch::x86_64::X64PagingMetaData,
9897
page_table_entry::x86_64::X64PTE,
9998
>()?;
99+
Ok(())
100+
}
100101

101-
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
102-
{
103-
run_test_for::<
104-
page_table_multiarch::riscv::Sv39MetaData<VirtAddr>,
105-
page_table_entry::riscv::Rv64PTE,
106-
>()?;
107-
run_test_for::<
108-
page_table_multiarch::riscv::Sv48MetaData<VirtAddr>,
109-
page_table_entry::riscv::Rv64PTE,
110-
>()?;
111-
}
102+
#[test]
103+
fn test_dealloc_riscv() -> PagingResult<()> {
104+
run_test_for::<
105+
page_table_multiarch::riscv::Sv39MetaData<VirtAddr>,
106+
page_table_entry::riscv::Rv64PTE,
107+
>()?;
108+
run_test_for::<
109+
page_table_multiarch::riscv::Sv48MetaData<VirtAddr>,
110+
page_table_entry::riscv::Rv64PTE,
111+
>()?;
112+
Ok(())
113+
}
112114

113-
#[cfg(target_arch = "aarch64")]
115+
#[test]
116+
fn test_dealloc_aarch64() -> PagingResult<()> {
114117
run_test_for::<
115118
page_table_multiarch::aarch64::A64PagingMetaData,
116119
page_table_entry::aarch64::A64PTE,
117120
>()?;
121+
Ok(())
122+
}
118123

119-
#[cfg(target_arch = "loongarch64")]
124+
#[test]
125+
fn test_dealloc_loongarch64() -> PagingResult<()> {
120126
run_test_for::<
121127
page_table_multiarch::loongarch64::LA64MetaData,
122128
page_table_entry::loongarch64::LA64PTE,
123129
>()?;
124-
125130
Ok(())
126131
}

0 commit comments

Comments
 (0)