kern - Properly return the number of bytes in hw.physmem sysctl.
authorAntonio Huete <tuxillo@quantumachine.net>
Fri, 4 Feb 2011 13:34:05 +0000 (14:34 +0100)
committerAntonio Huete <tuxillo@quantumachine.net>
Fri, 4 Feb 2011 13:34:05 +0000 (14:34 +0100)
- 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

sbin/sysctl/sysctl.8
sys/platform/pc32/i386/machdep.c
sys/platform/pc64/x86_64/machdep.c
sys/platform/vkernel/i386/cpu_regs.c
sys/platform/vkernel/platform/init.c
sys/platform/vkernel64/platform/init.c
sys/platform/vkernel64/x86_64/cpu_regs.c
sys/sys/sysctl.h
sys/sys/systm.h

index ea18516..d8cb3fe 100644 (file)
@@ -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"
index a06da81..0073370 100644 (file)
@@ -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)
index 9fbdcbe..81052eb 100644 (file)
@@ -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)
index 97ab8dc..ef21913 100644 (file)
@@ -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)
index d205e25..3a79fa6 100644 (file)
@@ -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;
index f29ed3a..2be53cb 100644 (file)
@@ -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;
index 4d5f5e1..0ac07af 100644 (file)
@@ -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)
index 94b8d96..6659977 100644 (file)
@@ -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 }, \
index 0c0de4e..a2e77a6 100644 (file)
@@ -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 */