mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
Add a vmparam.h constant indicating pmap support for large pages.
Enable SHM_LARGEPAGE support on arm64. Reviewed by: alc, kib Sponsored by: Juniper Networks, Inc., Klara, Inc. Differential Revision: https://reviews.freebsd.org/D26467
This commit is contained in:
parent
4168aedcde
commit
78257765f2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=366090
|
@ -253,6 +253,11 @@
|
|||
*/
|
||||
#define VM_BATCHQUEUE_SIZE 31
|
||||
|
||||
/*
|
||||
* The pmap can create non-transparent large page mappings.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 1
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -193,6 +193,11 @@ extern vm_offset_t vm_max_kernel_address;
|
|||
|
||||
#define DEVMAP_MAX_VADDR ARM_VECTORS_HIGH
|
||||
|
||||
/*
|
||||
* No non-transparent large page support in the pmap.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 0
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -243,6 +243,11 @@ extern vm_offset_t init_pt_va;
|
|||
|
||||
#define DEVMAP_MAX_VADDR VM_MAX_KERNEL_ADDRESS
|
||||
|
||||
/*
|
||||
* The pmap can create non-transparent large page mappings.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 1
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -240,6 +240,11 @@
|
|||
#define PHYS_TO_DMAP(x) ({ panic("No direct map exists"); 0; })
|
||||
#define DMAP_TO_PHYS(x) ({ panic("No direct map exists"); 0; })
|
||||
|
||||
/*
|
||||
* No non-transparent large page support in the pmap.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 0
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -1067,10 +1067,8 @@ kern_shm_open2(struct thread *td, const char *userpath, int flags, mode_t mode,
|
|||
return (EINVAL);
|
||||
|
||||
largepage = (shmflags & SHM_LARGEPAGE) != 0;
|
||||
#if !defined(__amd64__)
|
||||
if (largepage)
|
||||
if (largepage && !PMAP_HAS_LARGEPAGES)
|
||||
return (ENOTTY);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Currently only F_SEAL_SEAL may be set when creating or opening shmfd.
|
||||
|
|
|
@ -197,6 +197,11 @@
|
|||
#define PHYS_TO_DMAP(x) MIPS_PHYS_TO_DIRECT(x)
|
||||
#define DMAP_TO_PHYS(x) MIPS_DIRECT_TO_PHYS(x)
|
||||
|
||||
/*
|
||||
* No non-transparent large page support in the pmap.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 0
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -327,4 +327,9 @@ struct pmap_physseg {
|
|||
KASSERT(hw_direct_map, ("Direct map not provided by PMAP")); \
|
||||
(x) &~ DMAP_BASE_ADDRESS; })
|
||||
|
||||
/*
|
||||
* No non-transparent large page support in the pmap.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 0
|
||||
|
||||
#endif /* _MACHINE_VMPARAM_H_ */
|
||||
|
|
|
@ -236,6 +236,11 @@ extern vm_offset_t init_pt_va;
|
|||
|
||||
#define DEVMAP_MAX_VADDR VM_MAX_KERNEL_ADDRESS
|
||||
|
||||
/*
|
||||
* No non-transparent large page support in the pmap.
|
||||
*/
|
||||
#define PMAP_HAS_LARGEPAGES 0
|
||||
|
||||
/*
|
||||
* Need a page dump array for minidump.
|
||||
*/
|
||||
|
|
|
@ -487,6 +487,8 @@ vm_fault_populate(struct faultstate *fs)
|
|||
* populate only busies the first page in superpage run.
|
||||
*/
|
||||
if (bdry_idx != 0) {
|
||||
KASSERT(PMAP_HAS_LARGEPAGES,
|
||||
("missing pmap support for large pages"));
|
||||
m = vm_page_lookup(fs->first_object, pager_first);
|
||||
vm_fault_populate_check_page(m);
|
||||
VM_OBJECT_WUNLOCK(fs->first_object);
|
||||
|
|
Loading…
Reference in a new issue