Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
Pull a few more things for powerpc by Benjamin Herrenschmidt: - Anton's did some recent improvements to EPOW event reporting on pSeries (power supply failures and such). The patches are self contained enough and replace really nasty code so I felt it should still go in - I did the vio driver registration change Greg requested, I don't see the point of leaving that til the next merge window - The remaining EEH changes I said were still pending to get rid of the EEH references from the generic struct device_node - A few more iSeries removal bits - A perf bug fix on 970 * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: powerpc/perf: Fix instruction address sampling on 970 and Power4 powerpc+sparc/vio: Modernize driver registration powerpc: Random little legacy iSeries removal tidy ups powerpc: Remove NO_IRQ_IGNORE powerpc/pseries: Cut down on enthusiastic use of defines in RAS code powerpc/pseries: Clean up ras_error_interrupt code powerpc/pseries: Remove RTAS_POWERMGM_EVENTS powerpc/pseries: Use rtas_get_sensor in RAS code powerpc/pseries: Parse and handle EPOW interrupts powerpc: Make function that parses RTAS error logs global powerpc/eeh: Retrieve PHB from global list powerpc/eeh: Remove eeh information from pci_dn powerpc/eeh: Remove eeh device from OF node
This commit is contained in:
@ -208,8 +208,8 @@ notrace void arch_local_irq_restore(unsigned long en)
|
||||
* we are checking the "new" CPU instead of the old one. This
|
||||
* is only a problem if an event happened on the "old" CPU.
|
||||
*
|
||||
* External interrupt events on non-iseries will have caused
|
||||
* interrupts to be hard-disabled, so there is no problem, we
|
||||
* External interrupt events will have caused interrupts to
|
||||
* be hard-disabled, so there is no problem, we
|
||||
* cannot have preempted.
|
||||
*/
|
||||
irq_happened = get_irq_happened();
|
||||
@ -445,9 +445,9 @@ void do_IRQ(struct pt_regs *regs)
|
||||
may_hard_irq_enable();
|
||||
|
||||
/* And finally process it */
|
||||
if (irq != NO_IRQ && irq != NO_IRQ_IGNORE)
|
||||
if (irq != NO_IRQ)
|
||||
handle_one_irq(irq);
|
||||
else if (irq != NO_IRQ_IGNORE)
|
||||
else
|
||||
__get_cpu_var(irq_stat).spurious_irqs++;
|
||||
|
||||
irq_exit();
|
||||
|
@ -447,7 +447,7 @@ static void __init __attribute__((noreturn)) prom_panic(const char *reason)
|
||||
if (RELOC(of_platform) == PLATFORM_POWERMAC)
|
||||
asm("trap\n");
|
||||
|
||||
/* ToDo: should put up an SRC here on p/iSeries */
|
||||
/* ToDo: should put up an SRC here on pSeries */
|
||||
call_prom("exit", 0, 0);
|
||||
|
||||
for (;;) /* should never get here */
|
||||
|
@ -868,6 +868,40 @@ int rtas_ibm_suspend_me(struct rtas_args *args)
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Find a specific pseries error log in an RTAS extended event log.
|
||||
* @log: RTAS error/event log
|
||||
* @section_id: two character section identifier
|
||||
*
|
||||
* Returns a pointer to the specified errorlog or NULL if not found.
|
||||
*/
|
||||
struct pseries_errorlog *get_pseries_errorlog(struct rtas_error_log *log,
|
||||
uint16_t section_id)
|
||||
{
|
||||
struct rtas_ext_event_log_v6 *ext_log =
|
||||
(struct rtas_ext_event_log_v6 *)log->buffer;
|
||||
struct pseries_errorlog *sect;
|
||||
unsigned char *p, *log_end;
|
||||
|
||||
/* Check that we understand the format */
|
||||
if (log->extended_log_length < sizeof(struct rtas_ext_event_log_v6) ||
|
||||
ext_log->log_format != RTAS_V6EXT_LOG_FORMAT_EVENT_LOG ||
|
||||
ext_log->company_id != RTAS_V6EXT_COMPANY_ID_IBM)
|
||||
return NULL;
|
||||
|
||||
log_end = log->buffer + log->extended_log_length;
|
||||
p = ext_log->vendor_log;
|
||||
|
||||
while (p < log_end) {
|
||||
sect = (struct pseries_errorlog *)p;
|
||||
if (sect->id == section_id)
|
||||
return sect;
|
||||
p += sect->length;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
asmlinkage int ppc_rtas(struct rtas_args __user *uargs)
|
||||
{
|
||||
struct rtas_args args;
|
||||
|
@ -46,9 +46,6 @@ void __init udbg_early_init(void)
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_MAPLE)
|
||||
/* Maple real mode debug */
|
||||
udbg_init_maple_realmode();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES)
|
||||
/* For iSeries - hit Ctrl-x Ctrl-x to see the output */
|
||||
udbg_init_iseries();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_BEAT)
|
||||
udbg_init_debug_beat();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE)
|
||||
|
@ -721,10 +721,10 @@ static int __init vdso_init(void)
|
||||
vdso_data->version.minor = SYSTEMCFG_MINOR;
|
||||
vdso_data->processor = mfspr(SPRN_PVR);
|
||||
/*
|
||||
* Fake the old platform number for pSeries and iSeries and add
|
||||
* Fake the old platform number for pSeries and add
|
||||
* in LPAR bit if necessary
|
||||
*/
|
||||
vdso_data->platform = machine_is(iseries) ? 0x200 : 0x100;
|
||||
vdso_data->platform = 0x100;
|
||||
if (firmware_has_feature(FW_FEATURE_LPAR))
|
||||
vdso_data->platform |= 1;
|
||||
vdso_data->physicalMemorySize = memblock_phys_mem_size();
|
||||
|
@ -1159,17 +1159,21 @@ static int vio_bus_remove(struct device *dev)
|
||||
* vio_register_driver: - Register a new vio driver
|
||||
* @drv: The vio_driver structure to be registered.
|
||||
*/
|
||||
int vio_register_driver(struct vio_driver *viodrv)
|
||||
int __vio_register_driver(struct vio_driver *viodrv, struct module *owner,
|
||||
const char *mod_name)
|
||||
{
|
||||
printk(KERN_DEBUG "%s: driver %s registering\n", __func__,
|
||||
viodrv->driver.name);
|
||||
pr_debug("%s: driver %s registering\n", __func__, viodrv->name);
|
||||
|
||||
/* fill in 'struct driver' fields */
|
||||
viodrv->driver.name = viodrv->name;
|
||||
viodrv->driver.pm = viodrv->pm;
|
||||
viodrv->driver.bus = &vio_bus_type;
|
||||
viodrv->driver.owner = owner;
|
||||
viodrv->driver.mod_name = mod_name;
|
||||
|
||||
return driver_register(&viodrv->driver);
|
||||
}
|
||||
EXPORT_SYMBOL(vio_register_driver);
|
||||
EXPORT_SYMBOL(__vio_register_driver);
|
||||
|
||||
/**
|
||||
* vio_unregister_driver - Remove registration of vio driver.
|
||||
|
Reference in New Issue
Block a user