Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 39115
b: refs/heads/master
c: e11e30a
h: refs/heads/master
i:
  39113: dce5b37
  39111: af529ac
v: v3
  • Loading branch information
Matthew Wilcox authored and Matthew Wilcox committed Oct 7, 2006
1 parent 5855071 commit a19f134
Show file tree
Hide file tree
Showing 214 changed files with 1,085 additions and 1,449 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: c7111c1318ee8890f385813f232fdb32643e2653
refs/heads/master: e11e30a063b515e95fb590f1558b5fea21273c63
5 changes: 1 addition & 4 deletions trunk/arch/alpha/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ show_interrupts(struct seq_file *p, void *v)
void
handle_irq(int irq, struct pt_regs * regs)
{
struct pt_regs *old_regs;
/*
* We ack quickly, we don't want the irq controller
* thinking we're snobs just because some other CPU has
Expand All @@ -150,7 +149,6 @@ handle_irq(int irq, struct pt_regs * regs)
return;
}

old_regs = set_irq_regs(regs);
irq_enter();
/*
* __do_IRQ() must be called with IPL_MAX. Note that we do not
Expand All @@ -159,7 +157,6 @@ handle_irq(int irq, struct pt_regs * regs)
* at IPL 0.
*/
local_irq_disable();
__do_IRQ(irq);
__do_IRQ(irq, regs);
irq_exit();
set_irq_regs(old_regs);
}
2 changes: 1 addition & 1 deletion trunk/arch/alpha/kernel/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *);
/* extern void reset_for_srm(void); */

/* time.c */
extern irqreturn_t timer_interrupt(int irq, void *dev);
extern irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs);
extern void common_init_rtc(void);
extern unsigned long est_cycle_freq;

Expand Down
6 changes: 1 addition & 5 deletions trunk/arch/alpha/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,15 +515,12 @@ smp_cpus_done(unsigned int max_cpus)
void
smp_percpu_timer_interrupt(struct pt_regs *regs)
{
struct pt_regs *old_regs;
int cpu = smp_processor_id();
unsigned long user = user_mode(regs);
struct cpuinfo_alpha *data = &cpu_data[cpu];

old_regs = set_irq_regs(regs);

/* Record kernel PC. */
profile_tick(CPU_PROFILING);
profile_tick(CPU_PROFILING, regs);

if (!--data->prof_counter) {
/* We need to make like a normal interrupt -- otherwise
Expand All @@ -537,7 +534,6 @@ smp_percpu_timer_interrupt(struct pt_regs *regs)

irq_exit();
}
set_irq_regs(old_regs);
}

int __init
Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/alpha/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,15 @@ unsigned long long sched_clock(void)
* timer_interrupt() needs to keep up the real-time clock,
* as well as call the "do_timer()" routine every clocktick
*/
irqreturn_t timer_interrupt(int irq, void *dev)
irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
{
unsigned long delta;
__u32 now;
long nticks;

#ifndef CONFIG_SMP
/* Not SMP, do kernel PC profiling here. */
profile_tick(CPU_PROFILING);
profile_tick(CPU_PROFILING, regs);
#endif

write_seqlock(&xtime_lock);
Expand All @@ -132,7 +132,7 @@ irqreturn_t timer_interrupt(int irq, void *dev)
while (nticks > 0) {
do_timer(1);
#ifndef CONFIG_SMP
update_process_times(user_mode(get_irq_regs()));
update_process_times(user_mode(regs));
#endif
nticks--;
}
Expand Down
12 changes: 6 additions & 6 deletions trunk/arch/i386/kernel/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1184,8 +1184,8 @@ static int __assign_irq_vector(int irq)

BUG_ON((unsigned)irq >= NR_IRQ_VECTORS);

if (irq_vector[irq] > 0)
return irq_vector[irq];
if (IO_APIC_VECTOR(irq) > 0)
return IO_APIC_VECTOR(irq);

current_vector += 8;
if (current_vector == SYSCALL_VECTOR)
Expand All @@ -1199,7 +1199,7 @@ static int __assign_irq_vector(int irq)
}

vector = current_vector;
irq_vector[irq] = vector;
IO_APIC_VECTOR(irq) = vector;

return vector;
}
Expand Down Expand Up @@ -1967,7 +1967,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq)
* operation to prevent an edge-triggered interrupt escaping meanwhile.
* The idea is from Manfred Spraul. --macro
*/
i = irq_vector[irq];
i = IO_APIC_VECTOR(irq);

v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1));

Expand All @@ -1984,7 +1984,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq)

static int ioapic_retrigger_irq(unsigned int irq)
{
send_IPI_self(irq_vector[irq]);
send_IPI_self(IO_APIC_VECTOR(irq));

return 1;
}
Expand Down Expand Up @@ -2020,7 +2020,7 @@ static inline void init_IO_APIC_traps(void)
*/
for (irq = 0; irq < NR_IRQS ; irq++) {
int tmp = irq;
if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) {
if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) {
/*
* Hmm.. We don't have an entry for this,
* so default to an old-fashioned 8259
Expand Down
4 changes: 4 additions & 0 deletions trunk/arch/i386/pci/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1141,6 +1141,10 @@ static int pirq_enable_irq(struct pci_dev *dev)
}
dev = temp_dev;
if (irq >= 0) {
#ifdef CONFIG_PCI_MSI
if (!platform_legacy_irq(irq))
irq = IO_APIC_VECTOR(irq);
#endif
printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n",
pci_name(dev), 'A' + pin, irq);
dev->irq = irq;
Expand Down
5 changes: 1 addition & 4 deletions trunk/arch/m32r/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,13 @@ int show_interrupts(struct seq_file *p, void *v)
*/
asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
{
struct pt_regs *old_regs;
old_regs = set_irq_regs(regs);
irq_enter();

#ifdef CONFIG_DEBUG_STACKOVERFLOW
/* FIXME M32R */
#endif
__do_IRQ(irq);
__do_IRQ(irq, regs);
irq_exit();
set_irq_regs(old_regs);

return 1;
}
13 changes: 5 additions & 8 deletions trunk/arch/m32r/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ void smp_call_function_interrupt(void);

void smp_send_timer(void);
void smp_ipi_timer_interrupt(struct pt_regs *);
void smp_local_timer_interrupt(void);
void smp_local_timer_interrupt(struct pt_regs *);

void send_IPI_allbutself(int, int);
static void send_IPI_mask(cpumask_t, int, int);
Expand Down Expand Up @@ -734,12 +734,9 @@ void smp_send_timer(void)
*==========================================================================*/
void smp_ipi_timer_interrupt(struct pt_regs *regs)
{
struct pt_regs *old_regs;
old_regs = set_irq_regs(regs);
irq_enter();
smp_local_timer_interrupt();
smp_local_timer_interrupt(regs);
irq_exit();
set_irq_regs(old_regs);
}

/*==========================================================================*
Expand All @@ -765,9 +762,9 @@ void smp_ipi_timer_interrupt(struct pt_regs *regs)
* ---------- --- --------------------------------------------------------
* 2003-06-24 hy use per_cpu structure.
*==========================================================================*/
void smp_local_timer_interrupt(void)
void smp_local_timer_interrupt(struct pt_regs *regs)
{
int user = user_mode(get_irq_regs());
int user = user_mode(regs);
int cpu_id = smp_processor_id();

/*
Expand All @@ -777,7 +774,7 @@ void smp_local_timer_interrupt(void)
* useful with a profiling multiplier != 1
*/

profile_tick(CPU_PROFILING);
profile_tick(CPU_PROFILING, regs);

if (--per_cpu(prof_counter, cpu_id) <= 0) {
/*
Expand Down
10 changes: 5 additions & 5 deletions trunk/arch/m32r/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

#ifdef CONFIG_SMP
extern void send_IPI_allbutself(int, int);
extern void smp_local_timer_interrupt(void);
extern void smp_local_timer_interrupt(struct pt_regs *);
#endif

#define TICK_SIZE (tick_nsec / 1000)
Expand Down Expand Up @@ -188,15 +188,15 @@ static long last_rtc_update = 0;
* timer_interrupt() needs to keep up the real-time clock,
* as well as call the "do_timer()" routine every clocktick
*/
irqreturn_t timer_interrupt(int irq, void *dev_id)
irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
#ifndef CONFIG_SMP
profile_tick(CPU_PROFILING);
profile_tick(CPU_PROFILING, regs);
#endif
do_timer(1);

#ifndef CONFIG_SMP
update_process_times(user_mode(get_irq_regs()));
update_process_times(user_mode(regs));
#endif
/*
* If we have an externally synchronized Linux clock, then update
Expand All @@ -221,7 +221,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
a hack, so don't look closely for now.. */

#ifdef CONFIG_SMP
smp_local_timer_interrupt();
smp_local_timer_interrupt(regs);
smp_send_timer();
#endif

Expand Down
40 changes: 20 additions & 20 deletions trunk/arch/m68k/amiga/amiints.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@

static void amiga_enable_irq(unsigned int irq);
static void amiga_disable_irq(unsigned int irq);
static irqreturn_t ami_int1(int irq, void *dev_id);
static irqreturn_t ami_int3(int irq, void *dev_id);
static irqreturn_t ami_int4(int irq, void *dev_id);
static irqreturn_t ami_int5(int irq, void *dev_id);
static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp);
static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp);
static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp);
static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp);

