···16161717#include <asm/lowcore.h>1818#include <asm/s390_ext.h>1919+#include <asm/irq_regs.h>1920#include <asm/irq.h>20212122/*···115114{116115 ext_int_info_t *p;117116 int index;117117+ struct pt_regs *old_regs;118118119119 irq_enter();120120+ old_regs = set_irq_regs(regs);120121 asm volatile ("mc 0,0");121122 if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)122123 /**123124 * Make sure that the i/o interrupt did not "overtake"124125 * the last HZ timer interrupt.125126 */126126- account_ticks(regs);127127+ account_ticks();127128 kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;128129 index = ext_hash(code);129130 for (p = ext_int_hash[index]; p; p = p->next) {130131 if (likely(p->code == code)) {131132 if (likely(p->handler))132132- p->handler(regs, code);133133+ p->handler(code);133134 }134135 }136136+ set_irq_regs(old_regs);135137 irq_exit();136138}137139138140EXPORT_SYMBOL(register_external_interrupt);139141EXPORT_SYMBOL(unregister_external_interrupt);140140-
+1-1
arch/s390/kernel/smp.c
···339339 * cpus are handled.340340 */341341342342-void do_ext_call_interrupt(struct pt_regs *regs, __u16 code)342342+void do_ext_call_interrupt(__u16 code)343343{344344 unsigned long bits;345345
+9-6
arch/s390/kernel/time.c
···3434#include <asm/s390_ext.h>3535#include <asm/div64.h>3636#include <asm/irq.h>3737+#include <asm/irq_regs.h>3738#include <asm/timer.h>38393940/* change this if you have some constant time drift */···151150152151153152#ifdef CONFIG_PROFILING154154-#define s390_do_profile(regs) profile_tick(CPU_PROFILING, regs)153153+#define s390_do_profile() profile_tick(CPU_PROFILING)155154#else156156-#define s390_do_profile(regs) do { ; } while(0)155155+#define s390_do_profile() do { ; } while(0)157156#endif /* CONFIG_PROFILING */158157159158···161160 * timer_interrupt() needs to keep up the real-time clock,162161 * as well as call the "do_timer()" routine every clocktick163162 */164164-void account_ticks(struct pt_regs *regs)163163+void account_ticks(void)165164{166165 __u64 tmp;167166 __u32 ticks;···222221 account_tick_vtime(current);223222#else224223 while (ticks--)225225- update_process_times(user_mode(regs));224224+ update_process_times(user_mode(get_irq_regs()));226225#endif227226228228- s390_do_profile(regs);227227+ s390_do_profile();229228}230229231230#ifdef CONFIG_NO_IDLE_HZ···286285 */287286static inline void start_hz_timer(void)288287{288288+ BUG_ON(!in_interrupt());289289+289290 if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))290291 return;291291- account_ticks(task_pt_regs(current));292292+ account_ticks();292293 cpu_clear(smp_processor_id(), nohz_cpu_mask);293294}294295
···304304 if (kbd->sysrq) {305305 if (kbd->sysrq == K(KT_LATIN, '-')) {306306 kbd->sysrq = 0;307307- handle_sysrq(value, NULL, kbd->tty);307307+ handle_sysrq(value, kbd->tty);308308 return;309309 }310310 if (value == '-') {
+2-2
drivers/s390/char/sclp.c
···324324 * Prepare read event data request if necessary. Start processing of next325325 * request on queue. */326326static void327327-sclp_interrupt_handler(struct pt_regs *regs, __u16 code)327327+sclp_interrupt_handler(__u16 code)328328{329329 struct sclp_req *req;330330 u32 finished_sccb;···743743/* Handler for external interruption used during initialization. Modify744744 * request state to done. */745745static void746746-sclp_check_handler(struct pt_regs *regs, __u16 code)746746+sclp_check_handler(__u16 code)747747{748748 u32 finished_sccb;749749
+5-1
drivers/s390/cio/cio.c
···1919#include <asm/cio.h>2020#include <asm/delay.h>2121#include <asm/irq.h>2222+#include <asm/irq_regs.h>2223#include <asm/setup.h>2324#include "airq.h"2425#include "cio.h"···607606 struct tpi_info *tpi_info;608607 struct subchannel *sch;609608 struct irb *irb;609609+ struct pt_regs *old_regs;610610611611 irq_enter ();612612+ old_regs = set_irq_regs(regs);612613 asm volatile ("mc 0,0");613614 if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer)614615 /**615616 * Make sure that the i/o interrupt did not "overtake"616617 * the last HZ timer interrupt.617618 */618618- account_ticks(regs);619619+ account_ticks();619620 /*620621 * Get interrupt information from lowcore621622 */···655652 * out of the sie which costs more cycles than it saves.656653 */657654 } while (!MACHINE_IS_VM && tpi (NULL) != 0);655655+ set_irq_regs(old_regs);658656 irq_exit ();659657}660658
+2-2
drivers/s390/net/iucv.c
···116116 *Internal function prototypes117117 */118118static void iucv_tasklet_handler(unsigned long);119119-static void iucv_irq_handler(struct pt_regs *, __u16);119119+static void iucv_irq_handler(__u16);120120121121static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0);122122···22512251 * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler().22522252 */22532253static void22542254-iucv_irq_handler(struct pt_regs *regs, __u16 code)22542254+iucv_irq_handler(__u16 code)22552255{22562256 iucv_irqdata *irqdata;22572257
···1010 * Martin Schwidefsky (schwidefsky@de.ibm.com)1111 */12121313-typedef void (*ext_int_handler_t)(struct pt_regs *regs, __u16 code);1313+typedef void (*ext_int_handler_t)(__u16 code);14141515/*1616 * Warning: if you change ext_int_info_t you have to change the