[PATCH][2.6.0-test3] i386 msr.c devfs support 1/2
From: Andrey Borzenkov
Date:  Sun Aug 10 2003 - 04:21:40 EST
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");
 }