Skip to content

Commit

Permalink
[PATCH] m68k pt_regs fixes
Browse files Browse the repository at this point in the history
m68k_handle_int() split in two functions: __m68k_handle_int() takes
pt_regs * and does set_irq_regs(); m68k_handle_int() doesn't get pt_regs
*.

Places where we used to call m68k_handle_int() recursively with the same
pt_regs have simply lost the second argument, the rest is switched to
__m68k_handle_int().

The rest of patch is just dropping pt_regs * where needed.

Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Al Viro authored and Linus Torvalds committed Oct 7, 2006
1 parent 00079e0 commit 2850bc2
Show file tree
Hide file tree
Showing 44 changed files with 176 additions and 169 deletions.
40 changes: 20 additions & 20 deletions 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, 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 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 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, struct pt_regs *fp)
static irqreturn_t ami_int1(int irq, void *dev_id)
{
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, fp);
m68k_handle_int(IRQ_AMIGA_TBE);
}

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

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

static irqreturn_t ami_int3(int irq, void *dev_id, struct pt_regs *fp)
static irqreturn_t ami_int3(int irq, void *dev_id)
{
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, fp);
m68k_handle_int(IRQ_AMIGA_BLIT);
}

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

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

static irqreturn_t ami_int4(int irq, void *dev_id, struct pt_regs *fp)
static irqreturn_t ami_int4(int irq, void *dev_id)
{
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, fp);
m68k_handle_int(IRQ_AMIGA_AUD0);
}

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

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

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

static irqreturn_t ami_int5(int irq, void *dev_id, struct pt_regs *fp)
static irqreturn_t ami_int5(int irq, void *dev_id)
{
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, fp);
m68k_handle_int(IRQ_AMIGA_RBF);
}

/* if a disk sync interrupt */
if (ints & IF_DSKSYN) {
amiga_custom.intreq = IF_DSKSYN;
m68k_handle_int(IRQ_AMIGA_DSKSYN, fp);
m68k_handle_int(IRQ_AMIGA_DSKSYN);
}
return IRQ_HANDLED;
}
4 changes: 2 additions & 2 deletions 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, struct pt_regs *fp)
static irqreturn_t cia_handler(int irq, void *dev_id)
{
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, struct pt_regs *fp)
amiga_custom.intreq = base->int_mask;
for (; ints; mach_irq++, ints >>= 1) {
if (ints & 1)
m68k_handle_int(mach_irq, fp);
m68k_handle_int(mach_irq);
}
return IRQ_HANDLED;
}
Expand Down
5 changes: 2 additions & 3 deletions arch/m68k/amiga/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ static char amiga_model_name[13] = "Amiga ";

extern char m68k_debug_device[];

static void amiga_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
static void amiga_sched_init(irqreturn_t (*handler)(int, void *));
/* amiga specific irq functions */
extern void amiga_init_IRQ (void);
static void amiga_get_model(char *model);
Expand Down Expand Up @@ -487,8 +487,7 @@ void __init config_amiga(void)

static unsigned short jiffy_ticks;