static struct irq_controller amiga_irq_controller = {
.name = "amiga",
Expand Down Expand Up @@ -113,98 +113,98 @@ static void amiga_disable_irq(unsigned int irq)
* The builtin Amiga hardware interrupt handlers.
*/

static irqreturn_t ami_int1(int irq, void *dev_id)
static irqreturn_t ami_int1(int irq, void *dev_id, struct pt_regs *fp)
{
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;

/* if serial transmit buffer empty, interrupt */
if (ints & IF_TBE) {
amiga_custom.intreq = IF_TBE;
m68k_handle_int(IRQ_AMIGA_TBE);
m68k_handle_int(IRQ_AMIGA_TBE, fp);
}

/* if floppy disk transfer complete, interrupt */
if (ints & IF_DSKBLK) {
amiga_custom.intreq = IF_DSKBLK;
m68k_handle_int(IRQ_AMIGA_DSKBLK);
m68k_handle_int(IRQ_AMIGA_DSKBLK, fp);
}

/* if software interrupt set, interrupt */
if (ints & IF_SOFT) {
amiga_custom.intreq = IF_SOFT;
m68k_handle_int(IRQ_AMIGA_SOFT);
m68k_handle_int(IRQ_AMIGA_SOFT, fp);
}
return IRQ_HANDLED;
}

static irqreturn_t ami_int3(int irq, void *dev_id)
static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp)
{
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;

/* if a blitter interrupt */
if (ints & IF_BLIT) {
amiga_custom.intreq = IF_BLIT;
m68k_handle_int(IRQ_AMIGA_BLIT);
m68k_handle_int(IRQ_AMIGA_BLIT, fp);
}

/* if a copper interrupt */
if (ints & IF_COPER) {
amiga_custom.intreq = IF_COPER;
m68k_handle_int(IRQ_AMIGA_COPPER);
m68k_handle_int(IRQ_AMIGA_COPPER, fp);
}

/* if a vertical blank interrupt */
if (ints & IF_VERTB) {
amiga_custom.intreq = IF_VERTB;
m68k_handle_int(IRQ_AMIGA_VERTB);
m68k_handle_int(IRQ_AMIGA_VERTB, fp);
}
return IRQ_HANDLED;
}

static irqreturn_t ami_int4(int irq, void *dev_id)
static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp)
{
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;

/* if audio 0 interrupt */
if (ints & IF_AUD0) {
amiga_custom.intreq = IF_AUD0;
m68k_handle_int(IRQ_AMIGA_AUD0);
m68k_handle_int(IRQ_AMIGA_AUD0, fp);
}

/* if audio 1 interrupt */
if (ints & IF_AUD1) {
amiga_custom.intreq = IF_AUD1;
m68k_handle_int(IRQ_AMIGA_AUD1);
m68k_handle_int(IRQ_AMIGA_AUD1, fp);
}

/* if audio 2 interrupt */
if (ints & IF_AUD2) {
amiga_custom.intreq = IF_AUD2;
m68k_handle_int(IRQ_AMIGA_AUD2);
m68k_handle_int(IRQ_AMIGA_AUD2, fp);
}

/* if audio 3 interrupt */
if (ints & IF_AUD3) {
amiga_custom.intreq = IF_AUD3;
m68k_handle_int(IRQ_AMIGA_AUD3);
m68k_handle_int(IRQ_AMIGA_AUD3, fp);
}
return IRQ_HANDLED;
}

static irqreturn_t ami_int5(int irq, void *dev_id)
static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp)
{
unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar;

/* if serial receive buffer full interrupt */
if (ints & IF_RBF) {
/* acknowledge of IF_RBF must be done by the serial interrupt */
m68k_handle_int(IRQ_AMIGA_RBF);
m68k_handle_int(IRQ_AMIGA_RBF, fp);
}

/* if a disk sync interrupt */
if (ints & IF_DSKSYN) {
amiga_custom.intreq = IF_DSKSYN;
m68k_handle_int(IRQ_AMIGA_DSKSYN);
m68k_handle_int(IRQ_AMIGA_DSKSYN, fp);
}
return IRQ_HANDLED;
}
4 changes: 2 additions & 2 deletions trunk/arch/m68k/amiga/cia.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ unsigned char cia_able_irq(struct ciabase *base, unsigned char mask)
return old;
}

static irqreturn_t cia_handler(int irq, void *dev_id)
static irqreturn_t cia_handler(int irq, void *dev_id, struct pt_regs *fp)
{
struct ciabase *base = (struct ciabase *)dev_id;
int mach_irq;
Expand All @@ -93,7 +93,7 @@ static irqreturn_t cia_handler(int irq, void *dev_id)
amiga_custom.intreq = base->int_mask;
for (; ints; mach_irq++, ints >>= 1) {
if (ints & 1)
m68k_handle_int(mach_irq);
m68k_handle_int(mach_irq, fp);
}
return IRQ_HANDLED;
}
Expand Down
Loading

0 comments on commit a19f134

Please sign in to comment.