aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-04-02 15:48:36 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-04-02 15:48:36 -0400
commitf900e5824a44ab65437b4f7e7c610b72f94820c5 (patch)
tree770015a763e4c87e807e00a467a4ca602f242363
parent23344cb341902f4e3431d8137dca93d6e186d054 (diff)
parent856d08ec46c5ecf3df13827c492fb6998fdc8322 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc
* master.kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc: [PATCH] powerpc: iSeries needs slb_initialize to be called powerpc: hook up the splice syscall [PATCH] powerpc/cell: compile fixes [PATCH] powerpc: trivial spelling fixes in fault.c [PATCH] powerpc/pseries: EEH Cleanup [PATCH] powerpc/pseries: misc lparcfg fixes [PATCH] powerpc/pseries: fix device name printing, again. [PATCH] powerpc: Extends HCALL interface for InfiniBand usage [PATCH] powerpc/pseries: Change H_StudlyCaps to H_SHOUTING_CAPS [PATCH] powerpc/pseries: print message if EEH recovery fails [PATCH] powerpc/pseries: mutex lock to serialize EEH event processing powerpc: converted embedded platforms to use new define_machine support powerpc: merge machine_check_exception between ppc32 & ppc64
-rw-r--r--arch/powerpc/kernel/lparcfg.c31
-rw-r--r--arch/powerpc/kernel/rtas.c12
-rw-r--r--arch/powerpc/kernel/setup_32.c6
-rw-r--r--arch/powerpc/kernel/setup_64.c10
-rw-r--r--arch/powerpc/kernel/traps.c9
-rw-r--r--arch/powerpc/mm/fault.c6
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_sys.c40
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ads.c40
-rw-r--r--arch/powerpc/platforms/cell/spu_callbacks.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c1
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c62
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c19
-rw-r--r--arch/powerpc/platforms/pseries/eeh_event.c30
-rw-r--r--arch/powerpc/platforms/pseries/hvCall.S100
-rw-r--r--arch/powerpc/platforms/pseries/hvconsole.c6
-rw-r--r--arch/powerpc/platforms/pseries/hvcserver.c22
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c31
-rw-r--r--arch/powerpc/platforms/pseries/setup.c2
-rw-r--r--arch/powerpc/platforms/pseries/vio.c4
-rw-r--r--arch/powerpc/platforms/pseries/xics.c8
-rw-r--r--drivers/char/hvcs.c2
-rw-r--r--drivers/net/ibmveth.c30
-rw-r--r--drivers/scsi/ibmvscsi/rpa_vscsi.c10
-rw-r--r--include/asm-powerpc/eeh.h20
-rw-r--r--include/asm-powerpc/hvcall.h185
25 files changed, 440 insertions, 247 deletions
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index 1b73508ecb2b..2cbde865d4f5 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -37,7 +37,7 @@
37#include <asm/prom.h> 37#include <asm/prom.h>
38#include <asm/vdso_datapage.h> 38#include <asm/vdso_datapage.h>
39 39
40#define MODULE_VERS "1.6" 40#define MODULE_VERS "1.7"
41#define MODULE_NAME "lparcfg" 41#define MODULE_NAME "lparcfg"
42 42
43/* #define LPARCFG_DEBUG */ 43/* #define LPARCFG_DEBUG */
@@ -149,17 +149,17 @@ static void log_plpar_hcall_return(unsigned long rc, char *tag)
149 if (rc == 0) /* success, return */ 149 if (rc == 0) /* success, return */
150 return; 150 return;
151/* check for null tag ? */ 151/* check for null tag ? */
152 if (rc == H_Hardware) 152 if (rc == H_HARDWARE)
153 printk(KERN_INFO 153 printk(KERN_INFO
154 "plpar-hcall (%s) failed with hardware fault\n", tag); 154 "plpar-hcall (%s) failed with hardware fault\n", tag);
155 else if (rc == H_Function) 155 else if (rc == H_FUNCTION)
156 printk(KERN_INFO 156 printk(KERN_INFO
157 "plpar-hcall (%s) failed; function not allowed\n", tag); 157 "plpar-hcall (%s) failed; function not allowed\n", tag);
158 else if (rc == H_Authority) 158 else if (rc == H_AUTHORITY)
159 printk(KERN_INFO 159 printk(KERN_INFO
160 "plpar-hcall (%s) failed; not authorized to this function\n", 160 "plpar-hcall (%s) failed; not authorized to this"
161 tag); 161 " function\n", tag);
162 else if (rc == H_Parameter) 162 else if (rc == H_PARAMETER)
163 printk(KERN_INFO "plpar-hcall (%s) failed; Bad parameter(s)\n", 163 printk(KERN_INFO "plpar-hcall (%s) failed; Bad parameter(s)\n",
164 tag); 164 tag);
165 else 165 else
@@ -209,7 +209,7 @@ static void h_pic(unsigned long *pool_idle_time, unsigned long *num_procs)
209 unsigned long dummy; 209 unsigned long dummy;
210 rc = plpar_hcall(H_PIC, 0, 0, 0, 0, pool_idle_time, num_procs, &dummy); 210 rc = plpar_hcall(H_PIC, 0, 0, 0, 0, pool_idle_time, num_procs, &dummy);
211 211
212 if (rc != H_Authority) 212 if (rc != H_AUTHORITY)
213 log_plpar_hcall_return(rc, "H_PIC"); 213 log_plpar_hcall_return(rc, "H_PIC");
214} 214}
215 215
@@ -242,7 +242,7 @@ static void parse_system_parameter_string(struct seq_file *m)
242{ 242{
243 int call_status; 243 int call_status;
244 244
245 char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL); 245 unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
246 if (!local_buffer) { 246 if (!local_buffer) {
247 printk(KERN_ERR "%s %s kmalloc failure at line %d \n", 247 printk(KERN_ERR "%s %s kmalloc failure at line %d \n",
248 __FILE__, __FUNCTION__, __LINE__); 248 __FILE__, __FUNCTION__, __LINE__);
@@ -254,7 +254,8 @@ static void parse_system_parameter_string(struct seq_file *m)
254 call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1, 254 call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
255 NULL, 255 NULL,
256 SPLPAR_CHARACTERISTICS_TOKEN, 256 SPLPAR_CHARACTERISTICS_TOKEN,
257 __pa(rtas_data_buf)); 257 __pa(rtas_data_buf),
258 RTAS_DATA_BUF_SIZE);
258 memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH); 259 memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH);
259 spin_unlock(&rtas_data_buf_lock); 260 spin_unlock(&rtas_data_buf_lock);
260 261
@@ -275,7 +276,7 @@ static void parse_system_parameter_string(struct seq_file *m)
275#ifdef LPARCFG_DEBUG 276#ifdef LPARCFG_DEBUG
276 printk(KERN_INFO "success calling get-system-parameter \n"); 277 printk(KERN_INFO "success calling get-system-parameter \n");
277#endif 278#endif
278 splpar_strlen = local_buffer[0] * 16 + local_buffer[1]; 279 splpar_strlen = local_buffer[0] * 256 + local_buffer[1];
279 local_buffer += 2; /* step over strlen value */ 280 local_buffer += 2; /* step over strlen value */
280 281
281 memset(workbuffer, 0, SPLPAR_MAXLENGTH); 282 memset(workbuffer, 0, SPLPAR_MAXLENGTH);
@@ -529,13 +530,13 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf,
529 retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr, 530 retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr,
530 *new_weight_ptr); 531 *new_weight_ptr);
531 532
532 if (retval == H_Success || retval == H_Constrained) { 533 if (retval == H_SUCCESS || retval == H_CONSTRAINED) {
533 retval = count; 534 retval = count;
534 } else if (retval == H_Busy) { 535 } else if (retval == H_BUSY) {
535 retval = -EBUSY; 536 retval = -EBUSY;
536 } else if (retval == H_Hardware) { 537 } else if (retval == H_HARDWARE) {
537 retval = -EIO; 538 retval = -EIO;
538 } else if (retval == H_Parameter) { 539 } else if (retval == H_PARAMETER) {
539 retval = -EINVAL; 540 retval = -EINVAL;
540 } else { 541 } else {
541 printk(KERN_WARNING "%s: received unknown hv return code %ld", 542 printk(KERN_WARNING "%s: received unknown hv return code %ld",
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 06636c927a7e..0112318213ab 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -578,18 +578,18 @@ static void rtas_percpu_suspend_me(void *info)
578 * We use "waiting" to indicate our state. As long 578 * We use "waiting" to indicate our state. As long
579 * as it is >0, we are still trying to all join up. 579 * as it is >0, we are still trying to all join up.
580 * If it goes to 0, we have successfully joined up and 580 * If it goes to 0, we have successfully joined up and
581 * one thread got H_Continue. If any error happens, 581 * one thread got H_CONTINUE. If any error happens,
582 * we set it to <0. 582 * we set it to <0.
583 */ 583 */
584 local_irq_save(flags); 584 local_irq_save(flags);
585 do { 585 do {
586 rc = plpar_hcall_norets(H_JOIN); 586 rc = plpar_hcall_norets(H_JOIN);
587 smp_rmb(); 587 smp_rmb();
588 } while (rc == H_Success && data->waiting > 0); 588 } while (rc == H_SUCCESS && data->waiting > 0);
589 if (rc == H_Success) 589 if (rc == H_SUCCESS)
590 goto out; 590 goto out;
591 591
592 if (rc == H_Continue) { 592 if (rc == H_CONTINUE) {
593 data->waiting = 0; 593 data->waiting = 0;
594 data->args->args[data->args->nargs] = 594 data->args->args[data->args->nargs] =
595 rtas_call(ibm_suspend_me_token, 0, 1, NULL); 595 rtas_call(ibm_suspend_me_token, 0, 1, NULL);
@@ -597,7 +597,7 @@ static void rtas_percpu_suspend_me(void *info)
597 plpar_hcall_norets(H_PROD,i); 597 plpar_hcall_norets(H_PROD,i);
598 } else { 598 } else {
599 data->waiting = -EBUSY; 599 data->waiting = -EBUSY;
600 printk(KERN_ERR "Error on H_Join hypervisor call\n"); 600 printk(KERN_ERR "Error on H_JOIN hypervisor call\n");
601 } 601 }
602 602
603out: 603out:
@@ -624,7 +624,7 @@ static int rtas_ibm_suspend_me(struct rtas_args *args)
624 printk(KERN_ERR "Error doing global join\n"); 624 printk(KERN_ERR "Error doing global join\n");
625 625
626 /* Prod each CPU. This won't hurt, and will wake 626 /* Prod each CPU. This won't hurt, and will wake
627 * anyone we successfully put to sleep with H_Join 627 * anyone we successfully put to sleep with H_JOIN.
628 */ 628 */
629 for_each_possible_cpu(i) 629 for_each_possible_cpu(i)
630 plpar_hcall_norets(H_PROD, i); 630 plpar_hcall_norets(H_PROD, i);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index a72bf5dceeee..69ac25701344 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -50,7 +50,6 @@
50#include <asm/kgdb.h> 50#include <asm/kgdb.h>
51#endif 51#endif
52 52
53extern void platform_init(void);
54extern void bootx_init(unsigned long r4, unsigned long phys); 53extern void bootx_init(unsigned long r4, unsigned long phys);
55 54
56boot_infos_t *boot_infos; 55boot_infos_t *boot_infos;
@@ -138,12 +137,7 @@ void __init machine_init(unsigned long dt_ptr, unsigned long phys)
138 strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line)); 137 strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line));
139#endif /* CONFIG_CMDLINE */ 138#endif /* CONFIG_CMDLINE */
140 139
141#ifdef CONFIG_PPC_MULTIPLATFORM
142 probe_machine(); 140 probe_machine();
143#else
144 /* Base init based on machine type. Obsoloete, please kill ! */
145 platform_init();
146#endif
147 141
148#ifdef CONFIG_6xx 142#ifdef CONFIG_6xx
149 if (cpu_has_feature(CPU_FTR_CAN_DOZE) || 143 if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 59aa92cd6fa4..13e91c4d70a8 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -215,12 +215,10 @@ void __init early_setup(unsigned long dt_ptr)
215 /* 215 /*
216 * Initialize stab / SLB management except on iSeries 216 * Initialize stab / SLB management except on iSeries
217 */ 217 */
218 if (!firmware_has_feature(FW_FEATURE_ISERIES)) { 218 if (cpu_has_feature(CPU_FTR_SLB))
219 if (cpu_has_feature(CPU_FTR_SLB)) 219 slb_initialize();
220 slb_initialize(); 220 else if (!firmware_has_feature(FW_FEATURE_ISERIES))
221 else 221 stab_initialize(get_paca()->stab_real);
222 stab_initialize(get_paca()->stab_real);
223 }
224 222
225 DBG(" <- early_setup()\n"); 223 DBG(" <- early_setup()\n");
226} 224}
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 4cbde211eb69..064a52564692 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -228,7 +228,7 @@ void system_reset_exception(struct pt_regs *regs)
228 */ 228 */
229static inline int check_io_access(struct pt_regs *regs) 229static inline int check_io_access(struct pt_regs *regs)
230{ 230{
231#ifdef CONFIG_PPC_PMAC 231#if defined(CONFIG_PPC_PMAC) && defined(CONFIG_PPC32)
232 unsigned long msr = regs->msr; 232 unsigned long msr = regs->msr;
233 const struct exception_table_entry *entry; 233 const struct exception_table_entry *entry;
234 unsigned int *nip = (unsigned int *)regs->nip; 234 unsigned int *nip = (unsigned int *)regs->nip;
@@ -261,7 +261,7 @@ static inline int check_io_access(struct pt_regs *regs)
261 return 1; 261 return 1;
262 } 262 }
263 } 263 }
264#endif /* CONFIG_PPC_PMAC */ 264#endif /* CONFIG_PPC_PMAC && CONFIG_PPC32 */
265 return 0; 265 return 0;
266} 266}
267 267
@@ -308,8 +308,8 @@ platform_machine_check(struct pt_regs *regs)
308 308
309void machine_check_exception(struct pt_regs *regs) 309void machine_check_exception(struct pt_regs *regs)
310{ 310{
311#ifdef CONFIG_PPC64
312 int recover = 0; 311 int recover = 0;
312 unsigned long reason = get_mc_reason(regs);
313 313
314 /* See if any machine dependent calls */ 314 /* See if any machine dependent calls */
315 if (ppc_md.machine_check_exception) 315 if (ppc_md.machine_check_exception)
@@ -317,8 +317,6 @@ void machine_check_exception(struct pt_regs *regs)
317 317
318 if (recover) 318 if (recover)
319 return; 319 return;
320#else
321 unsigned long reason = get_mc_reason(regs);
322 320
323 if (user_mode(regs)) { 321 if (user_mode(regs)) {
324 regs->msr |= MSR_RI; 322 regs->msr |= MSR_RI;
@@ -462,7 +460,6 @@ void machine_check_exception(struct pt_regs *regs)
462 * additional info, e.g. bus error registers. 460 * additional info, e.g. bus error registers.
463 */ 461 */
464 platform_machine_check(regs); 462 platform_machine_check(regs);
465#endif /* CONFIG_PPC64 */
466 463
467 if (debugger_fault_handler(regs)) 464 if (debugger_fault_handler(regs))
468 return; 465 return;
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 5aea0909a5ec..fdbba4206d59 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -177,15 +177,15 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
177 177
178 /* When running in the kernel we expect faults to occur only to 178 /* When running in the kernel we expect faults to occur only to
179 * addresses in user space. All other faults represent errors in the 179 * addresses in user space. All other faults represent errors in the
180 * kernel and should generate an OOPS. Unfortunatly, in the case of an 180 * kernel and should generate an OOPS. Unfortunately, in the case of an
181 * erroneous fault occuring in a code path which already holds mmap_sem 181 * erroneous fault occurring in a code path which already holds mmap_sem
182 * we will deadlock attempting to validate the fault against the 182 * we will deadlock attempting to validate the fault against the
183 * address space. Luckily the kernel only validly references user 183 * address space. Luckily the kernel only validly references user
184 * space from well defined areas of code, which are listed in the 184 * space from well defined areas of code, which are listed in the
185 * exceptions table. 185 * exceptions table.
186 * 186 *
187 * As the vast majority of faults will be valid we will only perform 187 * As the vast majority of faults will be valid we will only perform
188 * the source reference check when there is a possibilty of a deadlock. 188 * the source reference check when there is a possibility of a deadlock.
189 * Attempt to lock the address space, if we cannot we then validate the 189 * Attempt to lock the address space, if we cannot we then validate the
190 * source. If this is invalid we can skip the address space check, 190 * source. If this is invalid we can skip the address space check,
191 * thus avoiding the deadlock. 191 * thus avoiding the deadlock.
diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.c b/arch/powerpc/platforms/83xx/mpc834x_sys.c
index 7c18b4cd5db4..7e789d2420ba 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_sys.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_sys.c
@@ -158,25 +158,25 @@ static int __init mpc834x_rtc_hookup(void)
158late_initcall(mpc834x_rtc_hookup); 158late_initcall(mpc834x_rtc_hookup);
159#endif 159#endif
160 160
161void __init platform_init(void) 161/*
162 * Called very early, MMU is off, device-tree isn't unflattened
163 */
164static int __init mpc834x_sys_probe(void)
162{ 165{
163 /* setup the PowerPC module struct */ 166 /* We always match for now, eventually we should look at the flat
164 ppc_md.setup_arch = mpc834x_sys_setup_arch; 167 dev tree to ensure this is the board we are suppose to run on
165 168 */
166 ppc_md.init_IRQ = mpc834x_sys_init_IRQ; 169 return 1;
167 ppc_md.get_irq = ipic_get_irq;
168
169 ppc_md.restart = mpc83xx_restart;
170
171 ppc_md.time_init = mpc83xx_time_init;
172 ppc_md.set_rtc_time = NULL;
173 ppc_md.get_rtc_time = NULL;
174 ppc_md.calibrate_decr = generic_calibrate_decr;
175
176 ppc_md.progress = udbg_progress;
177
178 if (ppc_md.progress)
179 ppc_md.progress("mpc834x_sys_init(): exit", 0);
180
181 return;
182} 170}
171
172define_machine(mpc834x_sys) {
173 .name = "MPC834x SYS",
174 .probe = mpc834x_sys_probe,
175 .setup_arch = mpc834x_sys_setup_arch,
176 .init_IRQ = mpc834x_sys_init_IRQ,
177 .get_irq = ipic_get_irq,
178 .restart = mpc83xx_restart,
179 .time_init = mpc83xx_time_init,
180 .calibrate_decr = generic_calibrate_decr,
181 .progress = udbg_progress,
182};
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index b7821dbae00d..5eeff370f5fc 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -220,25 +220,25 @@ void mpc85xx_ads_show_cpuinfo(struct seq_file *m)
220 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); 220 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
221} 221}
222 222
223void __init platform_init(void) 223/*
224 * Called very early, device-tree isn't unflattened
225 */
226static int __init mpc85xx_ads_probe(void)
224{ 227{
225 ppc_md.setup_arch = mpc85xx_ads_setup_arch; 228 /* We always match for now, eventually we should look at the flat
226 ppc_md.show_cpuinfo = mpc85xx_ads_show_cpuinfo; 229 dev tree to ensure this is the board we are suppose to run on
227 230 */
228 ppc_md.init_IRQ = mpc85xx_ads_pic_init; 231 return 1;
229 ppc_md.get_irq = mpic_get_irq;
230
231 ppc_md.restart = mpc85xx_restart;
232 ppc_md.power_off = NULL;
233 ppc_md.halt = NULL;
234
235 ppc_md.time_init = NULL;
236 ppc_md.set_rtc_time = NULL;
237 ppc_md.get_rtc_time = NULL;
238 ppc_md.calibrate_decr = generic_calibrate_decr;
239
240 ppc_md.progress = udbg_progress;
241
242 if (ppc_md.progress)
243 ppc_md.progress("mpc85xx_ads platform_init(): exit", 0);
244} 232}
233
234define_machine(mpc85xx_ads) {
235 .name = "MPC85xx ADS",
236 .probe = mpc85xx_ads_probe,
237 .setup_arch = mpc85xx_ads_setup_arch,
238 .init_IRQ = mpc85xx_ads_pic_init,
239 .show_cpuinfo = mpc85xx_ads_show_cpuinfo,
240 .get_irq = mpic_get_irq,
241 .restart = mpc85xx_restart,
242 .calibrate_decr = generic_calibrate_decr,
243 .progress = udbg_progress,
244};
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c
index 3a4245c926ad..6594bec73882 100644
--- a/arch/powerpc/platforms/cell/spu_callbacks.c
+++ b/arch/powerpc/platforms/cell/spu_callbacks.c
@@ -316,6 +316,7 @@ void *spu_syscall_table[] = {
316 [__NR_pselect6] sys_ni_syscall, /* sys_pselect */ 316 [__NR_pselect6] sys_ni_syscall, /* sys_pselect */
317 [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */ 317 [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */
318 [__NR_unshare] sys_unshare, 318 [__NR_unshare] sys_unshare,
319 [__NR_splice] sys_splice,
319}; 320};
320 321
321long spu_sys_callback(struct spu_syscall_block *s) 322long spu_sys_callback(struct spu_syscall_block *s)
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index c04e078c0fe5..483c8b76232c 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -2,6 +2,7 @@
2#include <linux/ptrace.h> 2#include <linux/ptrace.h>
3 3
4#include <asm/spu.h> 4#include <asm/spu.h>
5#include <asm/unistd.h>
5 6
6#include "spufs.h" 7#include "spufs.h"
7 8
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 9b2b1cb117b3..780fb27a0099 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -865,7 +865,7 @@ void __init eeh_init(void)
865 * on the CEC architecture, type of the device, on earlier boot 865 * on the CEC architecture, type of the device, on earlier boot
866 * command-line arguments & etc. 866 * command-line arguments & etc.
867 */ 867 */
868void eeh_add_device_early(struct device_node *dn) 868static void eeh_add_device_early(struct device_node *dn)
869{ 869{
870 struct pci_controller *phb; 870 struct pci_controller *phb;
871 struct eeh_early_enable_info info; 871 struct eeh_early_enable_info info;
@@ -882,7 +882,6 @@ void eeh_add_device_early(struct device_node *dn)
882 info.buid_lo = BUID_LO(phb->buid); 882 info.buid_lo = BUID_LO(phb->buid);
883 early_enable_eeh(dn, &info); 883 early_enable_eeh(dn, &info);
884} 884}
885EXPORT_SYMBOL_GPL(eeh_add_device_early);
886 885
887void eeh_add_device_tree_early(struct device_node *dn) 886void eeh_add_device_tree_early(struct device_node *dn)
888{ 887{
@@ -893,20 +892,6 @@ void eeh_add_device_tree_early(struct device_node *dn)
893} 892}
894EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); 893EXPORT_SYMBOL_GPL(eeh_add_device_tree_early);
895 894
896void eeh_add_device_tree_late(struct pci_bus *bus)
897{
898 struct pci_dev *dev;
899
900 list_for_each_entry(dev, &bus->devices, bus_list) {
901 eeh_add_device_late(dev);
902 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
903 struct pci_bus *subbus = dev->subordinate;
904 if (subbus)
905 eeh_add_device_tree_late(subbus);
906 }
907 }
908}
909
910/** 895/**
911 * eeh_add_device_late - perform EEH initialization for the indicated pci device 896 * eeh_add_device_late - perform EEH initialization for the indicated pci device
912 * @dev: pci device for which to set up EEH 897 * @dev: pci device for which to set up EEH
@@ -914,7 +899,7 @@ void eeh_add_device_tree_late(struct pci_bus *bus)
914 * This routine must be used to complete EEH initialization for PCI 899 * This routine must be used to complete EEH initialization for PCI
915 * devices that were added after system boot (e.g. hotplug, dlpar). 900 * devices that were added after system boot (e.g. hotplug, dlpar).
916 */ 901 */
917void eeh_add_device_late(struct pci_dev *dev) 902static void eeh_add_device_late(struct pci_dev *dev)
918{ 903{
919 struct device_node *dn; 904 struct device_node *dn;
920 struct pci_dn *pdn; 905 struct pci_dn *pdn;
@@ -933,16 +918,33 @@ void eeh_add_device_late(struct pci_dev *dev)
933 918
934 pci_addr_cache_insert_device (dev); 919 pci_addr_cache_insert_device (dev);
935} 920}
936EXPORT_SYMBOL_GPL(eeh_add_device_late); 921
922void eeh_add_device_tree_late(struct pci_bus *bus)
923{
924 struct pci_dev *dev;
925
926 list_for_each_entry(dev, &bus->devices, bus_list) {
927 eeh_add_device_late(dev);
928 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
929 struct pci_bus *subbus = dev->subordinate;
930 if (subbus)
931 eeh_add_device_tree_late(subbus);
932 }
933 }
934}
935EXPORT_SYMBOL_GPL(eeh_add_device_tree_late);
937 936
938/** 937/**
939 * eeh_remove_device - undo EEH setup for the indicated pci device 938 * eeh_remove_device - undo EEH setup for the indicated pci device
940 * @dev: pci device to be removed 939 * @dev: pci device to be removed
941 * 940 *
942 * This routine should be when a device is removed from a running 941 * This routine should be called when a device is removed from
943 * system (e.g. by hotplug or dlpar). 942 * a running system (e.g. by hotplug or dlpar). It unregisters
943 * the PCI device from the EEH subsystem. I/O errors affecting
944 * this device will no longer be detected after this call; thus,
945 * i/o errors affecting this slot may leave this device unusable.
944 */ 946 */
945void eeh_remove_device(struct pci_dev *dev) 947static void eeh_remove_device(struct pci_dev *dev)
946{ 948{
947 struct device_node *dn; 949 struct device_node *dn;
948 if (!dev || !eeh_subsystem_enabled) 950 if (!dev || !eeh_subsystem_enabled)
@@ -958,21 +960,17 @@ void eeh_remove_device(struct pci_dev *dev)
958 PCI_DN(dn)->pcidev = NULL; 960 PCI_DN(dn)->pcidev = NULL;
959 pci_dev_put (dev); 961 pci_dev_put (dev);
960} 962}
961EXPORT_SYMBOL_GPL(eeh_remove_device);
962 963
963void eeh_remove_bus_device(struct pci_dev *dev) 964void eeh_remove_bus_device(struct pci_dev *dev)
964{ 965{
966 struct pci_bus *bus = dev->subordinate;
967 struct pci_dev *child, *tmp;
968
965 eeh_remove_device(dev); 969 eeh_remove_device(dev);
966 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { 970
967 struct pci_bus *bus = dev->subordinate; 971 if (bus && dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
968 struct list_head *ln; 972 list_for_each_entry_safe(child, tmp, &bus->devices, bus_list)
969 if (!bus) 973 eeh_remove_bus_device(child);
970 return;
971 for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) {
972 struct pci_dev *pdev = pci_dev_b(ln);
973 if (pdev)
974 eeh_remove_bus_device(pdev);
975 }
976 } 974 }
977} 975}
978EXPORT_SYMBOL_GPL(eeh_remove_bus_device); 976EXPORT_SYMBOL_GPL(eeh_remove_bus_device);
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index cc2495a0cdd5..1fba695e32e8 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -293,15 +293,16 @@ void handle_eeh_events (struct eeh_event *event)
293 frozen_pdn = PCI_DN(frozen_dn); 293 frozen_pdn = PCI_DN(frozen_dn);
294 frozen_pdn->eeh_freeze_count++; 294 frozen_pdn->eeh_freeze_count++;
295 295
296 pci_str = pci_name (frozen_pdn->pcidev); 296 if (frozen_pdn->pcidev) {
297 drv_str = pcid_name (frozen_pdn->pcidev); 297 pci_str = pci_name (frozen_pdn->pcidev);
298 if (!pci_str) { 298 drv_str = pcid_name (frozen_pdn->pcidev);
299 } else {
299 pci_str = pci_name (event->dev); 300 pci_str = pci_name (event->dev);
300 drv_str = pcid_name (event->dev); 301 drv_str = pcid_name (event->dev);
301 } 302 }
302 303
303 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) 304 if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES)
304 goto hard_fail; 305 goto excess_failures;
305 306
306 /* If the reset state is a '5' and the time to reset is 0 (infinity) 307 /* If the reset state is a '5' and the time to reset is 0 (infinity)
307 * or is more then 15 seconds, then mark this as a permanent failure. 308 * or is more then 15 seconds, then mark this as a permanent failure.
@@ -356,7 +357,7 @@ void handle_eeh_events (struct eeh_event *event)
356 357
357 return; 358 return;
358 359
359hard_fail: 360excess_failures:
360 /* 361 /*
361 * About 90% of all real-life EEH failures in the field 362 * About 90% of all real-life EEH failures in the field
362 * are due to poorly seated PCI cards. Only 10% or so are 363 * are due to poorly seated PCI cards. Only 10% or so are
@@ -367,7 +368,15 @@ hard_fail:
367 "and has been permanently disabled. Please try reseating\n" 368 "and has been permanently disabled. Please try reseating\n"
368 "this device or replacing it.\n", 369 "this device or replacing it.\n",
369 drv_str, pci_str, frozen_pdn->eeh_freeze_count); 370 drv_str, pci_str, frozen_pdn->eeh_freeze_count);
371 goto perm_error;
372
373hard_fail:
374 printk(KERN_ERR
375 "EEH: Unable to recover from failure of PCI device %s - %s\n"
376 "Please try reseating this device or replacing it.\n",
377 drv_str, pci_str);
370 378
379perm_error:
371 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); 380 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */);
372 381
373 /* Notify all devices that they're about to go down. */ 382 /* Notify all devices that they're about to go down. */
diff --git a/arch/powerpc/platforms/pseries/eeh_event.c b/arch/powerpc/platforms/pseries/eeh_event.c
index 9a9961f27480..a1bda6f96fd1 100644
--- a/arch/powerpc/platforms/pseries/eeh_event.c
+++ b/arch/powerpc/platforms/pseries/eeh_event.c
@@ -19,7 +19,9 @@
19 */ 19 */
20 20
21#include <linux/list.h> 21#include <linux/list.h>
22#include <linux/mutex.h>
22#include <linux/pci.h> 23#include <linux/pci.h>
24#include <linux/workqueue.h>
23#include <asm/eeh_event.h> 25#include <asm/eeh_event.h>
24#include <asm/ppc-pci.h> 26#include <asm/ppc-pci.h>
25 27
@@ -37,14 +39,18 @@ LIST_HEAD(eeh_eventlist);
37static void eeh_thread_launcher(void *); 39static void eeh_thread_launcher(void *);
38DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL); 40DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL);
39 41
42/* Serialize reset sequences for a given pci device */
43DEFINE_MUTEX(eeh_event_mutex);
44
40/** 45/**
41 * eeh_event_handler - dispatch EEH events. The detection of a frozen 46 * eeh_event_handler - dispatch EEH events.
42 * slot can occur inside an interrupt, where it can be hard to do
43 * anything about it. The goal of this routine is to pull these
44 * detection events out of the context of the interrupt handler, and
45 * re-dispatch them for processing at a later time in a normal context.
46 *
47 * @dummy - unused 47 * @dummy - unused
48 *
49 * The detection of a frozen slot can occur inside an interrupt,
50 * where it can be hard to do anything about it. The goal of this
51 * routine is to pull these detection events out of the context
52 * of the interrupt handler, and re-dispatch them for processing
53 * at a later time in a normal context.
48 */ 54 */
49static int eeh_event_handler(void * dummy) 55static int eeh_event_handler(void * dummy)
50{ 56{
@@ -64,23 +70,24 @@ static int eeh_event_handler(void * dummy)
64 event = list_entry(eeh_eventlist.next, struct eeh_event, list); 70 event = list_entry(eeh_eventlist.next, struct eeh_event, list);
65 list_del(&event->list); 71 list_del(&event->list);
66 } 72 }
67
68 if (event)
69 eeh_mark_slot(event->dn, EEH_MODE_RECOVERING);
70
71 spin_unlock_irqrestore(&eeh_eventlist_lock, flags); 73 spin_unlock_irqrestore(&eeh_eventlist_lock, flags);
74
72 if (event == NULL) 75 if (event == NULL)
73 break; 76 break;
74 77
78 /* Serialize processing of EEH events */
79 mutex_lock(&eeh_event_mutex);
80 eeh_mark_slot(event->dn, EEH_MODE_RECOVERING);
81
75 printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n", 82 printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n",
76 pci_name(event->dev)); 83 pci_name(event->dev));
77 84
78 handle_eeh_events(event); 85 handle_eeh_events(event);
79 86
80 eeh_clear_slot(event->dn, EEH_MODE_RECOVERING); 87 eeh_clear_slot(event->dn, EEH_MODE_RECOVERING);
81
82 pci_dev_put(event->dev); 88 pci_dev_put(event->dev);
83 kfree(event); 89 kfree(event);
90 mutex_unlock(&eeh_event_mutex);
84 } 91 }
85 92
86 return 0; 93 return 0;
@@ -88,7 +95,6 @@ static int eeh_event_handler(void * dummy)
88 95
89/** 96/**
90 * eeh_thread_launcher 97 * eeh_thread_launcher
91 *
92 * @dummy - unused 98 * @dummy - unused
93 */ 99 */
94static void eeh_thread_launcher(void *dummy) 100static void eeh_thread_launcher(void *dummy)
diff --git a/arch/powerpc/platforms/pseries/hvCall.S b/arch/powerpc/platforms/pseries/hvCall.S
index db7c19fe9297..c9ff547f9d25 100644
--- a/arch/powerpc/platforms/pseries/hvCall.S
+++ b/arch/powerpc/platforms/pseries/hvCall.S
@@ -127,3 +127,103 @@ _GLOBAL(plpar_hcall_4out)
127 127
128 mtcrf 0xff,r0 128 mtcrf 0xff,r0
129 blr /* return r3 = status */ 129 blr /* return r3 = status */
130
131/* plpar_hcall_7arg_7ret(unsigned long opcode, R3
132 unsigned long arg1, R4
133 unsigned long arg2, R5
134 unsigned long arg3, R6
135 unsigned long arg4, R7
136 unsigned long arg5, R8
137 unsigned long arg6, R9
138 unsigned long arg7, R10
139 unsigned long *out1, 112(R1)
140 unsigned long *out2, 110(R1)
141 unsigned long *out3, 108(R1)
142 unsigned long *out4, 106(R1)
143 unsigned long *out5, 104(R1)
144 unsigned long *out6, 102(R1)
145 unsigned long *out7); 100(R1)
146*/
147_GLOBAL(plpar_hcall_7arg_7ret)
148 HMT_MEDIUM
149
150 mfcr r0
151 stw r0,8(r1)
152
153 HVSC /* invoke the hypervisor */
154
155 lwz r0,8(r1)
156
157 ld r11,STK_PARM(r11)(r1) /* Fetch r4 ret arg */
158 std r4,0(r11)
159 ld r11,STK_PARM(r12)(r1) /* Fetch r5 ret arg */
160 std r5,0(r11)
161 ld r11,STK_PARM(r13)(r1) /* Fetch r6 ret arg */
162 std r6,0(r11)
163 ld r11,STK_PARM(r14)(r1) /* Fetch r7 ret arg */
164 std r7,0(r11)
165 ld r11,STK_PARM(r15)(r1) /* Fetch r8 ret arg */
166 std r8,0(r11)
167 ld r11,STK_PARM(r16)(r1) /* Fetch r9 ret arg */
168 std r9,0(r11)
169 ld r11,STK_PARM(r17)(r1) /* Fetch r10 ret arg */
170 std r10,0(r11)
171
172 mtcrf 0xff,r0
173
174 blr /* return r3 = status */
175
176/* plpar_hcall_9arg_9ret(unsigned long opcode, R3
177 unsigned long arg1, R4
178 unsigned long arg2, R5
179 unsigned long arg3, R6
180 unsigned long arg4, R7
181 unsigned long arg5, R8
182 unsigned long arg6, R9
183 unsigned long arg7, R10
184 unsigned long arg8, 112(R1)
185 unsigned long arg9, 110(R1)
186 unsigned long *out1, 108(R1)
187 unsigned long *out2, 106(R1)
188 unsigned long *out3, 104(R1)
189 unsigned long *out4, 102(R1)
190 unsigned long *out5, 100(R1)
191 unsigned long *out6, 98(R1)
192 unsigned long *out7); 96(R1)
193 unsigned long *out8, 94(R1)
194 unsigned long *out9, 92(R1)
195*/
196_GLOBAL(plpar_hcall_9arg_9ret)
197 HMT_MEDIUM
198
199 mfcr r0
200 stw r0,8(r1)
201
202 ld r11,STK_PARM(r11)(r1) /* put arg8 in R11 */
203 ld r12,STK_PARM(r12)(r1) /* put arg9 in R12 */
204
205 HVSC /* invoke the hypervisor */
206
207 ld r0,STK_PARM(r13)(r1) /* Fetch r4 ret arg */
208 stdx r4,r0,r0
209 ld r0,STK_PARM(r14)(r1) /* Fetch r5 ret arg */
210 stdx r5,r0,r0
211 ld r0,STK_PARM(r15)(r1) /* Fetch r6 ret arg */
212 stdx r6,r0,r0
213 ld r0,STK_PARM(r16)(r1) /* Fetch r7 ret arg */
214 stdx r7,r0,r0
215 ld r0,STK_PARM(r17)(r1) /* Fetch r8 ret arg */
216 stdx r8,r0,r0
217 ld r0,STK_PARM(r18)(r1) /* Fetch r9 ret arg */
218 stdx r9,r0,r0
219 ld r0,STK_PARM(r19)(r1) /* Fetch r10 ret arg */
220 stdx r10,r0,r0
221 ld r0,STK_PARM(r20)(r1) /* Fetch r11 ret arg */
222 stdx r11,r0,r0
223 ld r0,STK_PARM(r21)(r1) /* Fetch r12 ret arg */
224 stdx r12,r0,r0
225
226 lwz r0,8(r1)
227 mtcrf 0xff,r0
228
229 blr /* return r3 = status */
diff --git a/arch/powerpc/platforms/pseries/hvconsole.c b/arch/powerpc/platforms/pseries/hvconsole.c
index ba6befd96636..a72a987f1d4d 100644
--- a/arch/powerpc/platforms/pseries/hvconsole.c
+++ b/arch/powerpc/platforms/pseries/hvconsole.c
@@ -41,7 +41,7 @@ int hvc_get_chars(uint32_t vtermno, char *buf, int count)
41 unsigned long got; 41 unsigned long got;
42 42
43 if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got, 43 if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got,
44 (unsigned long *)buf, (unsigned long *)buf+1) == H_Success) 44 (unsigned long *)buf, (unsigned long *)buf+1) == H_SUCCESS)
45 return got; 45 return got;
46 return 0; 46 return 0;
47} 47}
@@ -69,9 +69,9 @@ int hvc_put_chars(uint32_t vtermno, const char *buf, int count)
69 69
70 ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0], 70 ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0],
71 lbuf[1]); 71 lbuf[1]);
72 if (ret == H_Success) 72 if (ret == H_SUCCESS)
73 return count; 73 return count;
74 if (ret == H_Busy) 74 if (ret == H_BUSY)
75 return 0; 75 return 0;
76 return -EIO; 76 return -EIO;
77} 77}
diff --git a/arch/powerpc/platforms/pseries/hvcserver.c b/arch/powerpc/platforms/pseries/hvcserver.c
index 22bfb5c89db9..fcf4b4cbeaf3 100644
--- a/arch/powerpc/platforms/pseries/hvcserver.c
+++ b/arch/powerpc/platforms/pseries/hvcserver.c
@@ -43,21 +43,21 @@ MODULE_VERSION(HVCS_ARCH_VERSION);
43static int hvcs_convert(long to_convert) 43static int hvcs_convert(long to_convert)
44{ 44{
45 switch (to_convert) { 45 switch (to_convert) {
46 case H_Success: 46 case H_SUCCESS:
47 return 0; 47 return 0;
48 case H_Parameter: 48 case H_PARAMETER:
49 return -EINVAL; 49 return -EINVAL;
50 case H_Hardware: 50 case H_HARDWARE:
51 return -EIO; 51 return -EIO;
52 case H_Busy: 52 case H_BUSY:
53 case H_LongBusyOrder1msec: 53 case H_LONG_BUSY_ORDER_1_MSEC:
54 case H_LongBusyOrder10msec: 54 case H_LONG_BUSY_ORDER_10_MSEC:
55 case H_LongBusyOrder100msec: 55 case H_LONG_BUSY_ORDER_100_MSEC:
56 case H_LongBusyOrder1sec: 56 case H_LONG_BUSY_ORDER_1_SEC:
57 case H_LongBusyOrder10sec: 57 case H_LONG_BUSY_ORDER_10_SEC:
58 case H_LongBusyOrder100sec: 58 case H_LONG_BUSY_ORDER_100_SEC:
59 return -EBUSY; 59 return -EBUSY;
60 case H_Function: /* fall through */ 60 case H_FUNCTION: /* fall through */
61 default: 61 default:
62 return -EPERM; 62 return -EPERM;
63 } 63 }
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 8952528d31ac..634b7d06d3cc 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -54,7 +54,8 @@ EXPORT_SYMBOL(plpar_hcall);
54EXPORT_SYMBOL(plpar_hcall_4out); 54EXPORT_SYMBOL(plpar_hcall_4out);
55EXPORT_SYMBOL(plpar_hcall_norets); 55EXPORT_SYMBOL(plpar_hcall_norets);
56EXPORT_SYMBOL(plpar_hcall_8arg_2ret); 56EXPORT_SYMBOL(plpar_hcall_8arg_2ret);
57 57EXPORT_SYMBOL(plpar_hcall_7arg_7ret);
58EXPORT_SYMBOL(plpar_hcall_9arg_9ret);
58extern void pSeries_find_serial_port(void); 59extern void pSeries_find_serial_port(void);
59 60
60 61
@@ -72,7 +73,7 @@ static void udbg_hvsi_putc(char c)
72 73
73 do { 74 do {
74 rc = plpar_put_term_char(vtermno, sizeof(packet), packet); 75 rc = plpar_put_term_char(vtermno, sizeof(packet), packet);
75 } while (rc == H_Busy); 76 } while (rc == H_BUSY);
76} 77}
77 78
78static long hvsi_udbg_buf_len; 79static long hvsi_udbg_buf_len;
@@ -85,7 +86,7 @@ static int udbg_hvsi_getc_poll(void)
85 86
86 if (hvsi_udbg_buf_len == 0) { 87 if (hvsi_udbg_buf_len == 0) {
87 rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf); 88 rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf);
88 if (rc != H_Success || hvsi_udbg_buf[0] != 0xff) { 89 if (rc != H_SUCCESS || hvsi_udbg_buf[0] != 0xff) {
89 /* bad read or non-data packet */ 90 /* bad read or non-data packet */
90 hvsi_udbg_buf_len = 0; 91 hvsi_udbg_buf_len = 0;
91 } else { 92 } else {
@@ -139,7 +140,7 @@ static void udbg_putcLP(char c)
139 buf[0] = c; 140 buf[0] = c;
140 do { 141 do {
141 rc = plpar_put_term_char(vtermno, 1, buf); 142 rc = plpar_put_term_char(vtermno, 1, buf);
142 } while(rc == H_Busy); 143 } while(rc == H_BUSY);
143} 144}
144 145
145/* Buffered chars getc */ 146/* Buffered chars getc */
@@ -158,7 +159,7 @@ static int udbg_getc_pollLP(void)
158 /* get some more chars. */ 159 /* get some more chars. */
159 inbuflen = 0; 160 inbuflen = 0;
160 rc = plpar_get_term_char(vtermno, &inbuflen, buf); 161 rc = plpar_get_term_char(vtermno, &inbuflen, buf);
161 if (rc != H_Success) 162 if (rc != H_SUCCESS)
162 inbuflen = 0; /* otherwise inbuflen is garbage */ 163 inbuflen = 0; /* otherwise inbuflen is garbage */
163 } 164 }
164 if (inbuflen <= 0 || inbuflen > 16) { 165 if (inbuflen <= 0 || inbuflen > 16) {
@@ -304,7 +305,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group,
304 305
305 lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v, 306 lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v,
306 hpte_r, &slot, &dummy0, &dummy1); 307 hpte_r, &slot, &dummy0, &dummy1);
307 if (unlikely(lpar_rc == H_PTEG_Full)) { 308 if (unlikely(lpar_rc == H_PTEG_FULL)) {
308 if (!(vflags & HPTE_V_BOLTED)) 309 if (!(vflags & HPTE_V_BOLTED))
309 DBG_LOW(" full\n"); 310 DBG_LOW(" full\n");
310 return -1; 311 return -1;
@@ -315,7 +316,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group,
315 * will fail. However we must catch the failure in hash_page 316 * will fail. However we must catch the failure in hash_page
316 * or we will loop forever, so return -2 in this case. 317 * or we will loop forever, so return -2 in this case.
317 */ 318 */
318 if (unlikely(lpar_rc != H_Success)) { 319 if (unlikely(lpar_rc != H_SUCCESS)) {
319 if (!(vflags & HPTE_V_BOLTED)) 320 if (!(vflags & HPTE_V_BOLTED))
320 DBG_LOW(" lpar err %d\n", lpar_rc); 321 DBG_LOW(" lpar err %d\n", lpar_rc);
321 return -2; 322 return -2;
@@ -346,9 +347,9 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group)
346 /* don't remove a bolted entry */ 347 /* don't remove a bolted entry */
347 lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset, 348 lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset,
348 (0x1UL << 4), &dummy1, &dummy2); 349 (0x1UL << 4), &dummy1, &dummy2);
349 if (lpar_rc == H_Success) 350 if (lpar_rc == H_SUCCESS)
350 return i; 351 return i;
351 BUG_ON(lpar_rc != H_Not_Found); 352 BUG_ON(lpar_rc != H_NOT_FOUND);
352 353
353 slot_offset++; 354 slot_offset++;
354 slot_offset &= 0x7; 355 slot_offset &= 0x7;
@@ -391,14 +392,14 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot,
391 392
392 lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN); 393 lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN);
393 394
394 if (lpar_rc == H_Not_Found) { 395 if (lpar_rc == H_NOT_FOUND) {
395 DBG_LOW("not found !\n"); 396 DBG_LOW("not found !\n");
396 return -1; 397 return -1;
397 } 398 }
398 399
399 DBG_LOW("ok\n"); 400 DBG_LOW("ok\n");
400 401
401 BUG_ON(lpar_rc != H_Success); 402 BUG_ON(lpar_rc != H_SUCCESS);
402 403
403 return 0; 404 return 0;
404} 405}
@@ -417,7 +418,7 @@ static unsigned long pSeries_lpar_hpte_getword0(unsigned long slot)
417 418
418 lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1); 419 lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1);
419 420
420 BUG_ON(lpar_rc != H_Success); 421 BUG_ON(lpar_rc != H_SUCCESS);
421 422
422 return dword0; 423 return dword0;
423} 424}
@@ -468,7 +469,7 @@ static void pSeries_lpar_hpte_updateboltedpp(unsigned long newpp,
468 flags = newpp & 7; 469 flags = newpp & 7;
469 lpar_rc = plpar_pte_protect(flags, slot, 0); 470 lpar_rc = plpar_pte_protect(flags, slot, 0);
470 471
471 BUG_ON(lpar_rc != H_Success); 472 BUG_ON(lpar_rc != H_SUCCESS);
472} 473}
473 474
474static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, 475static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
@@ -484,10 +485,10 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
484 want_v = hpte_encode_v(va, psize); 485 want_v = hpte_encode_v(va, psize);
485 lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN, 486 lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN,
486 &dummy1, &dummy2); 487 &dummy1, &dummy2);
487 if (lpar_rc == H_Not_Found) 488 if (lpar_rc == H_NOT_FOUND)
488 return; 489 return;
489 490
490 BUG_ON(lpar_rc != H_Success); 491 BUG_ON(lpar_rc != H_SUCCESS);
491} 492}
492 493
493/* 494/*
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index b2fbf8ba8fbb..5eb55ef1c91c 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -463,7 +463,7 @@ static void pseries_dedicated_idle_sleep(void)
463 * very low priority. The cede enables interrupts, which 463 * very low priority. The cede enables interrupts, which
464 * doesn't matter here. 464 * doesn't matter here.
465 */ 465 */
466 if (!lppaca[cpu ^ 1].idle || poll_pending() == H_Pending) 466 if (!lppaca[cpu ^ 1].idle || poll_pending() == H_PENDING)
467 cede_processor(); 467 cede_processor();
468 468
469out: 469out:
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
index 866379b80c09..8e53e04ada8b 100644
--- a/arch/powerpc/platforms/pseries/vio.c
+++ b/arch/powerpc/platforms/pseries/vio.c
@@ -258,7 +258,7 @@ EXPORT_SYMBOL(vio_find_node);
258int vio_enable_interrupts(struct vio_dev *dev) 258int vio_enable_interrupts(struct vio_dev *dev)
259{ 259{
260 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE); 260 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE);
261 if (rc != H_Success) 261 if (rc != H_SUCCESS)
262 printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc); 262 printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc);
263 return rc; 263 return rc;
264} 264}
@@ -267,7 +267,7 @@ EXPORT_SYMBOL(vio_enable_interrupts);
267int vio_disable_interrupts(struct vio_dev *dev) 267int vio_disable_interrupts(struct vio_dev *dev)
268{ 268{
269 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE); 269 int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE);
270 if (rc != H_Success) 270 if (rc != H_SUCCESS)
271 printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc); 271 printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc);
272 return rc; 272 return rc;
273} 273}
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 4864cb32be25..2d60ea30fed6 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -168,7 +168,7 @@ static int pSeriesLP_xirr_info_get(int n_cpu)
168 unsigned long return_value; 168 unsigned long return_value;
169 169
170 lpar_rc = plpar_xirr(&return_value); 170 lpar_rc = plpar_xirr(&return_value);
171 if (lpar_rc != H_Success) 171 if (lpar_rc != H_SUCCESS)
172 panic(" bad return code xirr - rc = %lx \n", lpar_rc); 172 panic(" bad return code xirr - rc = %lx \n", lpar_rc);
173 return (int)return_value; 173 return (int)return_value;
174} 174}
@@ -179,7 +179,7 @@ static void pSeriesLP_xirr_info_set(int n_cpu, int value)
179 unsigned long val64 = value & 0xffffffff; 179 unsigned long val64 = value & 0xffffffff;
180 180
181 lpar_rc = plpar_eoi(val64); 181 lpar_rc = plpar_eoi(val64);
182 if (lpar_rc != H_Success) 182 if (lpar_rc != H_SUCCESS)
183 panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc, 183 panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc,
184 val64); 184 val64);
185} 185}
@@ -189,7 +189,7 @@ void pSeriesLP_cppr_info(int n_cpu, u8 value)
189 unsigned long lpar_rc; 189 unsigned long lpar_rc;
190 190
191 lpar_rc = plpar_cppr(value); 191 lpar_rc = plpar_cppr(value);
192 if (lpar_rc != H_Success) 192 if (lpar_rc != H_SUCCESS)
193 panic("bad return code cppr - rc = %lx\n", lpar_rc); 193 panic("bad return code cppr - rc = %lx\n", lpar_rc);
194} 194}
195 195
@@ -198,7 +198,7 @@ static void pSeriesLP_qirr_info(int n_cpu , u8 value)
198 unsigned long lpar_rc; 198 unsigned long lpar_rc;
199 199
200 lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value); 200 lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value);
201 if (lpar_rc != H_Success) 201 if (lpar_rc != H_SUCCESS)
202 panic("bad return code qirr - rc = %lx\n", lpar_rc); 202 panic("bad return code qirr - rc = %lx\n", lpar_rc);
203} 203}
204 204
diff --git a/drivers/char/hvcs.c b/drivers/char/hvcs.c
index 327b00c3c45e..8d97b3911293 100644
--- a/drivers/char/hvcs.c
+++ b/drivers/char/hvcs.c
@@ -904,7 +904,7 @@ static int hvcs_enable_device(struct hvcs_struct *hvcsd, uint32_t unit_address,
904 * It is possible the vty-server was removed after the irq was 904 * It is possible the vty-server was removed after the irq was
905 * requested but before we have time to enable interrupts. 905 * requested but before we have time to enable interrupts.
906 */ 906 */
907 if (vio_enable_interrupts(vdev) == H_Success) 907 if (vio_enable_interrupts(vdev) == H_SUCCESS)
908 return 0; 908 return 0;
909 else { 909 else {
910 printk(KERN_ERR "HVCS: int enable failed for" 910 printk(KERN_ERR "HVCS: int enable failed for"
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c
index ceb98fd398af..52d01027d9e7 100644
--- a/drivers/net/ibmveth.c
+++ b/drivers/net/ibmveth.c
@@ -235,7 +235,7 @@ static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter, struc
235 235
236 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); 236 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
237 237
238 if(lpar_rc != H_Success) { 238 if(lpar_rc != H_SUCCESS) {
239 pool->free_map[free_index] = index; 239 pool->free_map[free_index] = index;
240 pool->skbuff[index] = NULL; 240 pool->skbuff[index] = NULL;
241 pool->consumer_index--; 241 pool->consumer_index--;
@@ -373,7 +373,7 @@ static void ibmveth_rxq_recycle_buffer(struct ibmveth_adapter *adapter)
373 373
374 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); 374 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
375 375
376 if(lpar_rc != H_Success) { 376 if(lpar_rc != H_SUCCESS) {
377 ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc); 377 ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc);
378 ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator); 378 ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator);
379 } 379 }
@@ -511,7 +511,7 @@ static int ibmveth_open(struct net_device *netdev)
511 adapter->filter_list_dma, 511 adapter->filter_list_dma,
512 mac_address); 512 mac_address);
513 513
514 if(lpar_rc != H_Success) { 514 if(lpar_rc != H_SUCCESS) {
515 ibmveth_error_printk("h_register_logical_lan failed with %ld\n", lpar_rc); 515 ibmveth_error_printk("h_register_logical_lan failed with %ld\n", lpar_rc);
516 ibmveth_error_printk("buffer TCE:0x%lx filter TCE:0x%lx rxq desc:0x%lx MAC:0x%lx\n", 516 ibmveth_error_printk("buffer TCE:0x%lx filter TCE:0x%lx rxq desc:0x%lx MAC:0x%lx\n",
517 adapter->buffer_list_dma, 517 adapter->buffer_list_dma,
@@ -527,7 +527,7 @@ static int ibmveth_open(struct net_device *netdev)
527 ibmveth_error_printk("unable to request irq 0x%x, rc %d\n", netdev->irq, rc); 527 ibmveth_error_printk("unable to request irq 0x%x, rc %d\n", netdev->irq, rc);
528 do { 528 do {
529 rc = h_free_logical_lan(adapter->vdev->unit_address); 529 rc = h_free_logical_lan(adapter->vdev->unit_address);
530 } while (H_isLongBusy(rc) || (rc == H_Busy)); 530 } while (H_IS_LONG_BUSY(rc) || (rc == H_BUSY));
531 531
532 ibmveth_cleanup(adapter); 532 ibmveth_cleanup(adapter);
533 return rc; 533 return rc;
@@ -556,9 +556,9 @@ static int ibmveth_close(struct net_device *netdev)
556 556
557 do { 557 do {
558 lpar_rc = h_free_logical_lan(adapter->vdev->unit_address); 558 lpar_rc = h_free_logical_lan(adapter->vdev->unit_address);
559 } while (H_isLongBusy(lpar_rc) || (lpar_rc == H_Busy)); 559 } while (H_IS_LONG_BUSY(lpar_rc) || (lpar_rc == H_BUSY));
560 560
561 if(lpar_rc != H_Success) 561 if(lpar_rc != H_SUCCESS)
562 { 562 {
563 ibmveth_error_printk("h_free_logical_lan failed with %lx, continuing with close\n", 563 ibmveth_error_printk("h_free_logical_lan failed with %lx, continuing with close\n",
564 lpar_rc); 564 lpar_rc);
@@ -693,9 +693,9 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev)
693 desc[4].desc, 693 desc[4].desc,
694 desc[5].desc, 694 desc[5].desc,
695 correlator); 695 correlator);
696 } while ((lpar_rc == H_Busy) && (retry_count--)); 696 } while ((lpar_rc == H_BUSY) && (retry_count--));
697 697
698 if(lpar_rc != H_Success && lpar_rc != H_Dropped) { 698 if(lpar_rc != H_SUCCESS && lpar_rc != H_DROPPED) {
699 int i; 699 int i;
700 ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc); 700 ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc);
701 for(i = 0; i < 6; i++) { 701 for(i = 0; i < 6; i++) {
@@ -786,14 +786,14 @@ static int ibmveth_poll(struct net_device *netdev, int *budget)
786 /* we think we are done - reenable interrupts, then check once more to make sure we are done */ 786 /* we think we are done - reenable interrupts, then check once more to make sure we are done */
787 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_ENABLE); 787 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_ENABLE);
788 788
789 ibmveth_assert(lpar_rc == H_Success); 789 ibmveth_assert(lpar_rc == H_SUCCESS);
790 790
791 netif_rx_complete(netdev); 791 netif_rx_complete(netdev);
792 792
793 if(ibmveth_rxq_pending_buffer(adapter) && netif_rx_reschedule(netdev, frames_processed)) 793 if(ibmveth_rxq_pending_buffer(adapter) && netif_rx_reschedule(netdev, frames_processed))
794 { 794 {
795 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); 795 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE);
796 ibmveth_assert(lpar_rc == H_Success); 796 ibmveth_assert(lpar_rc == H_SUCCESS);
797 more_work = 1; 797 more_work = 1;
798 goto restart_poll; 798 goto restart_poll;
799 } 799 }
@@ -813,7 +813,7 @@ static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance, struct pt_regs
813 813
814 if(netif_rx_schedule_prep(netdev)) { 814 if(netif_rx_schedule_prep(netdev)) {
815 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); 815 lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE);
816 ibmveth_assert(lpar_rc == H_Success); 816 ibmveth_assert(lpar_rc == H_SUCCESS);
817 __netif_rx_schedule(netdev); 817 __netif_rx_schedule(netdev);
818 } 818 }
819 return IRQ_HANDLED; 819 return IRQ_HANDLED;
@@ -835,7 +835,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
835 IbmVethMcastEnableRecv | 835 IbmVethMcastEnableRecv |
836 IbmVethMcastDisableFiltering, 836 IbmVethMcastDisableFiltering,
837 0); 837 0);
838 if(lpar_rc != H_Success) { 838 if(lpar_rc != H_SUCCESS) {
839 ibmveth_error_printk("h_multicast_ctrl rc=%ld when entering promisc mode\n", lpar_rc); 839 ibmveth_error_printk("h_multicast_ctrl rc=%ld when entering promisc mode\n", lpar_rc);
840 } 840 }
841 } else { 841 } else {
@@ -847,7 +847,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
847 IbmVethMcastDisableFiltering | 847 IbmVethMcastDisableFiltering |
848 IbmVethMcastClearFilterTable, 848 IbmVethMcastClearFilterTable,
849 0); 849 0);
850 if(lpar_rc != H_Success) { 850 if(lpar_rc != H_SUCCESS) {
851 ibmveth_error_printk("h_multicast_ctrl rc=%ld when attempting to clear filter table\n", lpar_rc); 851 ibmveth_error_printk("h_multicast_ctrl rc=%ld when attempting to clear filter table\n", lpar_rc);
852 } 852 }
853 /* add the addresses to the filter table */ 853 /* add the addresses to the filter table */
@@ -858,7 +858,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
858 lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, 858 lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
859 IbmVethMcastAddFilter, 859 IbmVethMcastAddFilter,
860 mcast_addr); 860 mcast_addr);
861 if(lpar_rc != H_Success) { 861 if(lpar_rc != H_SUCCESS) {
862 ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc); 862 ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc);
863 } 863 }
864 } 864 }
@@ -867,7 +867,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
867 lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, 867 lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
868 IbmVethMcastEnableFiltering, 868 IbmVethMcastEnableFiltering,
869 0); 869 0);
870 if(lpar_rc != H_Success) { 870 if(lpar_rc != H_SUCCESS) {
871 ibmveth_error_printk("h_multicast_ctrl rc=%ld when enabling filtering\n", lpar_rc); 871 ibmveth_error_printk("h_multicast_ctrl rc=%ld when enabling filtering\n", lpar_rc);
872 } 872 }
873 } 873 }
diff --git a/drivers/scsi/ibmvscsi/rpa_vscsi.c b/drivers/scsi/ibmvscsi/rpa_vscsi.c
index f47dd87c05e7..892e8ed63091 100644
--- a/drivers/scsi/ibmvscsi/rpa_vscsi.c
+++ b/drivers/scsi/ibmvscsi/rpa_vscsi.c
@@ -80,7 +80,7 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue,
80 tasklet_kill(&hostdata->srp_task); 80 tasklet_kill(&hostdata->srp_task);
81 do { 81 do {
82 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); 82 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
83 } while ((rc == H_Busy) || (H_isLongBusy(rc))); 83 } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
84 dma_unmap_single(hostdata->dev, 84 dma_unmap_single(hostdata->dev,
85 queue->msg_token, 85 queue->msg_token,
86 queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL); 86 queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL);
@@ -230,7 +230,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
230 rc = plpar_hcall_norets(H_REG_CRQ, 230 rc = plpar_hcall_norets(H_REG_CRQ,
231 vdev->unit_address, 231 vdev->unit_address,
232 queue->msg_token, PAGE_SIZE); 232 queue->msg_token, PAGE_SIZE);
233 if (rc == H_Resource) 233 if (rc == H_RESOURCE)
234 /* maybe kexecing and resource is busy. try a reset */ 234 /* maybe kexecing and resource is busy. try a reset */
235 rc = ibmvscsi_reset_crq_queue(queue, 235 rc = ibmvscsi_reset_crq_queue(queue,
236 hostdata); 236 hostdata);
@@ -269,7 +269,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
269 req_irq_failed: 269 req_irq_failed:
270 do { 270 do {
271 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); 271 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
272 } while ((rc == H_Busy) || (H_isLongBusy(rc))); 272 } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
273 reg_crq_failed: 273 reg_crq_failed:
274 dma_unmap_single(hostdata->dev, 274 dma_unmap_single(hostdata->dev,
275 queue->msg_token, 275 queue->msg_token,
@@ -295,7 +295,7 @@ int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
295 /* Re-enable the CRQ */ 295 /* Re-enable the CRQ */
296 do { 296 do {
297 rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address); 297 rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address);
298 } while ((rc == H_InProgress) || (rc == H_Busy) || (H_isLongBusy(rc))); 298 } while ((rc == H_IN_PROGRESS) || (rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
299 299
300 if (rc) 300 if (rc)
301 printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc); 301 printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc);
@@ -317,7 +317,7 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue,
317 /* Close the CRQ */ 317 /* Close the CRQ */
318 do { 318 do {
319 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); 319 rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
320 } while ((rc == H_Busy) || (H_isLongBusy(rc))); 320 } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc)));
321 321
322 /* Clean out the queue */ 322 /* Clean out the queue */
323 memset(queue->msgs, 0x00, PAGE_SIZE); 323 memset(queue->msgs, 0x00, PAGE_SIZE);
diff --git a/include/asm-powerpc/eeh.h b/include/asm-powerpc/eeh.h
index 5207758a6dd9..868c7139dbff 100644
--- a/include/asm-powerpc/eeh.h
+++ b/include/asm-powerpc/eeh.h
@@ -60,24 +60,10 @@ void __init pci_addr_cache_build(void);
60 * device (including config space i/o). Call eeh_add_device_late 60 * device (including config space i/o). Call eeh_add_device_late
61 * to finish the eeh setup for this device. 61 * to finish the eeh setup for this device.
62 */ 62 */
63void eeh_add_device_early(struct device_node *);
64void eeh_add_device_late(struct pci_dev *dev);
65void eeh_add_device_tree_early(struct device_node *); 63void eeh_add_device_tree_early(struct device_node *);
66void eeh_add_device_tree_late(struct pci_bus *); 64void eeh_add_device_tree_late(struct pci_bus *);
67 65
68/** 66/**
69 * eeh_remove_device - undo EEH setup for the indicated pci device
70 * @dev: pci device to be removed
71 *
72 * This routine should be called when a device is removed from
73 * a running system (e.g. by hotplug or dlpar). It unregisters
74 * the PCI device from the EEH subsystem. I/O errors affecting
75 * this device will no longer be detected after this call; thus,
76 * i/o errors affecting this slot may leave this device unusable.
77 */
78void eeh_remove_device(struct pci_dev *);
79
80/**
81 * eeh_remove_device_recursive - undo EEH for device & children. 67 * eeh_remove_device_recursive - undo EEH for device & children.
82 * @dev: pci device to be removed 68 * @dev: pci device to be removed
83 * 69 *
@@ -116,12 +102,6 @@ static inline int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *d
116 102
117static inline void pci_addr_cache_build(void) { } 103static inline void pci_addr_cache_build(void) { }
118 104
119static inline void eeh_add_device_early(struct device_node *dn) { }
120
121static inline void eeh_add_device_late(struct pci_dev *dev) { }
122
123static inline void eeh_remove_device(struct pci_dev *dev) { }
124
125static inline void eeh_add_device_tree_early(struct device_node *dn) { } 105static inline void eeh_add_device_tree_early(struct device_node *dn) { }
126 106
127static inline void eeh_add_device_tree_late(struct pci_bus *bus) { } 107static inline void eeh_add_device_tree_late(struct pci_bus *bus) { }
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h
index b72c04f3f551..6cc7e1fb7bfd 100644
--- a/include/asm-powerpc/hvcall.h
+++ b/include/asm-powerpc/hvcall.h
@@ -4,47 +4,88 @@
4 4
5#define HVSC .long 0x44000022 5#define HVSC .long 0x44000022
6 6
7#define H_Success 0 7#define H_SUCCESS 0
8#define H_Busy 1 /* Hardware busy -- retry later */ 8#define H_BUSY 1 /* Hardware busy -- retry later */
9#define H_Closed 2 /* Resource closed */ 9#define H_CLOSED 2 /* Resource closed */
10#define H_Constrained 4 /* Resource request constrained to max allowed */ 10#define H_NOT_AVAILABLE 3
11#define H_InProgress 14 /* Kind of like busy */ 11#define H_CONSTRAINED 4 /* Resource request constrained to max allowed */
12#define H_Pending 17 /* returned from H_POLL_PENDING */ 12#define H_PARTIAL 5
13#define H_Continue 18 /* Returned from H_Join on success */ 13#define H_IN_PROGRESS 14 /* Kind of like busy */
14#define H_LongBusyStartRange 9900 /* Start of long busy range */ 14#define H_PAGE_REGISTERED 15
15#define H_LongBusyOrder1msec 9900 /* Long busy, hint that 1msec is a good time to retry */ 15#define H_PARTIAL_STORE 16
16#define H_LongBusyOrder10msec 9901 /* Long busy, hint that 10msec is a good time to retry */ 16#define H_PENDING 17 /* returned from H_POLL_PENDING */
17#define H_LongBusyOrder100msec 9902 /* Long busy, hint that 100msec is a good time to retry */ 17#define H_CONTINUE 18 /* Returned from H_Join on success */
18#define H_LongBusyOrder1sec 9903 /* Long busy, hint that 1sec is a good time to retry */ 18#define H_LONG_BUSY_START_RANGE 9900 /* Start of long busy range */
19#define H_LongBusyOrder10sec 9904 /* Long busy, hint that 10sec is a good time to retry */ 19#define H_LONG_BUSY_ORDER_1_MSEC 9900 /* Long busy, hint that 1msec \
20#define H_LongBusyOrder100sec 9905 /* Long busy, hint that 100sec is a good time to retry */ 20 is a good time to retry */
21#define H_LongBusyEndRange 9905 /* End of long busy range */ 21#define H_LONG_BUSY_ORDER_10_MSEC 9901 /* Long busy, hint that 10msec \
22#define H_Hardware -1 /* Hardware error */ 22 is a good time to retry */
23#define H_Function -2 /* Function not supported */ 23#define H_LONG_BUSY_ORDER_100_MSEC 9902 /* Long busy, hint that 100msec \
24#define H_Privilege -3 /* Caller not privileged */ 24 is a good time to retry */
25#define H_Parameter -4 /* Parameter invalid, out-of-range or conflicting */ 25#define H_LONG_BUSY_ORDER_1_SEC 9903 /* Long busy, hint that 1sec \
26#define H_Bad_Mode -5 /* Illegal msr value */ 26 is a good time to retry */
27#define H_PTEG_Full -6 /* PTEG is full */ 27#define H_LONG_BUSY_ORDER_10_SEC 9904 /* Long busy, hint that 10sec \
28#define H_Not_Found -7 /* PTE was not found" */ 28 is a good time to retry */
29#define H_Reserved_DABR -8 /* DABR address is reserved by the hypervisor on this processor" */ 29#define H_LONG_BUSY_ORDER_100_SEC 9905 /* Long busy, hint that 100sec \
30#define H_NoMem -9 30 is a good time to retry */
31#define H_Authority -10 31#define H_LONG_BUSY_END_RANGE 9905 /* End of long busy range */
32#define H_Permission -11 32#define H_HARDWARE -1 /* Hardware error */
33#define H_Dropped -12 33#define H_FUNCTION -2 /* Function not supported */
34#define H_SourceParm -13 34#define H_PRIVILEGE -3 /* Caller not privileged */
35#define H_DestParm -14 35#define H_PARAMETER -4 /* Parameter invalid, out-of-range or conflicting */
36#define H_RemoteParm -15 36#define H_BAD_MODE -5 /* Illegal msr value */
37#define H_Resource -16 37#define H_PTEG_FULL -6 /* PTEG is full */
38#define H_NOT_FOUND -7 /* PTE was not found" */
39#define H_RESERVED_DABR -8 /* DABR address is reserved by the hypervisor on this processor" */
40#define H_NO_MEM -9
41#define H_AUTHORITY -10
42#define H_PERMISSION -11
43#define H_DROPPED -12
44#define H_SOURCE_PARM -13
45#define H_DEST_PARM -14
46#define H_REMOTE_PARM -15
47#define H_RESOURCE -16
48#define H_ADAPTER_PARM -17
49#define H_RH_PARM -18
50#define H_RCQ_PARM -19
51#define H_SCQ_PARM -20
52#define H_EQ_PARM -21
53#define H_RT_PARM -22
54#define H_ST_PARM -23
55#define H_SIGT_PARM -24
56#define H_TOKEN_PARM -25
57#define H_MLENGTH_PARM -27
58#define H_MEM_PARM -28
59#define H_MEM_ACCESS_PARM -29
60#define H_ATTR_PARM -30
61#define H_PORT_PARM -31
62#define H_MCG_PARM -32
63#define H_VL_PARM -33
64#define H_TSIZE_PARM -34
65#define H_TRACE_PARM -35
66
67#define H_MASK_PARM -37
68#define H_MCG_FULL -38
69#define H_ALIAS_EXIST -39
70#define H_P_COUNTER -40
71#define H_TABLE_FULL -41
72#define H_ALT_TABLE -42
73#define H_MR_CONDITION -43
74#define H_NOT_ENOUGH_RESOURCES -44
75#define H_R_STATE -45
76#define H_RESCINDEND -46
77
38 78
39/* Long Busy is a condition that can be returned by the firmware 79/* Long Busy is a condition that can be returned by the firmware
40 * when a call cannot be completed now, but the identical call 80 * when a call cannot be completed now, but the identical call
41 * should be retried later. This prevents calls blocking in the 81 * should be retried later. This prevents calls blocking in the
42 * firmware for long periods of time. Annoyingly the firmware can return 82 * firmware for long periods of time. Annoyingly the firmware can return
43 * a range of return codes, hinting at how long we should wait before 83 * a range of return codes, hinting at how long we should wait before
44 * retrying. If you don't care for the hint, the macro below is a good 84 * retrying. If you don't care for the hint, the macro below is a good
45 * way to check for the long_busy return codes 85 * way to check for the long_busy return codes
46 */ 86 */
47#define H_isLongBusy(x) ((x >= H_LongBusyStartRange) && (x <= H_LongBusyEndRange)) 87#define H_IS_LONG_BUSY(x) ((x >= H_LONG_BUSY_START_RANGE) \
88 && (x <= H_LONG_BUSY_END_RANGE))
48 89
49/* Flags */ 90/* Flags */
50#define H_LARGE_PAGE (1UL<<(63-16)) 91#define H_LARGE_PAGE (1UL<<(63-16))
@@ -66,6 +107,9 @@
66#define H_DABRX_KERNEL (1UL<<(63-62)) 107#define H_DABRX_KERNEL (1UL<<(63-62))
67#define H_DABRX_USER (1UL<<(63-63)) 108#define H_DABRX_USER (1UL<<(63-63))
68 109
110/* Each control block has to be on a 4K bondary */
111#define H_CB_ALIGNMENT 4096
112
69/* pSeries hypervisor opcodes */ 113/* pSeries hypervisor opcodes */
70#define H_REMOVE 0x04 114#define H_REMOVE 0x04
71#define H_ENTER 0x08 115#define H_ENTER 0x08
@@ -99,25 +143,52 @@
99#define H_PERFMON 0x7c 143#define H_PERFMON 0x7c
100#define H_MIGRATE_DMA 0x78 144#define H_MIGRATE_DMA 0x78
101#define H_REGISTER_VPA 0xDC 145#define H_REGISTER_VPA 0xDC
102#define H_CEDE 0xE0 146#define H_CEDE 0xE0
103#define H_CONFER 0xE4 147#define H_CONFER 0xE4
104#define H_PROD 0xE8 148#define H_PROD 0xE8
105#define H_GET_PPP 0xEC 149#define H_GET_PPP 0xEC
106#define H_SET_PPP 0xF0 150#define H_SET_PPP 0xF0
107#define H_PURR 0xF4 151#define H_PURR 0xF4
108#define H_PIC 0xF8 152#define H_PIC 0xF8
109#define H_REG_CRQ 0xFC 153#define H_REG_CRQ 0xFC
110#define H_FREE_CRQ 0x100 154#define H_FREE_CRQ 0x100
111#define H_VIO_SIGNAL 0x104 155#define H_VIO_SIGNAL 0x104
112#define H_SEND_CRQ 0x108 156#define H_SEND_CRQ 0x108
113#define H_COPY_RDMA 0x110 157#define H_COPY_RDMA 0x110
114#define H_SET_XDABR 0x134 158#define H_SET_XDABR 0x134
115#define H_STUFF_TCE 0x138 159#define H_STUFF_TCE 0x138
116#define H_PUT_TCE_INDIRECT 0x13C 160#define H_PUT_TCE_INDIRECT 0x13C
117#define H_VTERM_PARTNER_INFO 0x150 161#define H_VTERM_PARTNER_INFO 0x150
118#define H_REGISTER_VTERM 0x154 162#define H_REGISTER_VTERM 0x154
119#define H_FREE_VTERM 0x158 163#define H_FREE_VTERM 0x158
120#define H_POLL_PENDING 0x1D8 164#define H_RESET_EVENTS 0x15C
165#define H_ALLOC_RESOURCE 0x160
166#define H_FREE_RESOURCE 0x164
167#define H_MODIFY_QP 0x168
168#define H_QUERY_QP 0x16C
169#define H_REREGISTER_PMR 0x170
170#define H_REGISTER_SMR 0x174
171#define H_QUERY_MR 0x178
172#define H_QUERY_MW 0x17C
173#define H_QUERY_HCA 0x180
174#define H_QUERY_PORT 0x184
175#define H_MODIFY_PORT 0x188
176#define H_DEFINE_AQP1 0x18C
177#define H_GET_TRACE_BUFFER 0x190
178#define H_DEFINE_AQP0 0x194
179#define H_RESIZE_MR 0x198
180#define H_ATTACH_MCQP 0x19C
181#define H_DETACH_MCQP 0x1A0
182#define H_CREATE_RPT 0x1A4
183#define H_REMOVE_RPT 0x1A8
184#define H_REGISTER_RPAGES 0x1AC
185#define H_DISABLE_AND_GETC 0x1B0
186#define H_ERROR_DATA 0x1B4
187#define H_GET_HCA_INFO 0x1B8
188#define H_GET_PERF_COUNT 0x1BC
189#define H_MANAGE_TRACE 0x1C0
190#define H_QUERY_INT_STATE 0x1E4
191#define H_POLL_PENDING 0x1D8
121#define H_JOIN 0x298 192#define H_JOIN 0x298
122#define H_ENABLE_CRQ 0x2B0 193#define H_ENABLE_CRQ 0x2B0
123 194
@@ -152,7 +223,7 @@ long plpar_hcall_norets(unsigned long opcode, ...);
152 */ 223 */
153long plpar_hcall_8arg_2ret(unsigned long opcode, 224long plpar_hcall_8arg_2ret(unsigned long opcode,
154 unsigned long arg1, 225 unsigned long arg1,
155 unsigned long arg2, 226 unsigned long arg2,
156 unsigned long arg3, 227 unsigned long arg3,
157 unsigned long arg4, 228 unsigned long arg4,
158 unsigned long arg5, 229 unsigned long arg5,
@@ -176,6 +247,42 @@ long plpar_hcall_4out(unsigned long opcode,
176 unsigned long *out3, 247 unsigned long *out3,
177 unsigned long *out4); 248 unsigned long *out4);
178 249
250long plpar_hcall_7arg_7ret(unsigned long opcode,
251 unsigned long arg1,
252 unsigned long arg2,
253 unsigned long arg3,
254 unsigned long arg4,
255 unsigned long arg5,
256 unsigned long arg6,
257 unsigned long arg7,
258 unsigned long *out1,
259 unsigned long *out2,
260 unsigned long *out3,
261 unsigned long *out4,
262 unsigned long *out5,
263 unsigned long *out6,
264 unsigned long *out7);
265
266long plpar_hcall_9arg_9ret(unsigned long opcode,
267 unsigned long arg1,
268 unsigned long arg2,
269 unsigned long arg3,
270 unsigned long arg4,
271 unsigned long arg5,
272 unsigned long arg6,
273 unsigned long arg7,
274 unsigned long arg8,
275 unsigned long arg9,
276 unsigned long *out1,
277 unsigned long *out2,
278 unsigned long *out3,
279 unsigned long *out4,
280 unsigned long *out5,
281 unsigned long *out6,
282 unsigned long *out7,
283 unsigned long *out8,
284 unsigned long *out9);
285
179#endif /* __ASSEMBLY__ */ 286#endif /* __ASSEMBLY__ */
180#endif /* __KERNEL__ */ 287#endif /* __KERNEL__ */
181#endif /* _ASM_POWERPC_HVCALL_H */ 288#endif /* _ASM_POWERPC_HVCALL_H */