diff -ur linux-2.4.17.orig/arch/i386/kernel/cpuid.c linux-2.4.17/arch/i386/kernel/cpuid.c --- linux-2.4.17.orig/arch/i386/kernel/cpuid.c Sat Jan 5 19:20:08 2002 +++ linux-2.4.17/arch/i386/kernel/cpuid.c Sun Jan 6 20:29:07 2002 @@ -23,6 +23,11 @@ * * This driver uses /dev/cpu/%d/cpuid where %d is the minor number, and on * an SMP box will direct the access to CPU %d. + * + * ChangeLog + * + * 2002-01-06 Matt Dainty + * Added support for devfs */ #include @@ -35,12 +40,16 @@ #include #include #include +#include +#include #include #include #include #include +static devfs_handle_t devfs_handle[NR_CPUS]; + #ifdef CONFIG_SMP struct cpuid_command { @@ -140,24 +149,40 @@ open: cpuid_open, }; -int __init cpuid_init(void) +static int __init cpuid_init(void) { - if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) { + int i; + char name[16]; + + if (devfs_register_chrdev(CPUID_MAJOR, "cpu/%d/cpuid", &cpuid_fops)) { printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n", CPUID_MAJOR); return -EBUSY; } + for(i = 0; i < smp_num_cpus; i++) { + sprintf(name, "cpu/%d/cpuid", i); + if ((devfs_handle[i] = devfs_register(NULL, name, DEVFS_FL_DEFAULT, + CPUID_MAJOR, i, + S_IFCHR | S_IRUSR | S_IRGRP, + &cpuid_fops, NULL)) == NULL) { + printk(KERN_ERR "cpuid: failed to devfs_register()\n"); + } + } return 0; } -void __exit cpuid_exit(void) +static void __exit cpuid_exit(void) { - unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); + int i; + + for(i = 0; i < smp_num_cpus; i++) + devfs_unregister(devfs_handle[i]); + devfs_unregister_chrdev(CPUID_MAJOR, "cpu/%d/cpuid"); } module_init(cpuid_init); -module_exit(cpuid_exit) +module_exit(cpuid_exit); EXPORT_NO_SYMBOLS; diff -ur linux-2.4.17.orig/arch/i386/kernel/msr.c linux-2.4.17/arch/i386/kernel/msr.c --- linux-2.4.17.orig/arch/i386/kernel/msr.c Sat Jan 5 19:20:08 2002 +++ linux-2.4.17/arch/i386/kernel/msr.c Sun Jan 6 20:29:19 2002 @@ -22,6 +22,11 @@ * * This driver uses /dev/cpu/%d/msr where %d is the minor number, and on * an SMP box will direct the access to CPU %d. + * + * ChangeLog + * + * 2002-01-06 Matt Dainty + * Added support for devfs */ #include @@ -34,12 +39,16 @@ #include #include #include +#include +#include #include #include #include #include +static devfs_handle_t devfs_handle[NR_CPUS]; + /* Note: "err" is handled in a funny way below. Otherwise one version of gcc or another breaks. */ @@ -248,24 +257,40 @@ open: msr_open, }; -int __init msr_init(void) +static int __init msr_init(void) { - if (register_chrdev(MSR_MAJOR, "cpu/msr", &msr_fops)) { + int i; + char name[16]; + + if (devfs_register_chrdev(MSR_MAJOR, "cpu/%d/msr", &msr_fops)) { printk(KERN_ERR "msr: unable to get major %d for msr\n", MSR_MAJOR); return -EBUSY; } + for(i = 0; i < smp_num_cpus; i++) { + sprintf(name, "cpu/%d/msr", i); + if ((devfs_handle[i] = devfs_register(NULL, name, DEVFS_FL_DEFAULT, + MSR_MAJOR, i, + S_IFCHR | S_IRUSR | S_IRGRP | S_IWUSR, + &msr_fops, NULL)) == NULL) { + printk(KERN_ERR "msr: failed to devfs_register()\n"); + } + } return 0; } -void __exit msr_exit(void) +static void __exit msr_exit(void) { - unregister_chrdev(MSR_MAJOR, "cpu/msr"); + int i; + + for(i = 0; i < smp_num_cpus; i++) + devfs_unregister(devfs_handle[i]); + devfs_unregister_chrdev(MSR_MAJOR, "cpu/%d/msr"); } module_init(msr_init); -module_exit(msr_exit) +module_exit(msr_exit); EXPORT_NO_SYMBOLS;