Re: git: 74e4a8d208f0 - main - pmap: add pmap_kextract(9) man page
- Reply: Konstantin Belousov : "Re: git: 74e4a8d208f0 - main - pmap: add pmap_kextract(9) man page"
- Reply: John Baldwin : "Re: git: 74e4a8d208f0 - main - pmap: add pmap_kextract(9) man page"
- In reply to: Konstantin Belousov : "Re: git: 74e4a8d208f0 - main - pmap: add pmap_kextract(9) man page"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 14 Oct 2023 17:34:58 UTC
On 10/14/23 10:28, Konstantin Belousov wrote: > On Fri, Oct 13, 2023 at 06:27:33PM +0000, Mitchell Horne wrote: >> The branch main has been updated by mhorne: >> >> URL: https://cgit.FreeBSD.org/src/commit/?id=74e4a8d208f0b3cf2525e3786f3efba71fcdb752 >> >> commit 74e4a8d208f0b3cf2525e3786f3efba71fcdb752 >> Author: Mina Galić <freebsd@igalic.co> >> AuthorDate: 2023-08-23 00:12:49 +0000 >> Commit: Mitchell Horne <mhorne@FreeBSD.org> >> CommitDate: 2023-10-13 18:27:24 +0000 >> >> pmap: add pmap_kextract(9) man page >> >> Add a man page for pmap_kextract(9), with alias to vtophys(9). This man >> page is based on pmap_extract(9). >> >> Add it as cross reference in pmap(9), and add comments above the >> function implementations. >> >> Co-authored-by: Graham Perrin <grahamperrin@gmail.com> >> Co-authored-by: mhorne >> Sponsored by: The FreeBSD Foundation >> Pull Request: https://github.com/freebsd/freebsd-src/pull/827 >> --- >> share/man/man9/Makefile | 2 ++ >> share/man/man9/pmap.9 | 1 + >> share/man/man9/pmap_kextract.9 | 65 ++++++++++++++++++++++++++++++++++++++++++ >> sys/amd64/amd64/pmap.c | 8 +++++- >> sys/arm64/arm64/pmap.c | 6 ++++ >> sys/riscv/riscv/pmap.c | 6 ++++ >> 6 files changed, 87 insertions(+), 1 deletion(-) >> >> diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile >> index 0b56a47db332..6768f52a38d6 100644 >> --- a/share/man/man9/Makefile >> +++ b/share/man/man9/Makefile >> @@ -268,6 +268,7 @@ MAN= accept_filter.9 \ >> pmap_copy.9 \ >> pmap_enter.9 \ >> pmap_extract.9 \ >> + pmap_kextract.9 \ >> pmap_growkernel.9 \ >> pmap_init.9 \ >> pmap_is_modified.9 \ >> @@ -1807,6 +1808,7 @@ MLINKS+=PHOLD.9 PRELE.9 \ >> PHOLD.9 PROC_ASSERT_NOT_HELD.9 >> MLINKS+=pmap_copy.9 pmap_copy_page.9 >> MLINKS+=pmap_extract.9 pmap_extract_and_hold.9 >> +MLINKS+=pmap_kextract.9 vtophys.9 >> MLINKS+=pmap_init.9 pmap_init2.9 >> MLINKS+=pmap_is_modified.9 pmap_ts_referenced.9 >> MLINKS+=pmap_pinit.9 pmap_pinit0.9 \ >> diff --git a/share/man/man9/pmap.9 b/share/man/man9/pmap.9 >> index 3f6a0f63c264..db27fe880afc 100644 >> --- a/share/man/man9/pmap.9 >> +++ b/share/man/man9/pmap.9 >> @@ -97,6 +97,7 @@ operation. >> .Xr pmap_init2 9 , >> .Xr pmap_is_modified 9 , >> .Xr pmap_is_prefaultable 9 , >> +.Xr pmap_kextract 9 , >> .Xr pmap_map 9 , >> .Xr pmap_mincore 9 , >> .Xr pmap_object_init_pt 9 , >> diff --git a/share/man/man9/pmap_kextract.9 b/share/man/man9/pmap_kextract.9 >> new file mode 100644 >> index 000000000000..dd73446648f2 >> --- /dev/null >> +++ b/share/man/man9/pmap_kextract.9 >> @@ -0,0 +1,65 @@ >> +.\" >> +.\" SPDX-License-Identifier: BSD-2-Clause >> +.\" >> +.\" Copyright (c) 2023 The FreeBSD Foundation >> +.\" >> +.\" This manual page was written by Mina Galić <FreeBSD@igalic.co> under >> +.\" sponsorship from the FreeBSD Foundation. >> +.\" >> +.Dd August 24, 2023 >> +.Dt PMAP_KEXTRACT 9 >> +.Os >> +.Sh NAME >> +.Nm pmap_kextract , >> +.Nm vtophys >> +.Nd extract a physical address from the kernel page table >> +.Sh SYNOPSIS >> +.In sys/param.h >> +.In vm/vm.h >> +.In vm/pmap.h >> +.Ft vm_paddr_t >> +.Fo pmap_kextract >> +.Fa "vm_offset_t va" >> +.Fc >> +.Ft vm_paddr_t >> +.Fo vtophys >> +.Fa "vm_offset_t va" >> +.Fc >> +.Sh DESCRIPTION >> +The >> +.Fn pmap_kextract >> +function retrieves the underlying physical memory address corresponding to the given kernel virtual address > Line too long. > >> +.Fa va . >> +The value of >> +.Fa va >> +must correlate to an active mapping in the kernel address space. > What does it mean 'correlate'? > 'correlate' means that the relationship exists in both directions. We could describe an address as "belonging to" a VA->PA mapping, or we could say that an address "posseses" such a mapping. Maybe you have a strong opinion on why one is incorrect. Since 'correlate' is not established terminology, and needlessly confusing, I can simplify it to: "The value of va must belong to an active mapping in..." If you have a different suggestion, let me know. >> +.Pp >> +.Fn vtophys >> +is an alias for >> +.Fn pmap_kextract >> +and behaves identically. >> +.Sh RETURN VALUES >> +The >> +.Fn pmap_kextract >> +function will return the physical address >> +.Pq Vt vm_paddr_t >> +associated with the kernel virtual address > and 'associated'? > > The function returns address of physical memory mapped at the supplied > kernel virtual address. > Sure, this is more accurate. >> +.Fa va . >> +.Pp >> +.Fn pmap_kextract >> +generally does not fail. >> +However, if supplied with an illegitimate value for >> +.Fa va , >> +the function may return zero, an invalid non-zero value, or call >> +.Xr panic 9 . >> +.Sh SEE ALSO >> +.Xr pmap 9 , >> +.Xr pmap_extract 9 >> +.Sh AUTHORS >> +.An -nosplit >> +This manual page was written by >> +.An Mina Galić Aq Mt FreeBSD@igalic.co , >> +based on the >> +.Xr pmap_extract 9 >> +page written by >> +.An Bruce M Simpson Aq Mt bms@spc.org . >> diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c >> index ff83d8749313..8c438cfb4639 100644 >> --- a/sys/amd64/amd64/pmap.c >> +++ b/sys/amd64/amd64/pmap.c >> @@ -3846,7 +3846,7 @@ pmap_flush_cache_phys_range(vm_paddr_t spa, vm_paddr_t epa, vm_memattr_t mattr) >> * Extract the physical page address associated >> * with the given map/virtual_address pair. >> */ >> -vm_paddr_t >> +vm_paddr_t >> pmap_extract(pmap_t pmap, vm_offset_t va) >> { >> pdp_entry_t *pdpe; >> @@ -3933,6 +3933,12 @@ out: >> return (m); >> } >> >> +/* >> + * Routine: pmap_kextract >> + * Function: >> + * Extract the physical page address associated with the given kernel >> + * virtual address. >> + */ >> vm_paddr_t >> pmap_kextract(vm_offset_t va) >> { >> diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c >> index 6f2afa0b98a3..8c2c6f9d7b81 100644 >> --- a/sys/arm64/arm64/pmap.c >> +++ b/sys/arm64/arm64/pmap.c >> @@ -1949,6 +1949,12 @@ pmap_klookup(vm_offset_t va, vm_paddr_t *pa) >> return (true); >> } >> >> +/* >> + * Routine: pmap_kextract >> + * Function: >> + * Extract the physical page address associated with the given kernel >> + * virtual address. >> + */ >> vm_paddr_t >> pmap_kextract(vm_offset_t va) >> { >> diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c >> index 49ee54b37918..66054898b281 100644 >> --- a/sys/riscv/riscv/pmap.c >> +++ b/sys/riscv/riscv/pmap.c >> @@ -970,6 +970,12 @@ pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot) >> return (m); >> } >> >> +/* >> + * Routine: pmap_kextract >> + * Function: >> + * Extract the physical page address associated with the given kernel >> + * virtual address. >> + */ >> vm_paddr_t >> pmap_kextract(vm_offset_t va) >> {