From: Antonio Huete Date: Fri, 4 Feb 2011 13:34:05 +0000 (+0100) Subject: kern - Properly return the number of bytes in hw.physmem sysctl. X-Git-Tag: v2.11.0~267^2~114 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/39d69daecef529eb49d36fefa429c8ac08e7cbc1 kern - Properly return the number of bytes in hw.physmem sysctl. - Changed physmem from int to long, now it can hold a really high number of pages. - Return an unsigned long value with appropiate formatting for hw.physmem. - Add description for it. Based-upon: FreeBSD --- diff --git a/sbin/sysctl/sysctl.8 b/sbin/sysctl/sysctl.8 index ea18516e45..d8cb3fe846 100644 --- a/sbin/sysctl/sysctl.8 +++ b/sbin/sysctl/sysctl.8 @@ -33,7 +33,7 @@ .\" $FreeBSD: src/sbin/sysctl/sysctl.8,v 1.23.2.17 2003/05/19 07:49:34 brueffer Exp $ .\" $DragonFly: src/sbin/sysctl/sysctl.8,v 1.7 2007/10/02 12:57:00 hasso Exp $ .\" -.Dd March 10, 2002 +.Dd February 3, 2011 .Dt SYSCTL 8 .Os .Sh NAME @@ -198,7 +198,7 @@ denote .It "hw.model string no" .It "hw.ncpu integer no" .It "hw.byteorder integer no" -.It "hw.physmem integer no" +.It "hw.physmem long no" .It "hw.usermem integer no" .It "hw.pagesize integer no" .It "hw.floatingpoint integer no" diff --git a/sys/platform/pc32/i386/machdep.c b/sys/platform/pc32/i386/machdep.c index a06da81eaa..007337098c 100644 --- a/sys/platform/pc32/i386/machdep.c +++ b/sys/platform/pc32/i386/machdep.c @@ -160,19 +160,21 @@ SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count, CTLFLAG_RD, &tlb_flush_count, 0, ""); #endif -int physmem = 0; +long physmem = 0; u_long ebda_addr = 0; static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS) { - int error = sysctl_handle_int(oidp, 0, ctob(physmem), req); + u_long pmem = ctob(physmem); + + int error = sysctl_handle_long(oidp, &pmem, 0, req); return (error); } -SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_INT|CTLFLAG_RD, - 0, 0, sysctl_hw_physmem, "IU", ""); +SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG|CTLFLAG_RD, + 0, 0, sysctl_hw_physmem, "LU", "Size in bytes of system's memory pages"); static int sysctl_hw_usermem(SYSCTL_HANDLER_ARGS) diff --git a/sys/platform/pc64/x86_64/machdep.c b/sys/platform/pc64/x86_64/machdep.c index 9fbdcbedb8..81052eba30 100644 --- a/sys/platform/pc64/x86_64/machdep.c +++ b/sys/platform/pc64/x86_64/machdep.c @@ -169,19 +169,21 @@ SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count, CTLFLAG_RD, &tlb_flush_count, 0, ""); #endif -int physmem = 0; +long physmem = 0; u_long ebda_addr = 0; static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS) { - int error = sysctl_handle_int(oidp, 0, ctob(physmem), req); + u_long pmem = ctob(physmem); + + int error = sysctl_handle_long(oidp, &pmem, 0, req); return (error); } -SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_INT|CTLFLAG_RD, - 0, 0, sysctl_hw_physmem, "IU", ""); +SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG|CTLFLAG_RD, + 0, 0, sysctl_hw_physmem, "LU", "Size in bytes of system's memory pages"); static int sysctl_hw_usermem(SYSCTL_HANDLER_ARGS) diff --git a/sys/platform/vkernel/i386/cpu_regs.c b/sys/platform/vkernel/i386/cpu_regs.c index 97ab8dc987..ef21913b3c 100644 --- a/sys/platform/vkernel/i386/cpu_regs.c +++ b/sys/platform/vkernel/i386/cpu_regs.c @@ -135,12 +135,14 @@ SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count, static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS) { - int error = sysctl_handle_int(oidp, 0, ctob((int)Maxmem), req); + u_long pmem = ctob(physmem); + + int error = sysctl_handle_long(oidp, &pmem, 0, req); return (error); } -SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_INT|CTLFLAG_RD, - 0, 0, sysctl_hw_physmem, "IU", ""); +SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG|CTLFLAG_RD, + 0, 0, sysctl_hw_physmem, "LU", "Size in bytes of system's memory pages"); static int sysctl_hw_usermem(SYSCTL_HANDLER_ARGS) diff --git a/sys/platform/vkernel/platform/init.c b/sys/platform/vkernel/platform/init.c index d205e25831..3a79fa6495 100644 --- a/sys/platform/vkernel/platform/init.c +++ b/sys/platform/vkernel/platform/init.c @@ -83,7 +83,7 @@ vm_paddr_t phys_avail[16]; vm_paddr_t Maxmem; vm_paddr_t Maxmem_bytes; -int physmem; +long physmem; int MemImageFd = -1; struct vkdisk_info DiskInfo[VKDISK_MAX]; int DiskNum; diff --git a/sys/platform/vkernel64/platform/init.c b/sys/platform/vkernel64/platform/init.c index f29ed3a123..2be53cb7c4 100644 --- a/sys/platform/vkernel64/platform/init.c +++ b/sys/platform/vkernel64/platform/init.c @@ -83,7 +83,7 @@ vm_paddr_t phys_avail[16]; vm_paddr_t Maxmem; vm_paddr_t Maxmem_bytes; -int physmem; +long physmem; int MemImageFd = -1; struct vkdisk_info DiskInfo[VKDISK_MAX]; int DiskNum; diff --git a/sys/platform/vkernel64/x86_64/cpu_regs.c b/sys/platform/vkernel64/x86_64/cpu_regs.c index 4d5f5e198a..0ac07afe86 100644 --- a/sys/platform/vkernel64/x86_64/cpu_regs.c +++ b/sys/platform/vkernel64/x86_64/cpu_regs.c @@ -133,13 +133,14 @@ SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count, static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS) { - /* JG */ - int error = sysctl_handle_int(oidp, 0, ctob((int)Maxmem), req); + u_long pmem = ctob(physmem); + + int error = sysctl_handle_long(oidp, &pmem, 0, req); return (error); } -SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_INT|CTLFLAG_RD, - 0, 0, sysctl_hw_physmem, "IU", ""); +SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG|CTLFLAG_RD, + 0, 0, sysctl_hw_physmem, "LU", "Size in bytes of system's memory pages"); static int sysctl_hw_usermem(SYSCTL_HANDLER_ARGS) diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 94b8d96b10..66599774c0 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -474,7 +474,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); { "model", CTLTYPE_STRING }, \ { "ncpu", CTLTYPE_INT }, \ { "byteorder", CTLTYPE_INT }, \ - { "physmem", CTLTYPE_UINT }, \ + { "physmem", CTLTYPE_ULONG }, \ { "usermem", CTLTYPE_UINT }, \ { "pagesize", CTLTYPE_INT }, \ { "disknames", CTLTYPE_STRUCT }, \ diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 0c0de4e255..a2e77a6837 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -72,7 +72,7 @@ extern int selwait; /* select timeout address */ extern u_char curpriority; /* priority of current process */ -extern int physmem; /* physical memory */ +extern long physmem; /* physical memory */ extern cdev_t dumpdev; /* dump device */ extern u_int64_t dumplo64; /* block number into dumpdev, start of dump */