]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] hugetlb: remove sysctl.c intrusion
authorAndrew Morton <akpm@digeo.com>
Sun, 10 Nov 2002 10:01:55 +0000 (02:01 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Sun, 10 Nov 2002 10:01:55 +0000 (02:01 -0800)
Patch from William Lee Irwin III <wli@holomorphy.com>

This patch removes hugetlb's intrusion into kernel/sysctl.c

arch/i386/mm/hugetlbpage.c
include/linux/hugetlb.h
kernel/sysctl.c

index abe95b13f51f2bb9028b7ca35ca58998112878b7..2516365a9cf3c083387308ed7e54a6029f8f2091 100644 (file)
@@ -546,6 +546,13 @@ int set_hugetlb_mem_size(int count)
        return (int) htlbzone_pages;
 }
 
+int hugetlb_sysctl_handler(ctl_table *table, int write, struct file *file, void *buffer, size_t *length)
+{
+       proc_dointvec(table, write, file, buffer, length);
+       htlbpage_max = set_hugetlb_mem_size(htlbpage_max);
+       return 0;
+}
+
 static int __init hugetlb_setup(char *s)
 {
        if (sscanf(s, "%d", &htlbpage_max) <= 0)
index 30fa2437be15814ebd4dba47e89bd26bf2a091b5..d113d54d8db250f6a50d6f8b8d84ffaf74d4950a 100644 (file)
@@ -2,17 +2,24 @@
 #define _LINUX_HUGETLB_H
 
 #ifdef CONFIG_HUGETLB_PAGE
+
+struct ctl_table;
+
 static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
 {
        return vma->vm_flags & VM_HUGETLB;
 }
 
+int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void *, size_t *);
 int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *);
 int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int);
 void zap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long);
 void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long);
 int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
 void huge_page_release(struct page *);
+
+extern int htlbpage_max;
+
 #else /* !CONFIG_HUGETLB_PAGE */
 static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
 {
index 0317dd749b2be7af6be37cd5fc9a0ebcbff81e27..c6eeba75837107bc6f6d25cf9ccd979e7014a347 100644 (file)
@@ -31,7 +31,7 @@
 #include <linux/sysrq.h>
 #include <linux/highuid.h>
 #include <linux/writeback.h>
-
+#include <linux/hugetlb.h>
 #include <asm/uaccess.h>
 
 #ifdef CONFIG_ROOT_NFS
@@ -99,11 +99,6 @@ int proc_dol2crvec(ctl_table *table, int write, struct file *filp,
 extern int acct_parm[];
 #endif
 
-#ifdef CONFIG_HUGETLB_PAGE
-extern int htlbpage_max;
-extern int set_hugetlb_mem_size(int);
-#endif
-
 static int parse_table(int *, int, void *, size_t *, void *, size_t,
                       ctl_table *, void **);
 static int proc_doutsstring(ctl_table *table, int write, struct file *filp,
@@ -315,8 +310,7 @@ static ctl_table vm_table[] = {
         0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &zero,
         &one_hundred },
 #ifdef CONFIG_HUGETLB_PAGE
-        {VM_HUGETLB_PAGES, "nr_hugepages", &htlbpage_max, sizeof(int), 0644, NULL, 
-         &proc_dointvec},
+        {VM_HUGETLB_PAGES, "nr_hugepages", &htlbpage_max, sizeof(int), 0644, NULL, &hugetlb_sysctl_handler},
 #endif
        {0}
 };
@@ -907,10 +901,6 @@ static int do_proc_dointvec(ctl_table *table, int write, struct file *filp,
                                val = -val;
                        buffer += len;
                        left -= len;
-#ifdef CONFIG_HUGETLB_PAGE
-                       if (i == &htlbpage_max)
-                               val = set_hugetlb_mem_size(val);
-#endif
                        switch(op) {
                        case OP_SET:    *i = val; break;
                        case OP_AND:    *i &= val; break;