]> err.no Git - linux-2.6/commitdiff
[S390] irq change build fixes.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Fri, 6 Oct 2006 14:38:35 +0000 (16:38 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 6 Oct 2006 14:38:35 +0000 (16:38 +0200)
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
15 files changed:
arch/s390/kernel/s390_ext.c
arch/s390/kernel/smp.c
arch/s390/kernel/time.c
arch/s390/kernel/traps.c
arch/s390/kernel/vtime.c
arch/s390/mm/fault.c
drivers/s390/block/dasd_diag.c
drivers/s390/char/ctrlchar.c
drivers/s390/char/keyboard.c
drivers/s390/char/sclp.c
drivers/s390/cio/cio.c
drivers/s390/net/iucv.c
include/asm-s390/hardirq.h
include/asm-s390/irq_regs.h [new file with mode: 0644]
include/asm-s390/s390_ext.h

index c1b383537fec2cbb3c0f4431c6a7faa80b83a73f..c49ab8c784d27c4806885bc84e75380af10f91e5 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <asm/lowcore.h>
 #include <asm/s390_ext.h>
+#include <asm/irq_regs.h>
 #include <asm/irq.h>
 
 /*
@@ -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);
-
index a8e6199755d4ecc86197aa0f95cfad26314df31b..62822245f9be95e25927ec5461f635d28df6efd7 100644 (file)
@@ -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;
 
index 4bf66cc4a267ee9d8fed39992e52a84c74b4dbd6..2c8c690688cba51ebd917ae8e6c5e19fb6855812 100644 (file)
@@ -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 */
@@ -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 */
 
 
@@ -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;
@@ -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
@@ -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);
 }
 
index 3eb4fab048b8c18f16c6327fb5bc4c096eb11579..05bf3cc8530ac618b243b990cdc64f4de69930fa 100644 (file)
@@ -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;
index 2306cd83fca125f2f995a482f51ac54297bd6e81..1d7d3938b2b1686a860c8a26c43dbc385c1b3917 100644 (file)
@@ -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);
@@ -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;
@@ -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);
index 9c3c19fe62fcd99dfb3893730d7f54b354b731f5..1c323bbfda91cdfce7ae38e8d921533afebedbaf 100644 (file)
@@ -451,7 +451,7 @@ void pfault_fini(void)
 }
 
 asmlinkage void
