Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
This commit is contained in:
commit
ea3c4b126a
20 changed files with 137 additions and 37 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/sal.h>
|
#include <asm/sal.h>
|
||||||
|
#include <asm/hpsim.h>
|
||||||
|
|
||||||
#include "hpsim_ssc.h"
|
#include "hpsim_ssc.h"
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ static int simcons_init (struct console *, char *);
|
||||||
static void simcons_write (struct console *, const char *, unsigned);
|
static void simcons_write (struct console *, const char *, unsigned);
|
||||||
static struct tty_driver *simcons_console_device (struct console *, int *);
|
static struct tty_driver *simcons_console_device (struct console *, int *);
|
||||||
|
|
||||||
struct console hpsim_cons = {
|
static struct console hpsim_cons = {
|
||||||
.name = "simcons",
|
.name = "simcons",
|
||||||
.write = simcons_write,
|
.write = simcons_write,
|
||||||
.device = simcons_console_device,
|
.device = simcons_console_device,
|
||||||
|
@ -58,7 +59,18 @@ simcons_write (struct console *cons, const char *buf, unsigned count)
|
||||||
|
|
||||||
static struct tty_driver *simcons_console_device (struct console *c, int *index)
|
static struct tty_driver *simcons_console_device (struct console *c, int *index)
|
||||||
{
|
{
|
||||||
extern struct tty_driver *hp_simserial_driver;
|
|
||||||
*index = c->index;
|
*index = c->index;
|
||||||
return hp_simserial_driver;
|
return hp_simserial_driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int simcons_register(void)
|
||||||
|
{
|
||||||
|
if (!ia64_platform_is("hpsim"))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (hpsim_cons.flags & CON_ENABLED)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
register_console(&hpsim_cons);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/sal.h>
|
#include <asm/sal.h>
|
||||||
|
#include <asm/hpsim.h>
|
||||||
|
|
||||||
#include "hpsim_ssc.h"
|
#include "hpsim_ssc.h"
|
||||||
|
|
||||||
|
@ -41,11 +42,5 @@ hpsim_setup (char **cmdline_p)
|
||||||
{
|
{
|
||||||
ROOT_DEV = Root_SDA1; /* default to first SCSI drive */
|
ROOT_DEV = Root_SDA1; /* default to first SCSI drive */
|
||||||
|
|
||||||
#ifdef CONFIG_HP_SIMSERIAL_CONSOLE
|
simcons_register();
|
||||||
{
|
|
||||||
extern struct console hpsim_cons;
|
|
||||||
if (ia64_platform_is("hpsim"))
|
|
||||||
register_console(&hpsim_cons);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
#include <asm/hpsim.h>
|
||||||
|
|
||||||
|
#include "hpsim_ssc.h"
|
||||||
|
|
||||||
#define SIMETH_RECV_MAX 10
|
#define SIMETH_RECV_MAX 10
|
||||||
|
|
||||||
|
@ -35,12 +38,6 @@
|
||||||
#define SIMETH_FRAME_SIZE ETH_FRAME_LEN
|
#define SIMETH_FRAME_SIZE ETH_FRAME_LEN
|
||||||
|
|
||||||
|
|
||||||
#define SSC_NETDEV_PROBE 100
|
|
||||||
#define SSC_NETDEV_SEND 101
|
|
||||||
#define SSC_NETDEV_RECV 102
|
|
||||||
#define SSC_NETDEV_ATTACH 103
|
|
||||||
#define SSC_NETDEV_DETACH 104
|
|
||||||
|
|
||||||
#define NETWORK_INTR 8
|
#define NETWORK_INTR 8
|
||||||
|
|
||||||
struct simeth_local {
|
struct simeth_local {
|
||||||
|
@ -124,9 +121,6 @@ simeth_probe (void)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern long ia64_ssc (long, long, long, long, int);
|
|
||||||
extern void ia64_ssc_connect_irq (long intr, long irq);
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
netdev_probe(char *name, unsigned char *ether)
|
netdev_probe(char *name, unsigned char *ether)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
#include "hpsim_ssc.h"
|
||||||
|
|
||||||
#include <scsi/scsi.h>
|
#include <scsi/scsi.h>
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
|
@ -59,8 +60,6 @@ struct disk_stat {
|
||||||
unsigned count;
|
unsigned count;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
|
|
||||||
|
|
||||||
static int desc[16] = {
|
static int desc[16] = {
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||||
};
|
};
|
||||||
|
|
|
@ -82,7 +82,7 @@ struct irq_cfg irq_cfg[NR_IRQS] __read_mostly = {
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_PER_CPU(int[IA64_NUM_VECTORS], vector_irq) = {
|
DEFINE_PER_CPU(int[IA64_NUM_VECTORS], vector_irq) = {
|
||||||
[0 ... IA64_NUM_VECTORS - 1] = IA64_SPURIOUS_INT_VECTOR
|
[0 ... IA64_NUM_VECTORS - 1] = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
static cpumask_t vector_table[IA64_NUM_VECTORS] = {
|
static cpumask_t vector_table[IA64_NUM_VECTORS] = {
|
||||||
|
@ -179,7 +179,7 @@ static void __clear_irq_vector(int irq)
|
||||||
domain = cfg->domain;
|
domain = cfg->domain;
|
||||||
cpus_and(mask, cfg->domain, cpu_online_map);
|
cpus_and(mask, cfg->domain, cpu_online_map);
|
||||||
for_each_cpu_mask(cpu, mask)
|
for_each_cpu_mask(cpu, mask)
|
||||||
per_cpu(vector_irq, cpu)[vector] = IA64_SPURIOUS_INT_VECTOR;
|
per_cpu(vector_irq, cpu)[vector] = -1;
|
||||||
cfg->vector = IRQ_VECTOR_UNASSIGNED;
|
cfg->vector = IRQ_VECTOR_UNASSIGNED;
|
||||||
cfg->domain = CPU_MASK_NONE;
|
cfg->domain = CPU_MASK_NONE;
|
||||||
irq_status[irq] = IRQ_UNUSED;
|
irq_status[irq] = IRQ_UNUSED;
|
||||||
|
@ -249,7 +249,7 @@ void __setup_vector_irq(int cpu)
|
||||||
|
|
||||||
/* Clear vector_irq */
|
/* Clear vector_irq */
|
||||||
for (vector = 0; vector < IA64_NUM_VECTORS; ++vector)
|
for (vector = 0; vector < IA64_NUM_VECTORS; ++vector)
|
||||||
per_cpu(vector_irq, cpu)[vector] = IA64_SPURIOUS_INT_VECTOR;
|
per_cpu(vector_irq, cpu)[vector] = -1;
|
||||||
/* Mark the inuse vectors */
|
/* Mark the inuse vectors */
|
||||||
for (irq = 0; irq < NR_IRQS; ++irq) {
|
for (irq = 0; irq < NR_IRQS; ++irq) {
|
||||||
if (!cpu_isset(cpu, irq_cfg[irq].domain))
|
if (!cpu_isset(cpu, irq_cfg[irq].domain))
|
||||||
|
@ -432,10 +432,18 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
|
||||||
} else if (unlikely(IS_RESCHEDULE(vector)))
|
} else if (unlikely(IS_RESCHEDULE(vector)))
|
||||||
kstat_this_cpu.irqs[vector]++;
|
kstat_this_cpu.irqs[vector]++;
|
||||||
else {
|
else {
|
||||||
|
int irq = local_vector_to_irq(vector);
|
||||||
|
|
||||||
ia64_setreg(_IA64_REG_CR_TPR, vector);
|
ia64_setreg(_IA64_REG_CR_TPR, vector);
|
||||||
ia64_srlz_d();
|
ia64_srlz_d();
|
||||||
|
|
||||||
generic_handle_irq(local_vector_to_irq(vector));
|
if (unlikely(irq < 0)) {
|
||||||
|
printk(KERN_ERR "%s: Unexpected interrupt "
|
||||||
|
"vector %d on CPU %d is not mapped "
|
||||||
|
"to any IRQ!\n", __FUNCTION__, vector,
|
||||||
|
smp_processor_id());
|
||||||
|
} else
|
||||||
|
generic_handle_irq(irq);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable interrupts and send EOI:
|
* Disable interrupts and send EOI:
|
||||||
|
@ -483,6 +491,7 @@ void ia64_process_pending_intr(void)
|
||||||
kstat_this_cpu.irqs[vector]++;
|
kstat_this_cpu.irqs[vector]++;
|
||||||
else {
|
else {
|
||||||
struct pt_regs *old_regs = set_irq_regs(NULL);
|
struct pt_regs *old_regs = set_irq_regs(NULL);
|
||||||
|
int irq = local_vector_to_irq(vector);
|
||||||
|
|
||||||
ia64_setreg(_IA64_REG_CR_TPR, vector);
|
ia64_setreg(_IA64_REG_CR_TPR, vector);
|
||||||
ia64_srlz_d();
|
ia64_srlz_d();
|
||||||
|
@ -493,8 +502,15 @@ void ia64_process_pending_intr(void)
|
||||||
* it will work. I hope it works!.
|
* it will work. I hope it works!.
|
||||||
* Probably could shared code.
|
* Probably could shared code.
|
||||||
*/
|
*/
|
||||||
vectors_in_migration[local_vector_to_irq(vector)]=0;
|
if (unlikely(irq < 0)) {
|
||||||
generic_handle_irq(local_vector_to_irq(vector));
|
printk(KERN_ERR "%s: Unexpected interrupt "
|
||||||
|
"vector %d on CPU %d not being mapped "
|
||||||
|
"to any IRQ!!\n", __FUNCTION__, vector,
|
||||||
|
smp_processor_id());
|
||||||
|
} else {
|
||||||
|
vectors_in_migration[irq]=0;
|
||||||
|
generic_handle_irq(irq);
|
||||||
|
}
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
|
#include <asm/hpsim.h>
|
||||||
|
|
||||||
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
|
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
|
||||||
# error "struct cpuinfo_ia64 too big!"
|
# error "struct cpuinfo_ia64 too big!"
|
||||||
|
@ -389,13 +390,8 @@ early_console_setup (char *cmdline)
|
||||||
if (!efi_setup_pcdp_console(cmdline))
|
if (!efi_setup_pcdp_console(cmdline))
|
||||||
earlycons++;
|
earlycons++;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_HP_SIMSERIAL_CONSOLE
|
if (!simcons_register())
|
||||||
{
|
|
||||||
extern struct console hpsim_cons;
|
|
||||||
register_console(&hpsim_cons);
|
|
||||||
earlycons++;
|
earlycons++;
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return (earlycons) ? 0 : -1;
|
return (earlycons) ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
@ -960,6 +956,11 @@ cpu_init (void)
|
||||||
|
|
||||||
/* clear TPR & XTP to enable all interrupt classes: */
|
/* clear TPR & XTP to enable all interrupt classes: */
|
||||||
ia64_setreg(_IA64_REG_CR_TPR, 0);
|
ia64_setreg(_IA64_REG_CR_TPR, 0);
|
||||||
|
|
||||||
|
/* Clear any pending interrupts left by SAL/EFI */
|
||||||
|
while (ia64_get_ivr() != IA64_SPURIOUS_INT_VECTOR)
|
||||||
|
ia64_eoi();
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
normal_xtp();
|
normal_xtp();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
|
#include <asm/sn/arch.h>
|
||||||
|
|
||||||
#define SMP_DEBUG 0
|
#define SMP_DEBUG 0
|
||||||
|
|
||||||
|
@ -730,6 +731,11 @@ int __cpu_disable(void)
|
||||||
return (-EBUSY);
|
return (-EBUSY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ia64_platform_is("sn2")) {
|
||||||
|
if (!sn_cpu_disable_allowed(cpu))
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
cpu_clear(cpu, cpu_online_map);
|
cpu_clear(cpu, cpu_online_map);
|
||||||
|
|
||||||
if (migrate_platform_irqs(cpu)) {
|
if (migrate_platform_irqs(cpu)) {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
#include <linux/nmi.h>
|
||||||
#include <linux/swap.h>
|
#include <linux/swap.h>
|
||||||
|
|
||||||
#include <asm/meminit.h>
|
#include <asm/meminit.h>
|
||||||
|
@ -56,6 +57,8 @@ void show_mem(void)
|
||||||
present = pgdat->node_present_pages;
|
present = pgdat->node_present_pages;
|
||||||
for(i = 0; i < pgdat->node_spanned_pages; i++) {
|
for(i = 0; i < pgdat->node_spanned_pages; i++) {
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
if (unlikely(i % MAX_ORDER_NR_PAGES == 0))
|
||||||
|
touch_nmi_watchdog();
|
||||||
if (pfn_valid(pgdat->node_start_pfn + i))
|
if (pfn_valid(pgdat->node_start_pfn + i))
|
||||||
page = pfn_to_page(pgdat->node_start_pfn + i);
|
page = pfn_to_page(pgdat->node_start_pfn + i);
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
#include <linux/nmi.h>
|
||||||
#include <linux/swap.h>
|
#include <linux/swap.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
|
@ -533,6 +534,8 @@ void show_mem(void)
|
||||||
present = pgdat->node_present_pages;
|
present = pgdat->node_present_pages;
|
||||||
for(i = 0; i < pgdat->node_spanned_pages; i++) {
|
for(i = 0; i < pgdat->node_spanned_pages; i++) {
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
if (unlikely(i % MAX_ORDER_NR_PAGES == 0))
|
||||||
|
touch_nmi_watchdog();
|
||||||
if (pfn_valid(pgdat->node_start_pfn + i))
|
if (pfn_valid(pgdat->node_start_pfn + i))
|
||||||
page = pfn_to_page(pgdat->node_start_pfn + i);
|
page = pfn_to_page(pgdat->node_start_pfn + i);
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -185,11 +185,14 @@ void hubiio_crb_error_handler(struct hubdev_info *hubdev_info)
|
||||||
*/
|
*/
|
||||||
void hub_error_init(struct hubdev_info *hubdev_info)
|
void hub_error_init(struct hubdev_info *hubdev_info)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (request_irq(SGI_II_ERROR, hub_eint_handler, IRQF_SHARED,
|
if (request_irq(SGI_II_ERROR, hub_eint_handler, IRQF_SHARED,
|
||||||
"SN_hub_error", (void *)hubdev_info))
|
"SN_hub_error", (void *)hubdev_info)) {
|
||||||
printk("hub_error_init: Failed to request_irq for 0x%p\n",
|
printk("hub_error_init: Failed to request_irq for 0x%p\n",
|
||||||
hubdev_info);
|
hubdev_info);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
sn_set_err_irq_affinity(SGI_II_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,11 +205,14 @@ void hub_error_init(struct hubdev_info *hubdev_info)
|
||||||
*/
|
*/
|
||||||
void ice_error_init(struct hubdev_info *hubdev_info)
|
void ice_error_init(struct hubdev_info *hubdev_info)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (request_irq
|
if (request_irq
|
||||||
(SGI_TIO_ERROR, (void *)hub_eint_handler, IRQF_SHARED, "SN_TIO_error",
|
(SGI_TIO_ERROR, (void *)hub_eint_handler, IRQF_SHARED, "SN_TIO_error",
|
||||||
(void *)hubdev_info))
|
(void *)hubdev_info)) {
|
||||||
printk("ice_error_init: request_irq() error hubdev_info 0x%p\n",
|
printk("ice_error_init: request_irq() error hubdev_info 0x%p\n",
|
||||||
hubdev_info);
|
hubdev_info);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
sn_set_err_irq_affinity(SGI_TIO_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <asm/sn/pcidev.h>
|
#include <asm/sn/pcidev.h>
|
||||||
#include <asm/sn/shub_mmr.h>
|
#include <asm/sn/shub_mmr.h>
|
||||||
#include <asm/sn/sn_sal.h>
|
#include <asm/sn/sn_sal.h>
|
||||||
|
#include <asm/sn/sn_feature_sets.h>
|
||||||
|
|
||||||
static void force_interrupt(int irq);
|
static void force_interrupt(int irq);
|
||||||
static void register_intr_pda(struct sn_irq_info *sn_irq_info);
|
static void register_intr_pda(struct sn_irq_info *sn_irq_info);
|
||||||
|
@ -233,6 +234,20 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask)
|
||||||
(void)sn_retarget_vector(sn_irq_info, nasid, slice);
|
(void)sn_retarget_vector(sn_irq_info, nasid, slice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
void sn_set_err_irq_affinity(unsigned int irq)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* On systems which support CPU disabling (SHub2), all error interrupts
|
||||||
|
* are targetted at the boot CPU.
|
||||||
|
*/
|
||||||
|
if (is_shub2() && sn_prom_feature_available(PRF_CPU_DISABLE_SUPPORT))
|
||||||
|
set_irq_affinity_info(irq, cpu_physical_id(0), 0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void sn_set_err_irq_affinity(unsigned int irq) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sn_mask_irq(unsigned int irq)
|
sn_mask_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <asm/sn/shub_mmr.h>
|
#include <asm/sn/shub_mmr.h>
|
||||||
#include <asm/sn/nodepda.h>
|
#include <asm/sn/nodepda.h>
|
||||||
#include <asm/sn/rw_mmr.h>
|
#include <asm/sn/rw_mmr.h>
|
||||||
|
#include <asm/sn/sn_feature_sets.h>
|
||||||
|
|
||||||
DEFINE_PER_CPU(struct ptc_stats, ptcstats);
|
DEFINE_PER_CPU(struct ptc_stats, ptcstats);
|
||||||
DECLARE_PER_CPU(struct ptc_stats, ptcstats);
|
DECLARE_PER_CPU(struct ptc_stats, ptcstats);
|
||||||
|
@ -429,6 +430,31 @@ void sn2_send_IPI(int cpuid, int vector, int delivery_mode, int redirect)
|
||||||
sn_send_IPI_phys(nasid, physid, vector, delivery_mode);
|
sn_send_IPI_phys(nasid, physid, vector, delivery_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
/**
|
||||||
|
* sn_cpu_disable_allowed - Determine if a CPU can be disabled.
|
||||||
|
* @cpu - CPU that is requested to be disabled.
|
||||||
|
*
|
||||||
|
* CPU disable is only allowed on SHub2 systems running with a PROM
|
||||||
|
* that supports CPU disable. It is not permitted to disable the boot processor.
|
||||||
|
*/
|
||||||
|
bool sn_cpu_disable_allowed(int cpu)
|
||||||
|
{
|
||||||
|
if (is_shub2() && sn_prom_feature_available(PRF_CPU_DISABLE_SUPPORT)) {
|
||||||
|
if (cpu != 0)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
printk(KERN_WARNING
|
||||||
|
"Disabling the boot processor is not allowed.\n");
|
||||||
|
|
||||||
|
} else
|
||||||
|
printk(KERN_WARNING
|
||||||
|
"CPU disable is not supported on this system.\n");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HOTPLUG_CPU */
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
||||||
#define PTC_BASENAME "sgi_sn/ptc_statistics"
|
#define PTC_BASENAME "sgi_sn/ptc_statistics"
|
||||||
|
|
|
@ -66,7 +66,8 @@ static int sn_hwperf_enum_objects(int *nobj, struct sn_hwperf_object_info **ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
sz = sn_hwperf_obj_cnt * sizeof(struct sn_hwperf_object_info);
|
sz = sn_hwperf_obj_cnt * sizeof(struct sn_hwperf_object_info);
|
||||||
if ((objbuf = (struct sn_hwperf_object_info *) vmalloc(sz)) == NULL) {
|
objbuf = vmalloc(sz);
|
||||||
|
if (objbuf == NULL) {
|
||||||
printk("sn_hwperf_enum_objects: vmalloc(%d) failed\n", (int)sz);
|
printk("sn_hwperf_enum_objects: vmalloc(%d) failed\n", (int)sz);
|
||||||
e = -ENOMEM;
|
e = -ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -145,6 +145,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"pcibr cannot allocate interrupt for error handler\n");
|
"pcibr cannot allocate interrupt for error handler\n");
|
||||||
}
|
}
|
||||||
|
sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update the Bridge with the "kernel" pagesize
|
* Update the Bridge with the "kernel" pagesize
|
||||||
|
|
|
@ -654,6 +654,8 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
|
||||||
__FUNCTION__, SGI_TIOCA_ERROR,
|
__FUNCTION__, SGI_TIOCA_ERROR,
|
||||||
(int)tioca_common->ca_common.bs_persist_busnum);
|
(int)tioca_common->ca_common.bs_persist_busnum);
|
||||||
|
|
||||||
|
sn_set_err_irq_affinity(SGI_TIOCA_ERROR);
|
||||||
|
|
||||||
/* Setup locality information */
|
/* Setup locality information */
|
||||||
controller->node = tioca_kern->ca_closest_node;
|
controller->node = tioca_kern->ca_closest_node;
|
||||||
return tioca_common;
|
return tioca_common;
|
||||||
|
|
|
@ -1034,6 +1034,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
|
||||||
tioce_common->ce_pcibus.bs_persist_segment,
|
tioce_common->ce_pcibus.bs_persist_segment,
|
||||||
tioce_common->ce_pcibus.bs_persist_busnum);
|
tioce_common->ce_pcibus.bs_persist_busnum);
|
||||||
|
|
||||||
|
sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
|
||||||
return tioce_common;
|
return tioce_common;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
16
include/asm-ia64/hpsim.h
Normal file
16
include/asm-ia64/hpsim.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef _ASMIA64_HPSIM_H
|
||||||
|
#define _ASMIA64_HPSIM_H
|
||||||
|
|
||||||
|
#ifndef CONFIG_HP_SIMSERIAL_CONSOLE
|
||||||
|
static inline int simcons_register(void) { return 1; }
|
||||||
|
#else
|
||||||
|
int simcons_register(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct tty_driver;
|
||||||
|
extern struct tty_driver *hp_simserial_driver;
|
||||||
|
|
||||||
|
void ia64_ssc_connect_irq(long intr, long irq);
|
||||||
|
void ia64_ctl_trace(long on);
|
||||||
|
|
||||||
|
#endif
|
|
@ -81,5 +81,6 @@ extern u8 sn_sharing_domain_size;
|
||||||
extern u8 sn_region_size;
|
extern u8 sn_region_size;
|
||||||
|
|
||||||
extern void sn_flush_all_caches(long addr, long bytes);
|
extern void sn_flush_all_caches(long addr, long bytes);
|
||||||
|
extern bool sn_cpu_disable_allowed(int cpu);
|
||||||
|
|
||||||
#endif /* _ASM_IA64_SN_ARCH_H */
|
#endif /* _ASM_IA64_SN_ARCH_H */
|
||||||
|
|
|
@ -60,6 +60,7 @@ extern u64 sn_intr_alloc(nasid_t, int,
|
||||||
int, nasid_t, int);
|
int, nasid_t, int);
|
||||||
extern void sn_intr_free(nasid_t, int, struct sn_irq_info *);
|
extern void sn_intr_free(nasid_t, int, struct sn_irq_info *);
|
||||||
extern struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *, nasid_t, int);
|
extern struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *, nasid_t, int);
|
||||||
|
extern void sn_set_err_irq_affinity(unsigned int);
|
||||||
extern struct list_head **sn_irq_lh;
|
extern struct list_head **sn_irq_lh;
|
||||||
|
|
||||||
#define CPU_VECTOR_TO_IRQ(cpuid,vector) (vector)
|
#define CPU_VECTOR_TO_IRQ(cpuid,vector) (vector)
|
||||||
|
|
|
@ -31,6 +31,7 @@ extern int sn_prom_feature_available(int id);
|
||||||
#define PRF_PAL_CACHE_FLUSH_SAFE 0
|
#define PRF_PAL_CACHE_FLUSH_SAFE 0
|
||||||
#define PRF_DEVICE_FLUSH_LIST 1
|
#define PRF_DEVICE_FLUSH_LIST 1
|
||||||
#define PRF_HOTPLUG_SUPPORT 2
|
#define PRF_HOTPLUG_SUPPORT 2
|
||||||
|
#define PRF_CPU_DISABLE_SUPPORT 3
|
||||||
|
|
||||||
/* --------------------- OS Features -------------------------------*/
|
/* --------------------- OS Features -------------------------------*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue