Loading arch/s390/kernel/s390_ext.c +6 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <asm/lowcore.h> #include <asm/s390_ext.h> #include <asm/irq_regs.h> #include <asm/irq.h> /* Loading Loading @@ -114,26 +115,28 @@ void do_extint(struct pt_regs *regs, unsigned short code) { ext_int_info_t *p; int index; struct pt_regs *old_regs; irq_enter(); old_regs = set_irq_regs(regs); asm volatile ("mc 0,0"); if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) /** * Make sure that the i/o interrupt did not "overtake" * the last HZ timer interrupt. */ account_ticks(regs); account_ticks(); kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; index = ext_hash(code); for (p = ext_int_hash[index]; p; p = p->next) { if (likely(p->code == code)) { if (likely(p->handler)) p->handler(regs, code); p->handler(code); } } set_irq_regs(old_regs); irq_exit(); } EXPORT_SYMBOL(register_external_interrupt); EXPORT_SYMBOL(unregister_external_interrupt); arch/s390/kernel/smp.c +1 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ void machine_power_off_smp(void) * cpus are handled. */ void do_ext_call_interrupt(struct pt_regs *regs, __u16 code) void do_ext_call_interrupt(__u16 code) { unsigned long bits; Loading arch/s390/kernel/time.c +9 −6 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include <asm/s390_ext.h> #include <asm/div64.h> #include <asm/irq.h> #include <asm/irq_regs.h> #include <asm/timer.h> /* change this if you have some constant time drift */ Loading Loading @@ -150,9 +151,9 @@ EXPORT_SYMBOL(do_settimeofday); #ifdef CONFIG_PROFILING #define s390_do_profile(regs) profile_tick(CPU_PROFILING, regs) #define s390_do_profile() profile_tick(CPU_PROFILING) #else #define s390_do_profile(regs) do { ; } while(0) #define s390_do_profile() do { ; } while(0) #endif /* CONFIG_PROFILING */ Loading @@ -160,7 +161,7 @@ EXPORT_SYMBOL(do_settimeofday); * timer_interrupt() needs to keep up the real-time clock, * as well as call the "do_timer()" routine every clocktick */ void account_ticks(struct pt_regs *regs) void account_ticks(void) { __u64 tmp; __u32 ticks; Loading Loading @@ -221,10 +222,10 @@ void account_ticks(struct pt_regs *regs) account_tick_vtime(current); #else while (ticks--) update_process_times(user_mode(regs)); update_process_times(user_mode(get_irq_regs())); #endif s390_do_profile(regs); s390_do_profile(); } #ifdef CONFIG_NO_IDLE_HZ Loading Loading @@ -285,9 +286,11 @@ static inline void stop_hz_timer(void) */ static inline void start_hz_timer(void) { BUG_ON(!in_interrupt()); if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) return; account_ticks(task_pt_regs(current)); account_ticks(); cpu_clear(smp_processor_id(), nohz_cpu_mask); } Loading arch/s390/kernel/traps.c +1 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ extern pgm_check_handler_t do_dat_exception; #ifdef CONFIG_PFAULT extern int pfault_init(void); extern void pfault_fini(void); extern void pfault_interrupt(struct pt_regs *regs, __u16 error_code); extern void pfault_interrupt(__u16 error_code); static ext_int_info_t ext_int_pfault; #endif extern pgm_check_handler_t do_monitor_call; Loading arch/s390/kernel/vtime.c +3 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <asm/s390_ext.h> #include <asm/timer.h> #include <asm/irq_regs.h> static ext_int_info_t ext_int_info_timer; DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); Loading Loading @@ -241,7 +242,7 @@ static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs) /* * Handler for the virtual CPU timer. */ static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) static void do_cpu_timer_interrupt(__u16 error_code) { int cpu; __u64 next, delta; Loading Loading @@ -274,7 +275,7 @@ static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) list_move_tail(&event->entry, &cb_list); } spin_unlock(&vt_list->lock); do_callbacks(&cb_list, regs); do_callbacks(&cb_list, get_irq_regs()); /* next event is first in list */ spin_lock(&vt_list->lock); Loading Loading
arch/s390/kernel/s390_ext.c +6 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <asm/lowcore.h> #include <asm/s390_ext.h> #include <asm/irq_regs.h> #include <asm/irq.h> /* Loading Loading @@ -114,26 +115,28 @@ void do_extint(struct pt_regs *regs, unsigned short code) { ext_int_info_t *p; int index; struct pt_regs *old_regs; irq_enter(); old_regs = set_irq_regs(regs); asm volatile ("mc 0,0"); if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) /** * Make sure that the i/o interrupt did not "overtake" * the last HZ timer interrupt. */ account_ticks(regs); account_ticks(); kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++; index = ext_hash(code); for (p = ext_int_hash[index]; p; p = p->next) { if (likely(p->code == code)) { if (likely(p->handler)) p->handler(regs, code); p->handler(code); } } set_irq_regs(old_regs); irq_exit(); } EXPORT_SYMBOL(register_external_interrupt); EXPORT_SYMBOL(unregister_external_interrupt);
arch/s390/kernel/smp.c +1 −1 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ void machine_power_off_smp(void) * cpus are handled. */ void do_ext_call_interrupt(struct pt_regs *regs, __u16 code) void do_ext_call_interrupt(__u16 code) { unsigned long bits; Loading
arch/s390/kernel/time.c +9 −6 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include <asm/s390_ext.h> #include <asm/div64.h> #include <asm/irq.h> #include <asm/irq_regs.h> #include <asm/timer.h> /* change this if you have some constant time drift */ Loading Loading @@ -150,9 +151,9 @@ EXPORT_SYMBOL(do_settimeofday); #ifdef CONFIG_PROFILING #define s390_do_profile(regs) profile_tick(CPU_PROFILING, regs) #define s390_do_profile() profile_tick(CPU_PROFILING) #else #define s390_do_profile(regs) do { ; } while(0) #define s390_do_profile() do { ; } while(0) #endif /* CONFIG_PROFILING */ Loading @@ -160,7 +161,7 @@ EXPORT_SYMBOL(do_settimeofday); * timer_interrupt() needs to keep up the real-time clock, * as well as call the "do_timer()" routine every clocktick */ void account_ticks(struct pt_regs *regs) void account_ticks(void) { __u64 tmp; __u32 ticks; Loading Loading @@ -221,10 +222,10 @@ void account_ticks(struct pt_regs *regs) account_tick_vtime(current); #else while (ticks--) update_process_times(user_mode(regs)); update_process_times(user_mode(get_irq_regs())); #endif s390_do_profile(regs); s390_do_profile(); } #ifdef CONFIG_NO_IDLE_HZ Loading Loading @@ -285,9 +286,11 @@ static inline void stop_hz_timer(void) */ static inline void start_hz_timer(void) { BUG_ON(!in_interrupt()); if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) return; account_ticks(task_pt_regs(current)); account_ticks(); cpu_clear(smp_processor_id(), nohz_cpu_mask); } Loading
arch/s390/kernel/traps.c +1 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ extern pgm_check_handler_t do_dat_exception; #ifdef CONFIG_PFAULT extern int pfault_init(void); extern void pfault_fini(void); extern void pfault_interrupt(struct pt_regs *regs, __u16 error_code); extern void pfault_interrupt(__u16 error_code); static ext_int_info_t ext_int_pfault; #endif extern pgm_check_handler_t do_monitor_call; Loading
arch/s390/kernel/vtime.c +3 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <asm/s390_ext.h> #include <asm/timer.h> #include <asm/irq_regs.h> static ext_int_info_t ext_int_info_timer; DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); Loading Loading @@ -241,7 +242,7 @@ static void do_callbacks(struct list_head *cb_list, struct pt_regs *regs) /* * Handler for the virtual CPU timer. */ static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) static void do_cpu_timer_interrupt(__u16 error_code) { int cpu; __u64 next, delta; Loading Loading @@ -274,7 +275,7 @@ static void do_cpu_timer_interrupt(struct pt_regs *regs, __u16 error_code) list_move_tail(&event->entry, &cb_list); } spin_unlock(&vt_list->lock); do_callbacks(&cb_list, regs); do_callbacks(&cb_list, get_irq_regs()); /* next event is first in list */ spin_lock(&vt_list->lock); Loading