diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2015-03-26 05:03:16 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-03-26 05:04:28 -0400 |
commit | df60f57684529a1dde4461cf84354453b440806a (patch) | |
tree | 618f030f673980a4c9d6bf27c1db50459a3b99d1 | |
parent | 605f30205348f1d808d98d77505149da8b047b9f (diff) | |
parent | b921e90260cec1e04988bb3763491de885b67b51 (diff) |
Merge branch 'next-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc into test
Merge miscellaneous bits from benh. Fix a minor conflict with
OpalMessageType changing names to opal_msg_type.
-rw-r--r-- | arch/powerpc/include/asm/cache.h | 3 | ||||
-rw-r--r-- | arch/powerpc/include/asm/opal.h | 2 | ||||
-rw-r--r-- | arch/powerpc/lib/copy_32.S | 127 | ||||
-rw-r--r-- | arch/powerpc/lib/locks.c | 1 | ||||
-rw-r--r-- | arch/powerpc/lib/ppc_ksyms.c | 4 | ||||
-rw-r--r-- | arch/powerpc/mm/ppc_mmu_32.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/bootx_init.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/pic.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/opal-flash.c | 6 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/opal.c | 49 | ||||
-rw-r--r-- | drivers/macintosh/smu.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/via-pmu.c | 25 | ||||
-rw-r--r-- | drivers/net/ethernet/ibm/emac/core.c | 12 |
13 files changed, 71 insertions, 168 deletions
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h index 34a05a1a990b..0dc42c5082b7 100644 --- a/arch/powerpc/include/asm/cache.h +++ b/arch/powerpc/include/asm/cache.h | |||
@@ -76,9 +76,6 @@ extern void _set_L3CR(unsigned long); | |||
76 | #define _set_L3CR(val) do { } while(0) | 76 | #define _set_L3CR(val) do { } while(0) |
77 | #endif | 77 | #endif |
78 | 78 | ||
79 | extern void cacheable_memzero(void *p, unsigned int nb); | ||
80 | extern void *cacheable_memcpy(void *, const void *, unsigned int); | ||
81 | |||
82 | #endif /* !__ASSEMBLY__ */ | 79 | #endif /* !__ASSEMBLY__ */ |
83 | #endif /* __KERNEL__ */ | 80 | #endif /* __KERNEL__ */ |
84 | #endif /* _ASM_POWERPC_CACHE_H */ | 81 | #endif /* _ASM_POWERPC_CACHE_H */ |
diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h index 0ef0fd660ac6..c08de77f398a 100644 --- a/arch/powerpc/include/asm/opal.h +++ b/arch/powerpc/include/asm/opal.h | |||
@@ -210,6 +210,8 @@ extern int opal_notifier_unregister(struct notifier_block *nb); | |||
210 | 210 | ||
211 | extern int opal_message_notifier_register(enum opal_msg_type msg_type, | 211 | extern int opal_message_notifier_register(enum opal_msg_type msg_type, |
212 | struct notifier_block *nb); | 212 | struct notifier_block *nb); |
213 | extern int opal_message_notifier_unregister(enum opal_msg_type msg_type, | ||
214 | struct notifier_block *nb); | ||
213 | extern void opal_notifier_enable(void); | 215 | extern void opal_notifier_enable(void); |
214 | extern void opal_notifier_disable(void); | 216 | extern void opal_notifier_disable(void); |
215 | extern void opal_notifier_update_evt(uint64_t evt_mask, uint64_t evt_val); | 217 | extern void opal_notifier_update_evt(uint64_t evt_mask, uint64_t evt_val); |
diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S index 55f19f9fd708..6813f80d1eec 100644 --- a/arch/powerpc/lib/copy_32.S +++ b/arch/powerpc/lib/copy_32.S | |||
@@ -69,54 +69,6 @@ CACHELINE_BYTES = L1_CACHE_BYTES | |||
69 | LG_CACHELINE_BYTES = L1_CACHE_SHIFT | 69 | LG_CACHELINE_BYTES = L1_CACHE_SHIFT |
70 | CACHELINE_MASK = (L1_CACHE_BYTES-1) | 70 | CACHELINE_MASK = (L1_CACHE_BYTES-1) |
71 | 71 | ||
72 | /* | ||
73 | * Use dcbz on the complete cache lines in the destination | ||
74 | * to set them to zero. This requires that the destination | ||
75 | * area is cacheable. -- paulus | ||
76 | */ | ||
77 | _GLOBAL(cacheable_memzero) | ||
78 | mr r5,r4 | ||
79 | li r4,0 | ||
80 | addi r6,r3,-4 | ||
81 | cmplwi 0,r5,4 | ||
82 | blt 7f | ||
83 | stwu r4,4(r6) | ||
84 | beqlr | ||
85 | andi. r0,r6,3 | ||
86 | add r5,r0,r5 | ||
87 | subf r6,r0,r6 | ||
88 | clrlwi r7,r6,32-LG_CACHELINE_BYTES | ||
89 | add r8,r7,r5 | ||
90 | srwi r9,r8,LG_CACHELINE_BYTES | ||
91 | addic. r9,r9,-1 /* total number of complete cachelines */ | ||
92 | ble 2f | ||
93 | xori r0,r7,CACHELINE_MASK & ~3 | ||
94 | srwi. r0,r0,2 | ||
95 | beq 3f | ||
96 | mtctr r0 | ||
97 | 4: stwu r4,4(r6) | ||
98 | bdnz 4b | ||
99 | 3: mtctr r9 | ||
100 | li r7,4 | ||
101 | 10: dcbz r7,r6 | ||
102 | addi r6,r6,CACHELINE_BYTES | ||
103 | bdnz 10b | ||
104 | clrlwi r5,r8,32-LG_CACHELINE_BYTES | ||
105 | addi r5,r5,4 | ||
106 | 2: srwi r0,r5,2 | ||
107 | mtctr r0 | ||
108 | bdz 6f | ||
109 | 1: stwu r4,4(r6) | ||
110 | bdnz 1b | ||
111 | 6: andi. r5,r5,3 | ||
112 | 7: cmpwi 0,r5,0 | ||
113 | beqlr | ||
114 | mtctr r5 | ||
115 | addi r6,r6,3 | ||
116 | 8: stbu r4,1(r6) | ||
117 | bdnz 8b | ||
118 | blr | ||
119 | |||
120 | _GLOBAL(memset) | 72 | _GLOBAL(memset) |
121 | rlwimi r4,r4,8,16,23 | 73 | rlwimi r4,r4,8,16,23 |
122 | rlwimi r4,r4,16,0,15 | 74 | rlwimi r4,r4,16,0,15 |
@@ -142,85 +94,6 @@ _GLOBAL(memset) | |||
142 | bdnz 8b | 94 | bdnz 8b |
143 | blr | 95 | blr |
144 | 96 | ||
145 | /* | ||
146 | * This version uses dcbz on the complete cache lines in the | ||
147 | * destination area to reduce memory traffic. This requires that | ||
148 | * the destination area is cacheable. | ||
149 | * We only use this version if the source and dest don't overlap. | ||
150 | * -- paulus. | ||
151 | */ | ||
152 | _GLOBAL(cacheable_memcpy) | ||
153 | add r7,r3,r5 /* test if the src & dst overlap */ | ||
154 | add r8,r4,r5 | ||
155 | cmplw 0,r4,r7 | ||
156 | cmplw 1,r3,r8 | ||
157 | crand 0,0,4 /* cr0.lt &= cr1.lt */ | ||
158 | blt memcpy /* if regions overlap */ | ||
159 | |||
160 | addi r4,r4,-4 | ||
161 | addi r6,r3,-4 | ||
162 | neg r0,r3 | ||
163 | andi. r0,r0,CACHELINE_MASK /* # bytes to start of cache line */ | ||
164 | beq 58f | ||
165 | |||
166 | cmplw 0,r5,r0 /* is this more than total to do? */ | ||
167 | blt 63f /* if not much to do */ | ||
168 | andi. r8,r0,3 /* get it word-aligned first */ | ||
169 | subf r5,r0,r5 | ||
170 | mtctr r8 | ||
171 | beq+ 61f | ||
172 | 70: lbz r9,4(r4) /* do some bytes */ | ||
173 | stb r9,4(r6) | ||
174 | addi r4,r4,1 | ||
175 | addi r6,r6,1 | ||
176 | bdnz 70b | ||
177 | 61: srwi. r0,r0,2 | ||
178 | mtctr r0 | ||
179 | beq 58f | ||
180 | 72: lwzu r9,4(r4) /* do some words */ | ||
181 | stwu r9,4(r6) | ||
182 | bdnz 72b | ||
183 | |||
184 | 58: srwi. r0,r5,LG_CACHELINE_BYTES /* # complete cachelines */ | ||
185 | clrlwi r5,r5,32-LG_CACHELINE_BYTES | ||
186 | li r11,4 | ||
187 | mtctr r0 | ||
188 | beq 63f | ||
189 | 53: | ||
190 | dcbz r11,r6 | ||
191 | COPY_16_BYTES | ||
192 | #if L1_CACHE_BYTES >= 32 | ||
193 | COPY_16_BYTES | ||
194 | #if L1_CACHE_BYTES >= 64 | ||
195 | COPY_16_BYTES | ||
196 | COPY_16_BYTES | ||
197 | #if L1_CACHE_BYTES >= 128 | ||
198 | COPY_16_BYTES | ||
199 | COPY_16_BYTES | ||
200 | COPY_16_BYTES | ||
201 | COPY_16_BYTES | ||
202 | #endif | ||
203 | #endif | ||
204 | #endif | ||
205 | bdnz 53b | ||
206 | |||
207 | 63: srwi. r0,r5,2 | ||
208 | mtctr r0 | ||
209 | beq 64f | ||
210 | 30: lwzu r0,4(r4) | ||
211 | stwu r0,4(r6) | ||
212 | bdnz 30b | ||
213 | |||
214 | 64: andi. r0,r5,3 | ||
215 | mtctr r0 | ||
216 | beq+ 65f | ||
217 | 40: lbz r0,4(r4) | ||
218 | stb r0,4(r6) | ||
219 | addi r4,r4,1 | ||
220 | addi r6,r6,1 | ||
221 | bdnz 40b | ||
222 | 65: blr | ||
223 | |||
224 | _GLOBAL(memmove) | 97 | _GLOBAL(memmove) |
225 | cmplw 0,r3,r4 | 98 | cmplw 0,r3,r4 |
226 | bgt backwards_memcpy | 99 | bgt backwards_memcpy |
diff --git a/arch/powerpc/lib/locks.c b/arch/powerpc/lib/locks.c index 170a0346f756..f7deebdf3365 100644 --- a/arch/powerpc/lib/locks.c +++ b/arch/powerpc/lib/locks.c | |||
@@ -41,6 +41,7 @@ void __spin_yield(arch_spinlock_t *lock) | |||
41 | plpar_hcall_norets(H_CONFER, | 41 | plpar_hcall_norets(H_CONFER, |
42 | get_hard_smp_processor_id(holder_cpu), yield_count); | 42 | get_hard_smp_processor_id(holder_cpu), yield_count); |
43 | } | 43 | } |
44 | EXPORT_SYMBOL_GPL(__spin_yield); | ||
44 | 45 | ||
45 | /* | 46 | /* |
46 | * Waiting for a read lock or a write lock on a rwlock... | 47 | * Waiting for a read lock or a write lock on a rwlock... |
diff --git a/arch/powerpc/lib/ppc_ksyms.c b/arch/powerpc/lib/ppc_ksyms.c index f993959647b5..c7f8e9586316 100644 --- a/arch/powerpc/lib/ppc_ksyms.c +++ b/arch/powerpc/lib/ppc_ksyms.c | |||
@@ -8,10 +8,6 @@ EXPORT_SYMBOL(memset); | |||
8 | EXPORT_SYMBOL(memmove); | 8 | EXPORT_SYMBOL(memmove); |
9 | EXPORT_SYMBOL(memcmp); | 9 | EXPORT_SYMBOL(memcmp); |
10 | EXPORT_SYMBOL(memchr); | 10 | EXPORT_SYMBOL(memchr); |
11 | #ifdef CONFIG_PPC32 | ||
12 | EXPORT_SYMBOL(cacheable_memcpy); | ||
13 | EXPORT_SYMBOL(cacheable_memzero); | ||
14 | #endif | ||
15 | 11 | ||
16 | EXPORT_SYMBOL(strcpy); | 12 | EXPORT_SYMBOL(strcpy); |
17 | EXPORT_SYMBOL(strncpy); | 13 | EXPORT_SYMBOL(strncpy); |
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c index 5029dc19b517..eb0e489b1bb7 100644 --- a/arch/powerpc/mm/ppc_mmu_32.c +++ b/arch/powerpc/mm/ppc_mmu_32.c | |||
@@ -224,7 +224,7 @@ void __init MMU_init_hw(void) | |||
224 | */ | 224 | */ |
225 | if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322); | 225 | if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322); |
226 | Hash = __va(memblock_alloc(Hash_size, Hash_size)); | 226 | Hash = __va(memblock_alloc(Hash_size, Hash_size)); |
227 | cacheable_memzero(Hash, Hash_size); | 227 | memset(Hash, 0, Hash_size); |
228 | _SDR1 = __pa(Hash) | SDR1_LOW_BITS; | 228 | _SDR1 = __pa(Hash) | SDR1_LOW_BITS; |
229 | 229 | ||
230 | Hash_end = (struct hash_pte *) ((unsigned long)Hash + Hash_size); | 230 | Hash_end = (struct hash_pte *) ((unsigned long)Hash + Hash_size); |
diff --git a/arch/powerpc/platforms/powermac/bootx_init.c b/arch/powerpc/platforms/powermac/bootx_init.c index 3e91ef538114..76f5013c35e5 100644 --- a/arch/powerpc/platforms/powermac/bootx_init.c +++ b/arch/powerpc/platforms/powermac/bootx_init.c | |||
@@ -246,7 +246,7 @@ static void __init bootx_scan_dt_build_strings(unsigned long base, | |||
246 | DBG(" detected display ! adding properties names !\n"); | 246 | DBG(" detected display ! adding properties names !\n"); |
247 | bootx_dt_add_string("linux,boot-display", mem_end); | 247 | bootx_dt_add_string("linux,boot-display", mem_end); |
248 | bootx_dt_add_string("linux,opened", mem_end); | 248 | bootx_dt_add_string("linux,opened", mem_end); |
249 | strncpy(bootx_disp_path, namep, 255); | 249 | strlcpy(bootx_disp_path, namep, sizeof(bootx_disp_path)); |
250 | } | 250 | } |
251 | 251 | ||
252 | /* get and store all property names */ | 252 | /* get and store all property names */ |
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index 4c24bf60d39d..59cfc9d63c2d 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -321,6 +321,9 @@ static void __init pmac_pic_probe_oldstyle(void) | |||
321 | max_irqs = max_real_irqs = 64; | 321 | max_irqs = max_real_irqs = 64; |
322 | 322 | ||
323 | /* We might have a second cascaded heathrow */ | 323 | /* We might have a second cascaded heathrow */ |
324 | |||
325 | /* Compensate for of_node_put() in of_find_node_by_name() */ | ||
326 | of_node_get(master); | ||
324 | slave = of_find_node_by_name(master, "mac-io"); | 327 | slave = of_find_node_by_name(master, "mac-io"); |
325 | 328 | ||
326 | /* Check ordering of master & slave */ | 329 | /* Check ordering of master & slave */ |
diff --git a/arch/powerpc/platforms/powernv/opal-flash.c b/arch/powerpc/platforms/powernv/opal-flash.c index 5c21d9c07f45..0ff07ff891f0 100644 --- a/arch/powerpc/platforms/powernv/opal-flash.c +++ b/arch/powerpc/platforms/powernv/opal-flash.c | |||
@@ -120,7 +120,11 @@ static struct image_header_t image_header; | |||
120 | static struct image_data_t image_data; | 120 | static struct image_data_t image_data; |
121 | static struct validate_flash_t validate_flash_data; | 121 | static struct validate_flash_t validate_flash_data; |
122 | static struct manage_flash_t manage_flash_data; | 122 | static struct manage_flash_t manage_flash_data; |
123 | static struct update_flash_t update_flash_data; | 123 | |
124 | /* Initialize update_flash_data status to No Operation */ | ||
125 | static struct update_flash_t update_flash_data = { | ||
126 | .status = FLASH_NO_OP, | ||
127 | }; | ||
124 | 128 | ||
125 | static DEFINE_MUTEX(image_data_mutex); | 129 | static DEFINE_MUTEX(image_data_mutex); |
126 | 130 | ||
diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c index 142a08a61bd1..d403b2b08626 100644 --- a/arch/powerpc/platforms/powernv/opal.c +++ b/arch/powerpc/platforms/powernv/opal.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <linux/kobject.h> | 23 | #include <linux/kobject.h> |
24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
25 | #include <linux/memblock.h> | 25 | #include <linux/memblock.h> |
26 | #include <linux/kthread.h> | ||
27 | #include <linux/freezer.h> | ||
26 | 28 | ||
27 | #include <asm/machdep.h> | 29 | #include <asm/machdep.h> |
28 | #include <asm/opal.h> | 30 | #include <asm/opal.h> |
@@ -58,6 +60,7 @@ static struct atomic_notifier_head opal_msg_notifier_head[OPAL_MSG_TYPE_MAX]; | |||
58 | static DEFINE_SPINLOCK(opal_notifier_lock); | 60 | static DEFINE_SPINLOCK(opal_notifier_lock); |
59 | static uint64_t last_notified_mask = 0x0ul; | 61 | static uint64_t last_notified_mask = 0x0ul; |
60 | static atomic_t opal_notifier_hold = ATOMIC_INIT(0); | 62 | static atomic_t opal_notifier_hold = ATOMIC_INIT(0); |
63 | static uint32_t opal_heartbeat; | ||
61 | 64 | ||
62 | static void opal_reinit_cores(void) | 65 | static void opal_reinit_cores(void) |
63 | { | 66 | { |
@@ -305,20 +308,23 @@ void opal_notifier_disable(void) | |||
305 | int opal_message_notifier_register(enum opal_msg_type msg_type, | 308 | int opal_message_notifier_register(enum opal_msg_type msg_type, |
306 | struct notifier_block *nb) | 309 | struct notifier_block *nb) |
307 | { | 310 | { |
308 | if (!nb) { | 311 | if (!nb || msg_type >= OPAL_MSG_TYPE_MAX) { |
309 | pr_warning("%s: Invalid argument (%p)\n", | 312 | pr_warning("%s: Invalid arguments, msg_type:%d\n", |
310 | __func__, nb); | ||
311 | return -EINVAL; | ||
312 | } | ||
313 | if (msg_type > OPAL_MSG_TYPE_MAX) { | ||
314 | pr_warning("%s: Invalid message type argument (%d)\n", | ||
315 | __func__, msg_type); | 313 | __func__, msg_type); |
316 | return -EINVAL; | 314 | return -EINVAL; |
317 | } | 315 | } |
316 | |||
318 | return atomic_notifier_chain_register( | 317 | return atomic_notifier_chain_register( |
319 | &opal_msg_notifier_head[msg_type], nb); | 318 | &opal_msg_notifier_head[msg_type], nb); |
320 | } | 319 | } |
321 | 320 | ||
321 | int opal_message_notifier_unregister(enum opal_msg_type msg_type, | ||
322 | struct notifier_block *nb) | ||
323 | { | ||
324 | return atomic_notifier_chain_unregister( | ||
325 | &opal_msg_notifier_head[msg_type], nb); | ||
326 | } | ||
327 | |||
322 | static void opal_message_do_notify(uint32_t msg_type, void *msg) | 328 | static void opal_message_do_notify(uint32_t msg_type, void *msg) |
323 | { | 329 | { |
324 | /* notify subscribers */ | 330 | /* notify subscribers */ |
@@ -351,7 +357,7 @@ static void opal_handle_message(void) | |||
351 | type = be32_to_cpu(msg.msg_type); | 357 | type = be32_to_cpu(msg.msg_type); |
352 | 358 | ||
353 | /* Sanity check */ | 359 | /* Sanity check */ |
354 | if (type > OPAL_MSG_TYPE_MAX) { | 360 | if (type >= OPAL_MSG_TYPE_MAX) { |
355 | pr_warning("%s: Unknown message type: %u\n", __func__, type); | 361 | pr_warning("%s: Unknown message type: %u\n", __func__, type); |
356 | return; | 362 | return; |
357 | } | 363 | } |
@@ -744,6 +750,29 @@ static void __init opal_irq_init(struct device_node *dn) | |||
744 | } | 750 | } |
745 | } | 751 | } |
746 | 752 | ||
753 | static int kopald(void *unused) | ||
754 | { | ||
755 | set_freezable(); | ||
756 | do { | ||
757 | try_to_freeze(); | ||
758 | opal_poll_events(NULL); | ||
759 | msleep_interruptible(opal_heartbeat); | ||
760 | } while (!kthread_should_stop()); | ||
761 | |||
762 | return 0; | ||
763 | } | ||
764 | |||
765 | static void opal_init_heartbeat(void) | ||
766 | { | ||
767 | /* Old firwmware, we assume the HVC heartbeat is sufficient */ | ||
768 | if (of_property_read_u32(opal_node, "ibm,heartbeat-ms", | ||
769 | &opal_heartbeat) != 0) | ||
770 | opal_heartbeat = 0; | ||
771 | |||
772 | if (opal_heartbeat) | ||
773 | kthread_run(kopald, NULL, "kopald"); | ||
774 | } | ||
775 | |||
747 | static int __init opal_init(void) | 776 | static int __init opal_init(void) |
748 | { | 777 | { |
749 | struct device_node *np, *consoles; | 778 | struct device_node *np, *consoles; |
@@ -772,6 +801,9 @@ static int __init opal_init(void) | |||
772 | /* Create i2c platform devices */ | 801 | /* Create i2c platform devices */ |
773 | opal_i2c_create_devs(); | 802 | opal_i2c_create_devs(); |
774 | 803 | ||
804 | /* Setup a heatbeat thread if requested by OPAL */ | ||
805 | opal_init_heartbeat(); | ||
806 | |||
775 | /* Find all OPAL interrupts and request them */ | 807 | /* Find all OPAL interrupts and request them */ |
776 | opal_irq_init(opal_node); | 808 | opal_irq_init(opal_node); |
777 | 809 | ||
@@ -794,6 +826,7 @@ static int __init opal_init(void) | |||
794 | opal_msglog_init(); | 826 | opal_msglog_init(); |
795 | } | 827 | } |
796 | 828 | ||
829 | /* Initialize OPAL IPMI backend */ | ||
797 | opal_ipmi_init(opal_node); | 830 | opal_ipmi_init(opal_node); |
798 | 831 | ||
799 | return 0; | 832 | return 0; |
diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c index 10ae69bcbbd2..d531f804455d 100644 --- a/drivers/macintosh/smu.c +++ b/drivers/macintosh/smu.c | |||
@@ -557,8 +557,7 @@ int __init smu_init (void) | |||
557 | return 0; | 557 | return 0; |
558 | 558 | ||
559 | fail_msg_node: | 559 | fail_msg_node: |
560 | if (smu->msg_node) | 560 | of_node_put(smu->msg_node); |
561 | of_node_put(smu->msg_node); | ||
562 | fail_db_node: | 561 | fail_db_node: |
563 | of_node_put(smu->db_node); | 562 | of_node_put(smu->db_node); |
564 | fail_bootmem: | 563 | fail_bootmem: |
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index dee88e59f0d3..f9512bfa6c3c 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -329,10 +329,11 @@ int __init find_via_pmu(void) | |||
329 | gaddr = of_translate_address(gpiop, reg); | 329 | gaddr = of_translate_address(gpiop, reg); |
330 | if (gaddr != OF_BAD_ADDR) | 330 | if (gaddr != OF_BAD_ADDR) |
331 | gpio_reg = ioremap(gaddr, 0x10); | 331 | gpio_reg = ioremap(gaddr, 0x10); |
332 | of_node_put(gpiop); | ||
332 | } | 333 | } |
333 | if (gpio_reg == NULL) { | 334 | if (gpio_reg == NULL) { |
334 | printk(KERN_ERR "via-pmu: Can't find GPIO reg !\n"); | 335 | printk(KERN_ERR "via-pmu: Can't find GPIO reg !\n"); |
335 | goto fail_gpio; | 336 | goto fail; |
336 | } | 337 | } |
337 | } else | 338 | } else |
338 | pmu_kind = PMU_UNKNOWN; | 339 | pmu_kind = PMU_UNKNOWN; |
@@ -340,7 +341,7 @@ int __init find_via_pmu(void) | |||
340 | via = ioremap(taddr, 0x2000); | 341 | via = ioremap(taddr, 0x2000); |
341 | if (via == NULL) { | 342 | if (via == NULL) { |
342 | printk(KERN_ERR "via-pmu: Can't map address !\n"); | 343 | printk(KERN_ERR "via-pmu: Can't map address !\n"); |
343 | goto fail; | 344 | goto fail_via_remap; |
344 | } | 345 | } |
345 | 346 | ||
346 | out_8(&via[IER], IER_CLR | 0x7f); /* disable all intrs */ | 347 | out_8(&via[IER], IER_CLR | 0x7f); /* disable all intrs */ |
@@ -348,10 +349,8 @@ int __init find_via_pmu(void) | |||
348 | 349 | ||
349 | pmu_state = idle; | 350 | pmu_state = idle; |
350 | 351 | ||
351 | if (!init_pmu()) { | 352 | if (!init_pmu()) |
352 | via = NULL; | 353 | goto fail_init; |
353 | return 0; | ||
354 | } | ||
355 | 354 | ||
356 | printk(KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n", | 355 | printk(KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n", |
357 | PMU_DRIVER_VERSION, pbook_type[pmu_kind], pmu_version); | 356 | PMU_DRIVER_VERSION, pbook_type[pmu_kind], pmu_version); |
@@ -359,11 +358,15 @@ int __init find_via_pmu(void) | |||
359 | sys_ctrler = SYS_CTRLER_PMU; | 358 | sys_ctrler = SYS_CTRLER_PMU; |
360 | 359 | ||
361 | return 1; | 360 | return 1; |
362 | fail: | 361 | |
363 | of_node_put(vias); | 362 | fail_init: |
363 | iounmap(via); | ||
364 | via = NULL; | ||
365 | fail_via_remap: | ||
364 | iounmap(gpio_reg); | 366 | iounmap(gpio_reg); |
365 | gpio_reg = NULL; | 367 | gpio_reg = NULL; |
366 | fail_gpio: | 368 | fail: |
369 | of_node_put(vias); | ||
367 | vias = NULL; | 370 | vias = NULL; |
368 | return 0; | 371 | return 0; |
369 | } | 372 | } |
@@ -2109,7 +2112,7 @@ pmu_read(struct file *file, char __user *buf, | |||
2109 | 2112 | ||
2110 | spin_lock_irqsave(&pp->lock, flags); | 2113 | spin_lock_irqsave(&pp->lock, flags); |
2111 | add_wait_queue(&pp->wait, &wait); | 2114 | add_wait_queue(&pp->wait, &wait); |
2112 | current->state = TASK_INTERRUPTIBLE; | 2115 | set_current_state(TASK_INTERRUPTIBLE); |
2113 | 2116 | ||
2114 | for (;;) { | 2117 | for (;;) { |
2115 | ret = -EAGAIN; | 2118 | ret = -EAGAIN; |
@@ -2138,7 +2141,7 @@ pmu_read(struct file *file, char __user *buf, | |||
2138 | schedule(); | 2141 | schedule(); |
2139 | spin_lock_irqsave(&pp->lock, flags); | 2142 | spin_lock_irqsave(&pp->lock, flags); |
2140 | } | 2143 | } |
2141 | current->state = TASK_RUNNING; | 2144 | __set_current_state(TASK_RUNNING); |
2142 | remove_wait_queue(&pp->wait, &wait); | 2145 | remove_wait_queue(&pp->wait, &wait); |
2143 | spin_unlock_irqrestore(&pp->lock, flags); | 2146 | spin_unlock_irqrestore(&pp->lock, flags); |
2144 | 2147 | ||
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 162762d1a12c..220bae6f5e43 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c | |||
@@ -79,13 +79,6 @@ MODULE_AUTHOR | |||
79 | ("Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>"); | 79 | ("Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>"); |
80 | MODULE_LICENSE("GPL"); | 80 | MODULE_LICENSE("GPL"); |
81 | 81 | ||
82 | /* | ||
83 | * PPC64 doesn't (yet) have a cacheable_memcpy | ||
84 | */ | ||
85 | #ifdef CONFIG_PPC64 | ||
86 | #define cacheable_memcpy(d,s,n) memcpy((d),(s),(n)) | ||
87 | #endif | ||
88 | |||
89 | /* minimum number of free TX descriptors required to wake up TX process */ | 82 | /* minimum number of free TX descriptors required to wake up TX process */ |
90 | #define EMAC_TX_WAKEUP_THRESH (NUM_TX_BUFF / 4) | 83 | #define EMAC_TX_WAKEUP_THRESH (NUM_TX_BUFF / 4) |
91 | 84 | ||
@@ -1673,7 +1666,7 @@ static inline int emac_rx_sg_append(struct emac_instance *dev, int slot) | |||
1673 | dev_kfree_skb(dev->rx_sg_skb); | 1666 | dev_kfree_skb(dev->rx_sg_skb); |
1674 | dev->rx_sg_skb = NULL; | 1667 | dev->rx_sg_skb = NULL; |
1675 | } else { | 1668 | } else { |
1676 | cacheable_memcpy(skb_tail_pointer(dev->rx_sg_skb), | 1669 | memcpy(skb_tail_pointer(dev->rx_sg_skb), |
1677 | dev->rx_skb[slot]->data, len); | 1670 | dev->rx_skb[slot]->data, len); |
1678 | skb_put(dev->rx_sg_skb, len); | 1671 | skb_put(dev->rx_sg_skb, len); |
1679 | emac_recycle_rx_skb(dev, slot, len); | 1672 | emac_recycle_rx_skb(dev, slot, len); |
@@ -1730,8 +1723,7 @@ static int emac_poll_rx(void *param, int budget) | |||
1730 | goto oom; | 1723 | goto oom; |
1731 | 1724 | ||
1732 | skb_reserve(copy_skb, EMAC_RX_SKB_HEADROOM + 2); | 1725 | skb_reserve(copy_skb, EMAC_RX_SKB_HEADROOM + 2); |
1733 | cacheable_memcpy(copy_skb->data - 2, skb->data - 2, | 1726 | memcpy(copy_skb->data - 2, skb->data - 2, len + 2); |
1734 | len + 2); | ||
1735 | emac_recycle_rx_skb(dev, slot, len); | 1727 | emac_recycle_rx_skb(dev, slot, len); |
1736 | skb = copy_skb; | 1728 | skb = copy_skb; |
1737 | } else if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) | 1729 | } else if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) |