-pfault_interrupt(struct pt_regs *regs, __u16 error_code)
+pfault_interrupt(__u16 error_code)
 {
        struct task_struct *tsk;
        __u16 subcode;
index 222a8a71a5e8b439dd11df7e31ee389270a1dab9..53db58a68617e618df4b8333ec0ba32f98d4ef45 100644 (file)
@@ -218,7 +218,7 @@ dasd_diag_term_IO(struct dasd_ccw_req * cqr)
 
 /* Handle external interruption. */
 static void
-dasd_ext_handler(struct pt_regs *regs, __u16 code)
+dasd_ext_handler(__u16 code)
 {
        struct dasd_ccw_req *cqr, *next;
        struct dasd_device *device;
index d83eb6358bac503f6a12d30ec533e9023dc458ba..49e9628d9297d632c1b20847957f811bde719f48 100644 (file)
@@ -20,7 +20,7 @@ static int ctrlchar_sysrq_key;
 static void
 ctrlchar_handle_sysrq(void *tty)
 {
-       handle_sysrq(ctrlchar_sysrq_key, NULL, (struct tty_struct *) tty);
+       handle_sysrq(ctrlchar_sysrq_key, (struct tty_struct *) tty);
 }
 
 static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL);
index 3be06569180de398d936796111a07d49753a48ca..e3491a5f52196eeedbad1d7ee3a16f35cd3c2184 100644 (file)
@@ -304,7 +304,7 @@ kbd_keycode(struct kbd_data *kbd, unsigned int keycode)
                if (kbd->sysrq) {
                        if (kbd->sysrq == K(KT_LATIN, '-')) {
                                kbd->sysrq = 0;
-                               handle_sysrq(value, NULL, kbd->tty);
+                               handle_sysrq(value, kbd->tty);
                                return;
                        }
                        if (value == '-') {
index 31e335751d6d5a3788aee3676c2cfb5e4d123a18..8a056df09d6b2dfd33885402103b8ee53be18bfd 100644 (file)
@@ -324,7 +324,7 @@ __sclp_find_req(u32 sccb)
  * Prepare read event data request if necessary. Start processing of next
  * request on queue. */
 static void
-sclp_interrupt_handler(struct pt_regs *regs, __u16 code)
+sclp_interrupt_handler(__u16 code)
 {
        struct sclp_req *req;
        u32 finished_sccb;
@@ -743,7 +743,7 @@ EXPORT_SYMBOL(sclp_reactivate);
 /* Handler for external interruption used during initialization. Modify
  * request state to done. */
 static void
-sclp_check_handler(struct pt_regs *regs, __u16 code)
+sclp_check_handler(__u16 code)
 {
        u32 finished_sccb;
 
index 2e2882daefbbd5985d233e3a011cce15d42c4695..f18b1623cad77a67795226927859bd86859eb347 100644 (file)
@@ -19,6 +19,7 @@
 #include <asm/cio.h>
 #include <asm/delay.h>
 #include <asm/irq.h>
+#include <asm/irq_regs.h>
 #include <asm/setup.h>
 #include "airq.h"
 #include "cio.h"
@@ -606,15 +607,17 @@ do_IRQ (struct pt_regs *regs)
        struct tpi_info *tpi_info;
        struct subchannel *sch;
        struct irb *irb;
+       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();
        /*
         * Get interrupt information from lowcore
         */
@@ -652,6 +655,7 @@ do_IRQ (struct pt_regs *regs)
                 * out of the sie which costs more cycles than it saves.
                 */
        } while (!MACHINE_IS_VM && tpi (NULL) != 0);
+       set_irq_regs(old_regs);
        irq_exit ();
 }
 
index 809dd8d7f47ab034510e88ccf06dfcb39ddf3e15..1476ce2b437cb498f7e47b680767b71cdd80f99e 100644 (file)
@@ -116,7 +116,7 @@ static DEFINE_SPINLOCK(iucv_irq_queue_lock);
  *Internal function prototypes
  */
 static void iucv_tasklet_handler(unsigned long);
-static void iucv_irq_handler(struct pt_regs *, __u16);
+static void iucv_irq_handler(__u16);
 
 static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0);
 
@@ -2251,7 +2251,7 @@ iucv_sever(__u16 pathid, __u8 user_data[16])
  * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler().
  */
 static void
-iucv_irq_handler(struct pt_regs *regs, __u16 code)
+iucv_irq_handler(__u16 code)
 {
        iucv_irqdata *irqdata;
 
index e84b7ef54aac614d968883ca8c8c459b8f67c8ed..c2f6a8782d31b5a901b3e5e8d7dc7dc9ecbad3aa 100644 (file)
@@ -32,6 +32,6 @@ typedef struct {
 
 #define HARDIRQ_BITS   8
 
-extern void account_ticks(struct pt_regs *);
+extern void account_ticks(void);
 
 #endif /* __ASM_HARDIRQ_H */
diff --git a/include/asm-s390/irq_regs.h b/include/asm-s390/irq_regs.h
new file mode 100644 (file)
index 0000000..3dd9c0b
--- /dev/null
@@ -0,0 +1 @@
+#include <asm-generic/irq_regs.h>
index e9a2862b230d1b9143470c7d51f1546a804bad6d..df9b1017b703a6ff9693212f3b170392ce164191 100644 (file)
@@ -10,7 +10,7 @@
  *               Martin Schwidefsky (schwidefsky@de.ibm.com)
  */
 
-typedef void (*ext_int_handler_t)(struct pt_regs *regs, __u16 code);
+typedef void (*ext_int_handler_t)(__u16 code);
 
 /*
  * Warning: if you change ext_int_info_t you have to change the