]> err.no Git - util-linux/commitdiff
Clean up pagesize/PAGE_SIZE usage.
authorKarel Zak <kzak@redhat.com>
Tue, 6 Feb 2007 10:35:15 +0000 (11:35 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 6 Feb 2007 10:35:15 +0000 (11:35 +0100)
Now all code in util-linux uses sysconf(_SC_PAGESIZE) that is standardized and
preferred way of querying page size. The asm/page.h file is not included to the
code anymore. (This patch doesn't change mount's FS detection code which will
be removed later).

Signed-off-by: Karel Zak <kzak@redhat.com>
config.h.in
configure.ac
disk-utils/mkswap.c
sys-utils/ipcs.c
tests/helpers/mnt_test_sysinfo.c

index 3659702abbff4aa4e7a11a30ef5b85767c6d1c17..b486f264abc6a15104245e739fb5ea93a9687f13 100644 (file)
@@ -4,9 +4,6 @@
    language is requested. */
 #undef ENABLE_NLS
 
-/* Define to 1 if you have the <asm/page.h> header file. */
-#undef HAVE_ASM_PAGE_H
-
 /* Define if the GNU dcgettext() function is already present or preinstalled.
    */
 #undef HAVE_DCGETTEXT
index 20349cd2fb3d05471d12a01b362d0a5c57076a88..dd7da82cdc24e96abb03be4f14ef453ef4e93aa3 100644 (file)
@@ -26,7 +26,6 @@ AC_CHECK_HEADERS(linux/blkpg.h,,,[
 ])
 AC_CHECK_HEADERS(langinfo.h)
 AC_CHECK_HEADERS(sys/user.h)
-AC_CHECK_HEADERS(asm/page.h)
 AC_CHECK_HEADERS(rpcsvc/nfs_prot.h)
 AC_CHECK_HEADERS(sys/io.h)
 AC_CHECK_HEADERS(pty.h)
index 861290fedbb4d14311b730937667ba10b8f90662..cbf898c1339380b038ef6ee04e814ab7c1b8abf2 100644 (file)
 #include <uuid/uuid.h>
 #endif
 
-/* Try to get PAGE_SIZE from libc or kernel includes */
-#ifdef HAVE_SYS_USER_H
-                               /* Note: <sys/user.h> says: for gdb only */
-#include <sys/user.h>          /* for PAGE_SIZE and PAGE_SHIFT */
-#else
-#ifdef HAVE_ASM_PAGE_H
-#include <asm/page.h>          /* for PAGE_SIZE and PAGE_SHIFT */
-                               /* we also get PAGE_SIZE via getpagesize() */
-#endif
-#endif
-
 #ifndef _IO
 /* pre-1.3.45 */
 #define BLKGETSIZE 0x1260
@@ -142,22 +131,25 @@ is_sparc64(void) {
 #endif
 
 /*
- * The definition of the union swap_header uses the constant PAGE_SIZE.
- * Unfortunately, on some architectures this depends on the hardware model,
- * and can only be found at run time -- we use getpagesize(), so that
- * we do not need separate binaries e.g. for sun4, sun4c/d/m and sun4u.
+ * The definition of the union swap_header uses the kernel constant PAGE_SIZE.
+ * Unfortunately, on some architectures this depends on the hardware model, and
+ * can only be found at run time -- we use getpagesize(), so that we do not
+ * need separate binaries e.g. for sun4, sun4c/d/m and sun4u.
+ *
+ * Even more unfortunately, getpagesize() does not always return the right
+ * information. For example, libc4, libc5 and glibc 2.0 do not use the system
+ * call but invent a value themselves (EXEC_PAGESIZE or NBPG * CLSIZE or NBPC),
+ * and thus it may happen that e.g. on a sparc kernel PAGE_SIZE=4096 and
+ * getpagesize() returns 8192.
  *
- * Even more unfortunately, getpagesize() does not always return
- * the right information. For example, libc4 and libc5 do not use
- * the system call but invent a value themselves
- * (EXEC_PAGESIZE or NBPG * CLSIZE or NBPC), and thus it may happen
- * that e.g. on a sparc PAGE_SIZE=4096 and getpagesize() returns 8192.
  * What to do? Let us allow the user to specify the pagesize explicitly.
+ *
+ * Update 05-Feb-2007 (kzak):
+ *      - use sysconf(_SC_PAGESIZE) to be consistent with the rest of 
+ *        util-linux code.  It is the standardized and preferred way of 
+ *        querying page size.  
  */
-
-static int user_pagesize = 0;
-static int kernel_pagesize;       /* obtained via getpagesize(); */
-static int defined_pagesize = 0;   /* PAGE_SIZE, when that exists */
+static int user_pagesize;
 static int pagesize;
 static long *signature_page;
 struct swap_header_v1 *p;
@@ -165,11 +157,7 @@ struct swap_header_v1 *p;
 static void
 init_signature_page(void) {
 
-#ifdef PAGE_SIZE
-       defined_pagesize = PAGE_SIZE;
-#endif
-       kernel_pagesize = getpagesize();
-       pagesize = kernel_pagesize;
+       int kernel_pagesize = pagesize = (int) sysconf(_SC_PAGESIZE);
 
        if (user_pagesize) {
                if ((user_pagesize & (user_pagesize-1)) ||
@@ -181,14 +169,10 @@ init_signature_page(void) {
                pagesize = user_pagesize;
        }
 
-       if (user_pagesize && user_pagesize != kernel_pagesize &&
-           user_pagesize != defined_pagesize)
+       if (user_pagesize && user_pagesize != kernel_pagesize)
                fprintf(stderr, _("Using user-specified page size %d, "
-                                 "instead of the system values %d/%d\n"),
-                       pagesize, kernel_pagesize, defined_pagesize);
-       else if (defined_pagesize && pagesize != defined_pagesize)
-               fprintf(stderr, _("Assuming pages of size %d (not %d)\n"),
-                       pagesize, defined_pagesize);
+                                 "instead of the system value %d\n"),
+                               pagesize, kernel_pagesize);
 
        signature_page = (long *) malloc(pagesize);
        memset(signature_page, 0, pagesize);
index 4c2ec9a0242751b652c4f142a4a785414e62530f..0c2316ba1c1063d07b41e164e6cc4ff26f99f39f 100644 (file)
@@ -25,6 +25,7 @@
 #include <time.h>
 #include <pwd.h>
 #include <grp.h>
+#include <unistd.h>
 #include "nls.h"
 
 /* X/OPEN tells us to use <sys/{types,ipc,sem}.h> for semctl() */
@@ -280,7 +281,7 @@ void do_shm (char format)
                printf (_("max seg size (kbytes) = %lu\n"),
                        (unsigned long) (shminfo.shmmax >> 10));
                printf (_("max total shared memory (kbytes) = %llu\n"),
-                       getpagesize()/1024 * (unsigned long long) shminfo.shmall);
+                       sysconf(_SC_PAGESIZE) / 1024 * (unsigned long long) shminfo.shmall);
                printf (_("min seg size (bytes) = %lu\n"),
                        (unsigned long) shminfo.shmmin);
                return;
index 90cf02337922e94877024da3f2703d8ea9a5d490..9bbcefa380f561ed7d6c0e1c5139511ba6629403 100644 (file)
@@ -20,7 +20,7 @@ hlp_wordsize(void)
 int
 hlp_pagesize(void)
 {
-       printf("%d\n", getpagesize());
+       printf("%d\n", (int) sysconf(_SC_PAGESIZE));
        return 0;
 }