Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 243650
b: refs/heads/master
c: a51e919
h: refs/heads/master
v: v3
  • Loading branch information
Dario Faggioli authored and Ingo Molnar committed Mar 31, 2011
1 parent 43db0d6 commit 807e06d
Show file tree
Hide file tree
Showing 125 changed files with 879 additions and 1,328 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4da7e90e653d67dfd405868246d316b04852e2d5
refs/heads/master: a51e91981870d013fcfcc08b0117997edbcbc7a7
2 changes: 1 addition & 1 deletion trunk/arch/ia64/sn/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ sn_call_force_intr_provider(struct sn_irq_info *sn_irq_info)
pci_provider = sn_pci_provider[sn_irq_info->irq_bridge_type];

/* Don't force an interrupt if the irq has been disabled */
if (!irqd_irq_disabled(irq_get_irq_data(sn_irq_info->irq_irq)) &&
if (!irqd_irq_disabled(sn_irq_info->irq_irq) &&
pci_provider && pci_provider->force_interrupt)
(*pci_provider->force_interrupt)(sn_irq_info);
}
Expand Down
42 changes: 42 additions & 0 deletions trunk/arch/ia64/sn/kernel/sn2/sn_proc_fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,38 @@ static int licenseID_open(struct inode *inode, struct file *file)
return single_open(file, licenseID_show, NULL);
}

/*
* Enable forced interrupt by default.
* When set, the sn interrupt handler writes the force interrupt register on
* the bridge chip. The hardware will then send an interrupt message if the
* interrupt line is active. This mimics a level sensitive interrupt.
*/
extern int sn_force_interrupt_flag;

static int sn_force_interrupt_show(struct seq_file *s, void *p)
{
seq_printf(s, "Force interrupt is %s\n",
sn_force_interrupt_flag ? "enabled" : "disabled");
return 0;
}

static ssize_t sn_force_interrupt_write_proc(struct file *file,
const char __user *buffer, size_t count, loff_t *data)
{
char val;

if (copy_from_user(&val, buffer, 1))
return -EFAULT;

sn_force_interrupt_flag = (val == '0') ? 0 : 1;
return count;
}

static int sn_force_interrupt_open(struct inode *inode, struct file *file)
{
return single_open(file, sn_force_interrupt_show, NULL);
}

static int coherence_id_show(struct seq_file *s, void *p)
{
seq_printf(s, "%d\n", partition_coherence_id());
Expand Down Expand Up @@ -82,6 +114,14 @@ static const struct file_operations proc_license_id_fops = {
.release = single_release,
};

static const struct file_operations proc_sn_force_intr_fops = {
.open = sn_force_interrupt_open,
.read = seq_read,
.write = sn_force_interrupt_write_proc,
.llseek = seq_lseek,
.release = single_release,
};

static const struct file_operations proc_coherence_id_fops = {
.open = coherence_id_open,
.read = seq_read,
Expand Down Expand Up @@ -109,6 +149,8 @@ void register_sn_procfs(void)
proc_create("system_serial_number", 0444, sgi_proc_dir,
&proc_system_sn_fops);
proc_create("licenseID", 0444, sgi_proc_dir, &proc_license_id_fops);
proc_create("sn_force_interrupt", 0644, sgi_proc_dir,
&proc_sn_force_intr_fops);
proc_create("coherence_id", 0444, sgi_proc_dir,
&proc_coherence_id_fops);
proc_create("sn_topology", 0444, sgi_proc_dir, &proc_sn_topo_fops);
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/powerpc/include/asm/machdep.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ struct smp_ops_t {
int (*probe)(void);
void (*kick_cpu)(int nr);
void (*setup_cpu)(int nr);
void (*bringup_done)(void);
void (*take_timebase)(void);
void (*give_timebase)(void);
int (*cpu_enable)(unsigned int nr);
int (*cpu_disable)(void);
void (*cpu_die)(unsigned int nr);
int (*cpu_bootable)(unsigned int nr);
Expand Down Expand Up @@ -267,6 +267,7 @@ struct machdep_calls {

extern void e500_idle(void);
extern void power4_idle(void);
extern void power4_cpu_offline_powersave(void);
extern void ppc6xx_idle(void);
extern void book3e_idle(void);

Expand Down
5 changes: 2 additions & 3 deletions trunk/arch/powerpc/include/asm/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,15 @@ extern void cpu_die(void);

extern void smp_send_debugger_break(int cpu);
extern void smp_message_recv(int);
extern void start_secondary_resume(void);

DECLARE_PER_CPU(unsigned int, cpu_pvr);

#ifdef CONFIG_HOTPLUG_CPU
extern void migrate_irqs(void);
extern void fixup_irqs(const struct cpumask *map);
int generic_cpu_disable(void);
int generic_cpu_enable(unsigned int cpu);
void generic_cpu_die(unsigned int cpu);
void generic_mach_cpu_die(void);
void generic_set_cpu_dead(unsigned int cpu);
#endif

#ifdef CONFIG_PPC64
Expand Down
9 changes: 0 additions & 9 deletions trunk/arch/powerpc/kernel/head_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -890,15 +890,6 @@ __secondary_start:
mtspr SPRN_SRR1,r4
SYNC
RFI

_GLOBAL(start_secondary_resume)
/* Reset stack */
rlwinm r1,r1,0,0,(31-THREAD_SHIFT) /* current_thread_info() */
addi r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
li r3,0
std r3,0(r1) /* Zero the stack frame pointer */
bl start_secondary
b .
#endif /* CONFIG_SMP */

#ifdef CONFIG_KVM_BOOK3S_HANDLER
Expand Down
7 changes: 0 additions & 7 deletions trunk/arch/powerpc/kernel/head_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -536,13 +536,6 @@ _GLOBAL(pmac_secondary_start)
add r13,r13,r4 /* for this processor. */
mtspr SPRN_SPRG_PACA,r13 /* Save vaddr of paca in an SPRG*/

/* Mark interrupts soft and hard disabled (they might be enabled
* in the PACA when doing hotplug)
*/
li r0,0
stb r0,PACASOFTIRQEN(r13)
stb r0,PACAHARDIRQEN(r13)

/* Create a temp kernel stack for use before relocation is on. */
ld r1,PACAEMERGSP(r13)
subi r1,r1,STACK_FRAME_OVERHEAD
Expand Down
21 changes: 21 additions & 0 deletions trunk/arch/powerpc/kernel/idle_power4.S
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,24 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
isync
b 1b

_GLOBAL(power4_cpu_offline_powersave)
/* Go to NAP now */
mfmsr r7
rldicl r0,r7,48,1
rotldi r0,r0,16
mtmsrd r0,1 /* hard-disable interrupts */
li r0,1
li r6,0
stb r0,PACAHARDIRQEN(r13) /* we'll hard-enable shortly */
stb r6,PACASOFTIRQEN(r13) /* soft-disable irqs */
BEGIN_FTR_SECTION
DSSALL
sync
END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
ori r7,r7,MSR_EE
oris r7,r7,MSR_POW@h
sync
isync
mtmsrd r7
isync
blr
3 changes: 1 addition & 2 deletions trunk/arch/powerpc/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,13 +246,12 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
}

#ifdef CONFIG_HOTPLUG_CPU
void migrate_irqs(void)
void fixup_irqs(const struct cpumask *map)
{
struct irq_desc *desc;
unsigned int irq;
static int warned;
cpumask_var_t mask;
const struct cpumask *map = cpu_online_mask;

alloc_cpumask_var(&mask, GFP_KERNEL);

Expand Down
Loading

0 comments on commit 807e06d

Please sign in to comment.