add a char device /dev/hugetlb that behaves similar to /dev/zero, built on top of internal hugetlbfs mount.
Signed-off-by: Ken Chen <[EMAIL PROTECTED]> diff -u b/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c --- b/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -795,6 +795,23 @@ return ERR_PTR(error); } +int hugetlb_zero_setup(struct file *file, struct vm_area_struct *vma) +{ + file = hugetlb_file_setup(vma->vm_end - vma->vm_start, 0); + if (IS_ERR(file)) + return PTR_ERR(file); + + if (vma->vm_file) + fput(vma->vm_file); + vma->vm_file = file; + return hugetlbfs_file_mmap(file, vma); +} + +const struct file_operations hugetlb_dev_fops = { + .mmap = hugetlb_zero_setup, + .get_unmapped_area = hugetlb_get_unmapped_area, +}; + static int __init init_hugetlbfs_fs(void) { int error; diff -u b/include/linux/hugetlb.h b/include/linux/hugetlb.h --- b/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -162,6 +162,7 @@ } extern const struct file_operations hugetlbfs_file_operations; +extern const struct file_operations hugetlb_dev_fops; extern struct vm_operations_struct hugetlb_vm_ops; struct file *hugetlb_file_setup(size_t, int); int hugetlb_get_quota(struct address_space *mapping); --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -27,6 +27,7 @@ #include <linux/backing-dev.h> #include <linux/bootmem.h> #include <linux/pipe_fs_i.h> #include <linux/pfn.h> +#include <linux/hugetlb.h> #include <asm/uaccess.h> #include <asm/io.h> @@ -939,6 +940,12 @@ #ifdef CONFIG_CRASH_DUMP filp->f_op = &oldmem_fops; break; #endif +#ifdef CONFIG_HUGETLBFS + case 13: + printk("open hugetlb dev device\n"); + filp->f_op = &hugetlb_dev_fops; + break; +#endif default: return -ENXIO; } @@ -971,6 +978,9 @@ #endif #ifdef CONFIG_CRASH_DUMP {12,"oldmem", S_IRUSR | S_IWUSR | S_IRGRP, &oldmem_fops}, #endif +#ifdef CONFIG_HUGETLBFS + {13, "hugetlb",S_IRUGO | S_IWUGO, &hugetlb_dev_fops}, +#endif }; static struct class *mem_class; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/