Messages in this thread Patch in this message | | | From | Andrey Borzenkov <> | Subject | [PATCH][2.6.0-test3] i386 msr.c devfs support 1/2 | Date | Sun, 10 Aug 2003 12:51:03 +0400 |
| |
Please let me know if default permissions (644) are not appropriate. Tested on 2-way SMP kernel single CPU system; it correctly rejects access to no-existing CPU.
/dev/cpu/N is not removed on module unload. It is impossible to cleanly unregister directories shared by independent drivers given current devfs implementation (no actual refcounting)
-andrey--- linux-2.6.0-test3-smp/arch/i386/kernel/msr.c.devfs 2003-06-26 21:39:26.000000000 +0400 +++ linux-2.6.0-test3-smp/arch/i386/kernel/msr.c 2003-08-09 22:29:56.000000000 +0400 @@ -37,6 +37,8 @@ #include <linux/major.h> #include <linux/fs.h> +#include <linux/devfs_fs_kernel.h> + #include <asm/processor.h> #include <asm/msr.h> #include <asm/uaccess.h> @@ -263,17 +265,28 @@ static struct file_operations msr_fops = int __init msr_init(void) { + int i; + if (register_chrdev(MSR_MAJOR, "cpu/msr", &msr_fops)) { printk(KERN_ERR "msr: unable to get major %d for msr\n", MSR_MAJOR); return -EBUSY; } + + for (i = 0; i < NR_CPUS; i++) + devfs_mk_cdev(MKDEV(MSR_MAJOR, i), S_IFCHR | S_IRUGO | S_IWUSR, + "cpu/%d/msr", i); return 0; } void __exit msr_exit(void) { + int i; + + for (i = 0; i < NR_CPUS; i++) + devfs_remove("cpu/%d/msr", i); + unregister_chrdev(MSR_MAJOR, "cpu/msr"); } | |