static void __init amiga_sched_init(irqreturn_t (*timer_routine)(int, void *,
struct pt_regs *))
static void __init amiga_sched_init(irqreturn_t (*timer_routine)(int, void *))
{
static struct resource sched_res = {
.name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff,
Expand Down
14 changes: 7 additions & 7 deletions arch/m68k/apollo/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ u_long cpuctrl_physaddr;
u_long timer_physaddr;
u_long apollo_model;

extern void dn_sched_init(irqreturn_t (*handler)(int,void *,struct pt_regs *));
extern void dn_sched_init(irqreturn_t (*handler)(int,void *));
extern void dn_init_IRQ(void);
extern unsigned long dn_gettimeoffset(void);
extern int dn_dummy_hwclk(int, struct rtc_time *);
Expand All @@ -38,7 +38,7 @@ extern irqreturn_t dn_process_int(int irq, struct pt_regs *fp);
#ifdef CONFIG_HEARTBEAT
static void dn_heartbeat(int on);
#endif
static irqreturn_t dn_timer_int(int irq,void *, struct pt_regs *);
static irqreturn_t dn_timer_int(int irq,void *);
static void dn_get_model(char *model);
static const char *apollo_models[] = {
[APOLLO_DN3000-APOLLO_DN3000] = "DN3000 (Otter)",
Expand Down Expand Up @@ -174,22 +174,22 @@ void config_apollo(void) {

}

irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp)
irqreturn_t dn_timer_int(int irq, void *dev_id)
{
irqreturn_t (*timer_handler)(int, void *, struct pt_regs *) = dev_id;
irqreturn_t (*timer_handler)(int, void *) = dev_id;

volatile unsigned char x;

timer_handler(irq, dev_id, fp);
timer_handler(irq, dev_id);

x=*(volatile unsigned char *)(timer+3);
x=*(volatile unsigned char *)(timer+5);

return IRQ_HANDLED;
}

void dn_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) {

void dn_sched_init(irqreturn_t (*timer_routine)(int, void *))
{
/* program timer 1 */
*(volatile unsigned char *)(timer+3)=0x01;
*(volatile unsigned char *)(timer+1)=0x40;
Expand Down
2 changes: 1 addition & 1 deletion arch/m68k/apollo/dn_ints.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

void dn_process_int(unsigned int irq, struct pt_regs *fp)
{
m68k_handle_int(irq, fp);
__m68k_handle_int(irq, fp);

*(volatile unsigned char *)(pica)=0x20;
*(volatile unsigned char *)(picb)=0x20;
Expand Down
2 changes: 1 addition & 1 deletion arch/m68k/atari/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ static void atari_heartbeat( int on );
#endif

/* atari specific timer functions (in time.c) */
extern void atari_sched_init(irqreturn_t (*)(int, void *, struct pt_regs *));
extern void atari_sched_init(irqreturn_t (*)(int, void *));
extern unsigned long atari_gettimeoffset (void);
extern int atari_mste_hwclk (int, struct rtc_time *);
extern int atari_tt_hwclk (int, struct rtc_time *);
Expand Down
11 changes: 5 additions & 6 deletions arch/m68k/atari/stdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

static int stdma_locked; /* the semaphore */
/* int func to be called */
static irqreturn_t (*stdma_isr)(int, void *, struct pt_regs *);
static irqreturn_t (*stdma_isr)(int, void *);
static void *stdma_isr_data; /* data passed to isr */
static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */

Expand All @@ -53,7 +53,7 @@ static DECLARE_WAIT_QUEUE_HEAD(stdma_wait); /* wait queue for ST-DMA */

/***************************** Prototypes *****************************/

static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp);
static irqreturn_t stdma_int (int irq, void *dummy);

/************************* End of Prototypes **************************/

Expand All @@ -75,8 +75,7 @@ static irqreturn_t stdma_int (int irq, void *dummy, struct pt_regs *fp);
*
*/

void stdma_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *),
void *data)
void stdma_lock(irqreturn_t (*handler)(int, void *), void *data)
{
unsigned long flags;

Expand Down Expand Up @@ -188,9 +187,9 @@ void __init stdma_init(void)
*
*/

static irqreturn_t stdma_int(int irq, void *dummy, struct pt_regs *fp)
static irqreturn_t stdma_int(int irq, void *dummy)
{
if (stdma_isr)
(*stdma_isr)(irq, stdma_isr_data, fp);
(*stdma_isr)(irq, stdma_isr_data);
return IRQ_HANDLED;
}
2 changes: 1 addition & 1 deletion arch/m68k/atari/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include <asm/atariints.h>

void __init
atari_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *))
atari_sched_init(irqreturn_t (*timer_routine)(int, void *))
{
/* set Timer C data Register */
mfp.tim_dt_c = INT_TICKS;
Expand Down
12 changes: 6 additions & 6 deletions arch/m68k/bvme6000/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

static void bvme6000_get_model(char *model);
static int bvme6000_get_hardware_list(char *buffer);
extern void bvme6000_sched_init(irqreturn_t (*handler)(int, void *, struct pt_regs *));
extern void bvme6000_sched_init(irqreturn_t (*handler)(int, void *));
extern unsigned long bvme6000_gettimeoffset (void);
extern int bvme6000_hwclk (int, struct rtc_time *);
extern int bvme6000_set_clock_mmss (unsigned long);
Expand All @@ -52,7 +52,7 @@ static unsigned char bin2bcd (unsigned char b);
/* Save tick handler routine pointer, will point to do_timer() in
* kernel/sched.c, called via bvme6000_process_int() */

static irqreturn_t (*tick_handler)(int, void *, struct pt_regs *);
static irqreturn_t (*tick_handler)(int, void *);


int bvme6000_parse_bootinfo(const struct bi_record *bi)
Expand Down Expand Up @@ -154,7 +154,7 @@ void __init config_bvme6000(void)
}


irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp)
irqreturn_t bvme6000_abort_int (int irq, void *dev_id)
{
unsigned long *new = (unsigned long *)vectors;
unsigned long *old = (unsigned long *)0xf8000000;
Expand All @@ -171,14 +171,14 @@ irqreturn_t bvme6000_abort_int (int irq, void *dev_id, struct pt_regs *fp)
}


static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp)
static irqreturn_t bvme6000_timer_int (int irq, void *dev_id)
{
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr = rtc->msr & 0xc0;

rtc->msr = msr | 0x20; /* Ack the interrupt */

return tick_handler(irq, dev_id, fp);
return tick_handler(irq, dev_id);
}

/*
Expand All @@ -190,7 +190,7 @@ static irqreturn_t bvme6000_timer_int (int irq, void *dev_id, struct pt_regs *fp
* so divide by 8 to get the microsecond result.
*/

void bvme6000_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *))
void bvme6000_sched_init (irqreturn_t (*timer_routine)(int, void *))
{
volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
unsigned char msr = rtc->msr & 0xc0;
Expand Down
8 changes: 4 additions & 4 deletions arch/m68k/hp300/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@

#define INTVAL ((10000 / 4) - 1)

static irqreturn_t hp300_tick(int irq, void *dev_id, struct pt_regs *regs)
static irqreturn_t hp300_tick(int irq, void *dev_id)
{
unsigned long tmp;
irqreturn_t (*vector)(int, void *, struct pt_regs *) = dev_id;
irqreturn_t (*vector)(int, void *) = dev_id;
in_8(CLOCKBASE + CLKSR);
asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE));
/* Turn off the network and SCSI leds */
blinken_leds(0, 0xe0);
return vector(irq, NULL, regs);
return vector(irq, NULL);
}

unsigned long hp300_gettimeoffset(void)
Expand All @@ -63,7 +63,7 @@ unsigned long hp300_gettimeoffset(void)
return (USECS_PER_JIFFY * ticks) / INTVAL;
}

void __init hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *))
void __init hp300_sched_init(irqreturn_t (*vector)(int, void *))
{
out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */
out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */
Expand Down
2 changes: 1 addition & 1 deletion arch/m68k/hp300/time.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
extern void hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *));
extern void hp300_sched_init(irqreturn_t (*vector)(int, void *));
extern unsigned long hp300_gettimeoffset (void);


4 changes: 2 additions & 2 deletions arch/m68k/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ ENTRY(auto_inthandler)
movel %sp,%sp@-
movel %d0,%sp@- | put vector # on stack
auto_irqhandler_fixup = . + 2
jsr m68k_handle_int | process the IRQ
jsr __m68k_handle_int | process the IRQ
addql #8,%sp | pop parameters off stack

ret_from_interrupt:
Expand Down Expand Up @@ -239,7 +239,7 @@ user_irqvec_fixup = . + 2
movel %sp,%sp@-
movel %d0,%sp@- | put vector # on stack
user_irqhandler_fixup = . + 2
jsr m68k_handle_int | process the IRQ
jsr __m68k_handle_int | process the IRQ
addql #8,%sp | pop parameters off stack

subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1)
Expand Down
Loading

0 comments on commit 2850bc2

Please sign in to comment.