[S390] irq change improvements.
Remove the last few places where a pointer to pt_regs gets passed. Also make sure we call set_irq_regs() before irq_enter() and after irq_exit(). This doesn't fix anything but makes sure s390 looks the same like all other architectures. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
53a5fbdc2d
commit
9d0a57cbdb
|
@ -109,7 +109,7 @@ static LIST_HEAD(appldata_ops_list);
|
||||||
*
|
*
|
||||||
* schedule work and reschedule timer
|
* schedule work and reschedule timer
|
||||||
*/
|
*/
|
||||||
static void appldata_timer_function(unsigned long data, struct pt_regs *regs)
|
static void appldata_timer_function(unsigned long data)
|
||||||
{
|
{
|
||||||
P_DEBUG(" -= Timer =-\n");
|
P_DEBUG(" -= Timer =-\n");
|
||||||
P_DEBUG("CPU: %i, expire_count: %i\n", smp_processor_id(),
|
P_DEBUG("CPU: %i, expire_count: %i\n", smp_processor_id(),
|
||||||
|
|
|
@ -117,8 +117,8 @@ void do_extint(struct pt_regs *regs, unsigned short code)
|
||||||
int index;
|
int index;
|
||||||
struct pt_regs *old_regs;
|
struct pt_regs *old_regs;
|
||||||
|
|
||||||
irq_enter();
|
|
||||||
old_regs = set_irq_regs(regs);
|
old_regs = set_irq_regs(regs);
|
||||||
|
irq_enter();
|
||||||
asm volatile ("mc 0,0");
|
asm volatile ("mc 0,0");
|
||||||
if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)
|
if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)
|
||||||
/**
|
/**
|
||||||
|
@ -134,8 +134,8 @@ void do_extint(struct pt_regs *regs, unsigned short code)
|
||||||
p->handler(code);
|
p->handler(code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_irq_regs(old_regs);
|
|
||||||
irq_exit();
|
irq_exit();
|
||||||
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(register_external_interrupt);
|
EXPORT_SYMBOL(register_external_interrupt);
|
||||||
|
|
|
@ -209,11 +209,11 @@ static void list_add_sorted(struct vtimer_list *timer, struct list_head *head)
|
||||||
* Do the callback functions of expired vtimer events.
|
* Do the callback functions of expired vtimer events.
|
||||||
* Called from within the interrupt handler.
|
* Called from within the interrupt handler.
|
||||||
*/
|
*/
|
||||||
static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs)
|
static void do_callbacks(struct list_head *cb_list)
|
||||||
{
|
{
|
||||||
struct vtimer_queue *vt_list;
|
struct vtimer_queue *vt_list;
|
||||||
struct vtimer_list *event, *tmp;
|
struct vtimer_list *event, *tmp;
|
||||||
void (*fn)(unsigned long, struct pt_regs*);
|
void (*fn)(unsigned long);
|
||||||
unsigned long data;
|
unsigned long data;
|
||||||
|
|
||||||
if (list_empty(cb_list))
|
if (list_empty(cb_list))
|
||||||
|
@ -224,7 +224,7 @@ static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs)
|
||||||
list_for_each_entry_safe(event, tmp, cb_list, entry) {
|
list_for_each_entry_safe(event, tmp, cb_list, entry) {
|
||||||
fn = event->function;
|
fn = event->function;
|
||||||
data = event->data;
|
data = event->data;
|
||||||
fn(data, regs);
|
fn(data);
|
||||||
|
|
||||||
if (!event->interval)
|
if (!event->interval)
|
||||||
/* delete one shot timer */
|
/* delete one shot timer */
|
||||||
|
@ -275,7 +275,7 @@ static void do_cpu_timer_interrupt(__u16 error_code)
|
||||||
list_move_tail(&event->entry, &cb_list);
|
list_move_tail(&event->entry, &cb_list);
|
||||||
}
|
}
|
||||||
spin_unlock(&vt_list->lock);
|
spin_unlock(&vt_list->lock);
|
||||||
do_callbacks(&cb_list, get_irq_regs());
|
do_callbacks(&cb_list);
|
||||||
|
|
||||||
/* next event is first in list */
|
/* next event is first in list */
|
||||||
spin_lock(&vt_list->lock);
|
spin_lock(&vt_list->lock);
|
||||||
|
|
|
@ -609,8 +609,8 @@ do_IRQ (struct pt_regs *regs)
|
||||||
struct irb *irb;
|
struct irb *irb;
|
||||||
struct pt_regs *old_regs;
|
struct pt_regs *old_regs;
|
||||||
|
|
||||||
irq_enter ();
|
|
||||||
old_regs = set_irq_regs(regs);
|
old_regs = set_irq_regs(regs);
|
||||||
|
irq_enter();
|
||||||
asm volatile ("mc 0,0");
|
asm volatile ("mc 0,0");
|
||||||
if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)
|
if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)
|
||||||
/**
|
/**
|
||||||
|
@ -655,8 +655,8 @@ do_IRQ (struct pt_regs *regs)
|
||||||
* out of the sie which costs more cycles than it saves.
|
* out of the sie which costs more cycles than it saves.
|
||||||
*/
|
*/
|
||||||
} while (!MACHINE_IS_VM && tpi (NULL) != 0);
|
} while (!MACHINE_IS_VM && tpi (NULL) != 0);
|
||||||
|
irq_exit();
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
irq_exit ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CCW_CONSOLE
|
#ifdef CONFIG_CCW_CONSOLE
|
||||||
|
|
|
@ -26,7 +26,7 @@ struct vtimer_list {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
unsigned long magic;
|
unsigned long magic;
|
||||||
|
|
||||||
void (*function)(unsigned long, struct pt_regs*);
|
void (*function)(unsigned long);
|
||||||
unsigned long data;
|
unsigned long data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue