diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/sh/kernel/cpu/irq/ipr.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'arch/sh/kernel/cpu/irq/ipr.c')
-rw-r--r-- | arch/sh/kernel/cpu/irq/ipr.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c index 9282d965a1b6..5de6dff5c21b 100644 --- a/arch/sh/kernel/cpu/irq/ipr.c +++ b/arch/sh/kernel/cpu/irq/ipr.c | |||
@@ -24,25 +24,25 @@ | |||
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | #include <linux/topology.h> | 25 | #include <linux/topology.h> |
26 | 26 | ||
27 | static inline struct ipr_desc *get_ipr_desc(unsigned int irq) | 27 | static inline struct ipr_desc *get_ipr_desc(struct irq_data *data) |
28 | { | 28 | { |
29 | struct irq_chip *chip = get_irq_chip(irq); | 29 | struct irq_chip *chip = irq_data_get_irq_chip(data); |
30 | return container_of(chip, struct ipr_desc, chip); | 30 | return container_of(chip, struct ipr_desc, chip); |
31 | } | 31 | } |
32 | 32 | ||
33 | static void disable_ipr_irq(unsigned int irq) | 33 | static void disable_ipr_irq(struct irq_data *data) |
34 | { | 34 | { |
35 | struct ipr_data *p = get_irq_chip_data(irq); | 35 | struct ipr_data *p = irq_data_get_irq_chip_data(data); |
36 | unsigned long addr = get_ipr_desc(irq)->ipr_offsets[p->ipr_idx]; | 36 | unsigned long addr = get_ipr_desc(data)->ipr_offsets[p->ipr_idx]; |
37 | /* Set the priority in IPR to 0 */ | 37 | /* Set the priority in IPR to 0 */ |
38 | __raw_writew(__raw_readw(addr) & (0xffff ^ (0xf << p->shift)), addr); | 38 | __raw_writew(__raw_readw(addr) & (0xffff ^ (0xf << p->shift)), addr); |
39 | (void)__raw_readw(addr); /* Read back to flush write posting */ | 39 | (void)__raw_readw(addr); /* Read back to flush write posting */ |
40 | } | 40 | } |
41 | 41 | ||
42 | static void enable_ipr_irq(unsigned int irq) | 42 | static void enable_ipr_irq(struct irq_data *data) |
43 | { | 43 | { |
44 | struct ipr_data *p = get_irq_chip_data(irq); | 44 | struct ipr_data *p = irq_data_get_irq_chip_data(data); |
45 | unsigned long addr = get_ipr_desc(irq)->ipr_offsets[p->ipr_idx]; | 45 | unsigned long addr = get_ipr_desc(data)->ipr_offsets[p->ipr_idx]; |
46 | /* Set priority in IPR back to original value */ | 46 | /* Set priority in IPR back to original value */ |
47 | __raw_writew(__raw_readw(addr) | (p->priority << p->shift), addr); | 47 | __raw_writew(__raw_readw(addr) | (p->priority << p->shift), addr); |
48 | } | 48 | } |
@@ -56,29 +56,28 @@ void register_ipr_controller(struct ipr_desc *desc) | |||
56 | { | 56 | { |
57 | int i; | 57 | int i; |
58 | 58 | ||
59 | desc->chip.mask = disable_ipr_irq; | 59 | desc->chip.irq_mask = disable_ipr_irq; |
60 | desc->chip.unmask = enable_ipr_irq; | 60 | desc->chip.irq_unmask = enable_ipr_irq; |
61 | desc->chip.mask_ack = disable_ipr_irq; | ||
62 | 61 | ||
63 | for (i = 0; i < desc->nr_irqs; i++) { | 62 | for (i = 0; i < desc->nr_irqs; i++) { |
64 | struct ipr_data *p = desc->ipr_data + i; | 63 | struct ipr_data *p = desc->ipr_data + i; |
65 | struct irq_desc *irq_desc; | 64 | int res; |
66 | 65 | ||
67 | BUG_ON(p->ipr_idx >= desc->nr_offsets); | 66 | BUG_ON(p->ipr_idx >= desc->nr_offsets); |
68 | BUG_ON(!desc->ipr_offsets[p->ipr_idx]); | 67 | BUG_ON(!desc->ipr_offsets[p->ipr_idx]); |
69 | 68 | ||
70 | irq_desc = irq_to_desc_alloc_node(p->irq, numa_node_id()); | 69 | res = irq_alloc_desc_at(p->irq, numa_node_id()); |
71 | if (unlikely(!irq_desc)) { | 70 | if (unlikely(res != p->irq && res != -EEXIST)) { |
72 | printk(KERN_INFO "can not get irq_desc for %d\n", | 71 | printk(KERN_INFO "can not get irq_desc for %d\n", |
73 | p->irq); | 72 | p->irq); |
74 | continue; | 73 | continue; |
75 | } | 74 | } |
76 | 75 | ||
77 | disable_irq_nosync(p->irq); | 76 | disable_irq_nosync(p->irq); |
78 | set_irq_chip_and_handler_name(p->irq, &desc->chip, | 77 | irq_set_chip_and_handler_name(p->irq, &desc->chip, |
79 | handle_level_irq, "level"); | 78 | handle_level_irq, "level"); |
80 | set_irq_chip_data(p->irq, p); | 79 | irq_set_chip_data(p->irq, p); |
81 | disable_ipr_irq(p->irq); | 80 | disable_ipr_irq(irq_get_irq_data(p->irq)); |
82 | } | 81 | } |
83 | } | 82 | } |
84 | EXPORT_SYMBOL(register_ipr_controller); | 83 | EXPORT_SYMBOL(register_ipr_controller); |