diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-02-13 01:43:25 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-02-13 01:43:25 -0500 |
commit | d9bc125caf592b7d081021f32ce5b717efdf70c8 (patch) | |
tree | 263b7066ba22ddce21db610c0300f6eaac6f2064 /arch/mips/kernel/rtlx.c | |
parent | 43d78ef2ba5bec26d0315859e8324bfc0be23766 (diff) | |
parent | ec2f9d1331f658433411c58077871e1eef4ee1b4 (diff) |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Conflicts:
net/sunrpc/auth_gss/gss_krb5_crypto.c
net/sunrpc/auth_gss/gss_spkm3_token.c
net/sunrpc/clnt.c
Merge with mainline and fix conflicts.
Diffstat (limited to 'arch/mips/kernel/rtlx.c')
-rw-r--r-- | arch/mips/kernel/rtlx.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index 5a99e3e0c96d..d92c48e0d7a6 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
@@ -17,6 +17,7 @@ | |||
17 | * | 17 | * |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <linux/device.h> | ||
20 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
21 | #include <linux/module.h> | 22 | #include <linux/module.h> |
22 | #include <linux/fs.h> | 23 | #include <linux/fs.h> |
@@ -34,6 +35,7 @@ | |||
34 | #include <linux/sched.h> | 35 | #include <linux/sched.h> |
35 | #include <linux/wait.h> | 36 | #include <linux/wait.h> |
36 | #include <asm/mipsmtregs.h> | 37 | #include <asm/mipsmtregs.h> |
38 | #include <asm/mips_mt.h> | ||
37 | #include <asm/cacheflush.h> | 39 | #include <asm/cacheflush.h> |
38 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
39 | #include <asm/cpu.h> | 41 | #include <asm/cpu.h> |
@@ -63,7 +65,7 @@ extern void *vpe_get_shared(int index); | |||
63 | 65 | ||
64 | static void rtlx_dispatch(void) | 66 | static void rtlx_dispatch(void) |
65 | { | 67 | { |
66 | do_IRQ(MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ); | 68 | do_IRQ(MIPS_CPU_IRQ_BASE + MIPS_CPU_RTLX_IRQ); |
67 | } | 69 | } |
68 | 70 | ||
69 | 71 | ||
@@ -476,7 +478,7 @@ static ssize_t file_write(struct file *file, const char __user * buffer, | |||
476 | return rtlx_write(minor, (void *)buffer, count, 1); | 478 | return rtlx_write(minor, (void *)buffer, count, 1); |
477 | } | 479 | } |
478 | 480 | ||
479 | static struct file_operations rtlx_fops = { | 481 | static const struct file_operations rtlx_fops = { |
480 | .owner = THIS_MODULE, | 482 | .owner = THIS_MODULE, |
481 | .open = file_open, | 483 | .open = file_open, |
482 | .release = file_release, | 484 | .release = file_release, |
@@ -491,14 +493,15 @@ static struct irqaction rtlx_irq = { | |||
491 | .name = "RTLX", | 493 | .name = "RTLX", |
492 | }; | 494 | }; |
493 | 495 | ||
494 | static int rtlx_irq_num = MIPSCPU_INT_BASE + MIPS_CPU_RTLX_IRQ; | 496 | static int rtlx_irq_num = MIPS_CPU_IRQ_BASE + MIPS_CPU_RTLX_IRQ; |
495 | 497 | ||
496 | static char register_chrdev_failed[] __initdata = | 498 | static char register_chrdev_failed[] __initdata = |
497 | KERN_ERR "rtlx_module_init: unable to register device\n"; | 499 | KERN_ERR "rtlx_module_init: unable to register device\n"; |
498 | 500 | ||
499 | static int rtlx_module_init(void) | 501 | static int rtlx_module_init(void) |
500 | { | 502 | { |
501 | int i; | 503 | struct device *dev; |
504 | int i, err; | ||
502 | 505 | ||
503 | major = register_chrdev(0, module_name, &rtlx_fops); | 506 | major = register_chrdev(0, module_name, &rtlx_fops); |
504 | if (major < 0) { | 507 | if (major < 0) { |
@@ -511,6 +514,13 @@ static int rtlx_module_init(void) | |||
511 | init_waitqueue_head(&channel_wqs[i].rt_queue); | 514 | init_waitqueue_head(&channel_wqs[i].rt_queue); |
512 | init_waitqueue_head(&channel_wqs[i].lx_queue); | 515 | init_waitqueue_head(&channel_wqs[i].lx_queue); |
513 | channel_wqs[i].in_open = 0; | 516 | channel_wqs[i].in_open = 0; |
517 | |||
518 | dev = device_create(mt_class, NULL, MKDEV(major, i), | ||
519 | "%s%d", module_name, i); | ||
520 | if (IS_ERR(dev)) { | ||
521 | err = PTR_ERR(dev); | ||
522 | goto out_chrdev; | ||
523 | } | ||
514 | } | 524 | } |
515 | 525 | ||
516 | /* set up notifiers */ | 526 | /* set up notifiers */ |
@@ -525,10 +535,21 @@ static int rtlx_module_init(void) | |||
525 | setup_irq(rtlx_irq_num, &rtlx_irq); | 535 | setup_irq(rtlx_irq_num, &rtlx_irq); |
526 | 536 | ||
527 | return 0; | 537 | return 0; |
538 | |||
539 | out_chrdev: | ||
540 | for (i = 0; i < RTLX_CHANNELS; i++) | ||
541 | device_destroy(mt_class, MKDEV(major, i)); | ||
542 | |||
543 | return err; | ||
528 | } | 544 | } |
529 | 545 | ||
530 | static void __exit rtlx_module_exit(void) | 546 | static void __exit rtlx_module_exit(void) |
531 | { | 547 | { |
548 | int i; | ||
549 | |||
550 | for (i = 0; i < RTLX_CHANNELS; i++) | ||
551 | device_destroy(mt_class, MKDEV(major, i)); | ||
552 | |||
532 | unregister_chrdev(major, module_name); | 553 | unregister_chrdev(major, module_name); |
533 | } | 554 | } |
534 | 555 | ||