From fe105d45a2337d85cfb6ebb9bc7323f5efc35a0a Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 18 Sep 2009 17:04:57 +0000 Subject: [PATCH] Add a new sysctl for reporting all of the supported page sizes. Reviewed by: jhb MFC after: 3 weeks --- sys/amd64/include/param.h | 2 ++ sys/arm/include/param.h | 2 ++ sys/i386/include/param.h | 2 ++ sys/ia64/include/param.h | 2 ++ sys/kern/kern_mib.c | 27 +++++++++++++++++++++++++++ sys/mips/include/param.h | 2 ++ sys/powerpc/include/param.h | 2 ++ sys/sparc64/include/param.h | 2 ++ sys/sun4v/include/param.h | 2 ++ sys/sys/systm.h | 1 + 10 files changed, 44 insertions(+) diff --git a/sys/amd64/include/param.h b/sys/amd64/include/param.h index f9b6bd81d6fe..3ede6014adcc 100644 --- a/sys/amd64/include/param.h +++ b/sys/amd64/include/param.h @@ -108,6 +108,8 @@ #define NBPML4 (1ul<flags & SCTL_MASK32) { + /* + * Recreate the "pagesizes" array with 32-bit elements. Truncate + * any page size greater than UINT32_MAX to zero. + */ + for (i = 0; i < MAXPAGESIZES; i++) + pagesizes32[i] = (uint32_t)pagesizes[i]; + + error = SYSCTL_OUT(req, pagesizes32, sizeof(pagesizes32)); + } else +#endif + error = SYSCTL_OUT(req, pagesizes, sizeof(pagesizes)); + return (error); +} +SYSCTL_PROC(_hw, OID_AUTO, pagesizes, CTLTYPE_ULONG | CTLFLAG_RD, + NULL, 0, sysctl_hw_pagesizes, "LU", "Supported page sizes"); + static char machine_arch[] = MACHINE_ARCH; SYSCTL_STRING(_hw, HW_MACHINE_ARCH, machine_arch, CTLFLAG_RD, machine_arch, 0, "System architecture"); diff --git a/sys/mips/include/param.h b/sys/mips/include/param.h index 10f348a7cf8f..b81864940467 100644 --- a/sys/mips/include/param.h +++ b/sys/mips/include/param.h @@ -115,6 +115,8 @@ #define SEGOFSET (NBSEG-1) /* byte offset into segment */ #define SEGSHIFT 22 /* LOG2(NBSEG) */ +#define MAXPAGESIZES 1 /* maximum number of supported page sizes */ + /* XXXimp: This has moved to vmparam.h */ /* Also, this differs from the mips2 definition, but likely is better */ /* since this means the kernel won't chew up TLBs when it is executing */ diff --git a/sys/powerpc/include/param.h b/sys/powerpc/include/param.h index 160cd782a7d8..6c3edf9c92a0 100644 --- a/sys/powerpc/include/param.h +++ b/sys/powerpc/include/param.h @@ -86,6 +86,8 @@ #define PAGE_MASK (PAGE_SIZE - 1) #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) +#define MAXPAGESIZES 1 /* maximum number of supported page sizes */ + #ifndef KSTACK_PAGES #define KSTACK_PAGES 4 /* includes pcb */ #endif diff --git a/sys/sparc64/include/param.h b/sys/sparc64/include/param.h index 90864b0556f7..af026b293f29 100644 --- a/sys/sparc64/include/param.h +++ b/sys/sparc64/include/param.h @@ -109,6 +109,8 @@ #define PAGE_SIZE_MAX PAGE_SIZE_4M #define PAGE_MASK_MAX PAGE_MASK_4M +#define MAXPAGESIZES 1 /* maximum number of supported page sizes */ + #ifndef KSTACK_PAGES #define KSTACK_PAGES 4 /* pages of kernel stack (with pcb) */ #endif diff --git a/sys/sun4v/include/param.h b/sys/sun4v/include/param.h index 069ab548d57f..2ca699e838a3 100644 --- a/sys/sun4v/include/param.h +++ b/sys/sun4v/include/param.h @@ -104,6 +104,8 @@ #define PAGE_SIZE_MAX PAGE_SIZE_4M #define PAGE_MASK_MAX PAGE_MASK_4M +#define MAXPAGESIZES 1 /* maximum number of supported page sizes */ + #ifndef KSTACK_PAGES #define KSTACK_PAGES 4 /* pages of kernel stack (with pcb) */ #endif diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 96222da91522..397976fd564f 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -54,6 +54,7 @@ extern int kstack_pages; /* number of kernel stack pages */ extern int nswap; /* size of swap space */ +extern u_long pagesizes[]; /* supported page sizes */ extern long physmem; /* physical memory */ extern long realmem; /* 'real' memory */