aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2006-10-08 08:23:28 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-08 15:32:35 -0400
commit6d24c8dc2e656b02807aa0506405727d34c0376c (patch)
treeab5399601650d9dec7274bcc1ce22a7e490c1c61 /arch/sparc64
parent0d84438d98777b0f9425d39121c42f47a06878ca (diff)
[PATCH] sparc64 pt_regs fixes
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/sparc64')
-rw-r--r--arch/sparc64/kernel/ebus.c2
-rw-r--r--arch/sparc64/kernel/irq.c5
-rw-r--r--arch/sparc64/kernel/pci_psycho.c6
-rw-r--r--arch/sparc64/kernel/pci_sabre.c6
-rw-r--r--arch/sparc64/kernel/pci_schizo.c8
-rw-r--r--arch/sparc64/kernel/power.c2
-rw-r--r--arch/sparc64/kernel/sbus.c6
-rw-r--r--arch/sparc64/kernel/smp.c6
8 files changed, 24 insertions, 17 deletions
diff --git a/arch/sparc64/kernel/ebus.c b/arch/sparc64/kernel/ebus.c
index 8a9b470e1b65..2df25c2b4071 100644
--- a/arch/sparc64/kernel/ebus.c
+++ b/arch/sparc64/kernel/ebus.c
@@ -79,7 +79,7 @@ static void __ebus_dma_reset(struct ebus_dma_info *p, int no_drain)
79 } 79 }
80} 80}
81 81
82static irqreturn_t ebus_dma_irq(int irq, void *dev_id, struct pt_regs *regs) 82static irqreturn_t ebus_dma_irq(int irq, void *dev_id)
83{ 83{
84 struct ebus_dma_info *p = dev_id; 84 struct ebus_dma_info *p = dev_id;
85 unsigned long flags; 85 unsigned long flags;
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index 4e64724cb9ae..ce05deb1bc92 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -547,9 +547,11 @@ void timer_irq(int irq, struct pt_regs *regs)
547void handler_irq(int irq, struct pt_regs *regs) 547void handler_irq(int irq, struct pt_regs *regs)
548{ 548{
549 struct ino_bucket *bucket; 549 struct ino_bucket *bucket;
550 struct pt_regs *old_regs;
550 551
551 clear_softint(1 << irq); 552 clear_softint(1 << irq);
552 553
554 old_regs = set_irq_regs(regs);
553 irq_enter(); 555 irq_enter();
554 556
555 /* Sliiiick... */ 557 /* Sliiiick... */
@@ -558,12 +560,13 @@ void handler_irq(int irq, struct pt_regs *regs)
558 struct ino_bucket *next = __bucket(bucket->irq_chain); 560 struct ino_bucket *next = __bucket(bucket->irq_chain);
559 561
560 bucket->irq_chain = 0; 562 bucket->irq_chain = 0;
561 __do_IRQ(bucket->virt_irq, regs); 563 __do_IRQ(bucket->virt_irq);
562 564
563 bucket = next; 565 bucket = next;
564 } 566 }
565 567
566 irq_exit(); 568 irq_exit();
569 set_irq_regs(old_regs);
567} 570}
568 571
569struct sun5_timer { 572struct sun5_timer {
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c
index 1ec0aab68c08..fda5db223d96 100644
--- a/arch/sparc64/kernel/pci_psycho.c
+++ b/arch/sparc64/kernel/pci_psycho.c
@@ -533,7 +533,7 @@ static void psycho_check_iommu_error(struct pci_controller_info *p,
533#define PSYCHO_UEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ 533#define PSYCHO_UEAFSR_RESV2 0x00000000007fffffUL /* Reserved */
534#define PSYCHO_UE_AFAR 0x0038UL 534#define PSYCHO_UE_AFAR 0x0038UL
535 535
536static irqreturn_t psycho_ue_intr(int irq, void *dev_id, struct pt_regs *regs) 536static irqreturn_t psycho_ue_intr(int irq, void *dev_id)
537{ 537{
538 struct pci_controller_info *p = dev_id; 538 struct pci_controller_info *p = dev_id;
539 unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_UE_AFSR; 539 unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_UE_AFSR;
@@ -610,7 +610,7 @@ static irqreturn_t psycho_ue_intr(int irq, void *dev_id, struct pt_regs *regs)
610#define PSYCHO_CEAFSR_RESV2 0x00000000007fffffUL /* Reserved */ 610#define PSYCHO_CEAFSR_RESV2 0x00000000007fffffUL /* Reserved */
611#define PSYCHO_CE_AFAR 0x0040UL 611#define PSYCHO_CE_AFAR 0x0040UL
612 612
613static irqreturn_t psycho_ce_intr(int irq, void *dev_id, struct pt_regs *regs) 613static irqreturn_t psycho_ce_intr(int irq, void *dev_id)
614{ 614{
615 struct pci_controller_info *p = dev_id; 615 struct pci_controller_info *p = dev_id;
616 unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_CE_AFSR; 616 unsigned long afsr_reg = p->pbm_A.controller_regs + PSYCHO_CE_AFSR;
@@ -735,7 +735,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm
735 return ret; 735 return ret;
736} 736}
737 737
738static irqreturn_t psycho_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) 738static irqreturn_t psycho_pcierr_intr(int irq, void *dev_id)
739{ 739{
740 struct pci_pbm_info *pbm = dev_id; 740 struct pci_pbm_info *pbm = dev_id;
741 struct pci_controller_info *p = pbm->parent; 741 struct pci_controller_info *p = pbm->parent;
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c
index 45891850b90d..6ec569828c29 100644
--- a/arch/sparc64/kernel/pci_sabre.c
+++ b/arch/sparc64/kernel/pci_sabre.c
@@ -574,7 +574,7 @@ static void sabre_check_iommu_error(struct pci_controller_info *p,
574 spin_unlock_irqrestore(&iommu->lock, flags); 574 spin_unlock_irqrestore(&iommu->lock, flags);
575} 575}
576 576
577static irqreturn_t sabre_ue_intr(int irq, void *dev_id, struct pt_regs *regs) 577static irqreturn_t sabre_ue_intr(int irq, void *dev_id)
578{ 578{
579 struct pci_controller_info *p = dev_id; 579 struct pci_controller_info *p = dev_id;
580 unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_UE_AFSR; 580 unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_UE_AFSR;
@@ -634,7 +634,7 @@ static irqreturn_t sabre_ue_intr(int irq, void *dev_id, struct pt_regs *regs)
634 return IRQ_HANDLED; 634 return IRQ_HANDLED;
635} 635}
636 636
637static irqreturn_t sabre_ce_intr(int irq, void *dev_id, struct pt_regs *regs) 637static irqreturn_t sabre_ce_intr(int irq, void *dev_id)
638{ 638{
639 struct pci_controller_info *p = dev_id; 639 struct pci_controller_info *p = dev_id;
640 unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_CE_AFSR; 640 unsigned long afsr_reg = p->pbm_A.controller_regs + SABRE_CE_AFSR;
@@ -726,7 +726,7 @@ static irqreturn_t sabre_pcierr_intr_other(struct pci_controller_info *p)
726 return ret; 726 return ret;
727} 727}
728 728
729static irqreturn_t sabre_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) 729static irqreturn_t sabre_pcierr_intr(int irq, void *dev_id)
730{ 730{
731 struct pci_controller_info *p = dev_id; 731 struct pci_controller_info *p = dev_id;
732 unsigned long afsr_reg, afar_reg; 732 unsigned long afsr_reg, afar_reg;
diff --git a/arch/sparc64/kernel/pci_schizo.c b/arch/sparc64/kernel/pci_schizo.c
index 75ade83ecc65..66911b126aed 100644
--- a/arch/sparc64/kernel/pci_schizo.c
+++ b/arch/sparc64/kernel/pci_schizo.c
@@ -515,7 +515,7 @@ static void schizo_check_iommu_error(struct pci_controller_info *p,
515#define SCHIZO_UEAFSR_MTAG 0x000000000000e000UL /* Safari */ 515#define SCHIZO_UEAFSR_MTAG 0x000000000000e000UL /* Safari */
516#define SCHIZO_UEAFSR_ECCSYND 0x00000000000001ffUL /* Safari */ 516#define SCHIZO_UEAFSR_ECCSYND 0x00000000000001ffUL /* Safari */
517 517
518static irqreturn_t schizo_ue_intr(int irq, void *dev_id, struct pt_regs *regs) 518static irqreturn_t schizo_ue_intr(int irq, void *dev_id)
519{ 519{
520 struct pci_controller_info *p = dev_id; 520 struct pci_controller_info *p = dev_id;
521 unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_UE_AFSR; 521 unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_UE_AFSR;
@@ -603,7 +603,7 @@ static irqreturn_t schizo_ue_intr(int irq, void *dev_id, struct pt_regs *regs)
603#define SCHIZO_CEAFSR_MTAG 0x000000000000e000UL 603#define SCHIZO_CEAFSR_MTAG 0x000000000000e000UL
604#define SCHIZO_CEAFSR_ECCSYND 0x00000000000001ffUL 604#define SCHIZO_CEAFSR_ECCSYND 0x00000000000001ffUL
605 605
606static irqreturn_t schizo_ce_intr(int irq, void *dev_id, struct pt_regs *regs) 606static irqreturn_t schizo_ce_intr(int irq, void *dev_id)
607{ 607{
608 struct pci_controller_info *p = dev_id; 608 struct pci_controller_info *p = dev_id;
609 unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_CE_AFSR; 609 unsigned long afsr_reg = p->pbm_B.controller_regs + SCHIZO_CE_AFSR;
@@ -778,7 +778,7 @@ static irqreturn_t schizo_pcierr_intr_other(struct pci_pbm_info *pbm)
778 return ret; 778 return ret;
779} 779}
780 780
781static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id, struct pt_regs *regs) 781static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id)
782{ 782{
783 struct pci_pbm_info *pbm = dev_id; 783 struct pci_pbm_info *pbm = dev_id;
784 struct pci_controller_info *p = pbm->parent; 784 struct pci_controller_info *p = pbm->parent;
@@ -933,7 +933,7 @@ static irqreturn_t schizo_pcierr_intr(int irq, void *dev_id, struct pt_regs *reg
933/* We only expect UNMAP errors here. The rest of the Safari errors 933/* We only expect UNMAP errors here. The rest of the Safari errors
934 * are marked fatal and thus cause a system reset. 934 * are marked fatal and thus cause a system reset.
935 */ 935 */
936static irqreturn_t schizo_safarierr_intr(int irq, void *dev_id, struct pt_regs *regs) 936static irqreturn_t schizo_safarierr_intr(int irq, void *dev_id)
937{ 937{
938 struct pci_controller_info *p = dev_id; 938 struct pci_controller_info *p = dev_id;
939 u64 errlog; 939 u64 errlog;
diff --git a/arch/sparc64/kernel/power.c b/arch/sparc64/kernel/power.c
index 0b9c70627ce4..699b24b890df 100644
--- a/arch/sparc64/kernel/power.c
+++ b/arch/sparc64/kernel/power.c
@@ -35,7 +35,7 @@ static void __iomem *power_reg;
35static DECLARE_WAIT_QUEUE_HEAD(powerd_wait); 35static DECLARE_WAIT_QUEUE_HEAD(powerd_wait);
36static int button_pressed; 36static int button_pressed;
37 37
38static irqreturn_t power_handler(int irq, void *dev_id, struct pt_regs *regs) 38static irqreturn_t power_handler(int irq, void *dev_id)
39{ 39{
40 if (button_pressed == 0) { 40 if (button_pressed == 0) {
41 button_pressed = 1; 41 button_pressed = 1;
diff --git a/arch/sparc64/kernel/sbus.c b/arch/sparc64/kernel/sbus.c
index c49a57795743..01d6d869ea2b 100644
--- a/arch/sparc64/kernel/sbus.c
+++ b/arch/sparc64/kernel/sbus.c
@@ -839,7 +839,7 @@ unsigned int sbus_build_irq(void *buscookie, unsigned int ino)
839#define SYSIO_UEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ 839#define SYSIO_UEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */
840#define SYSIO_UEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ 840#define SYSIO_UEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */
841#define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ 841#define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */
842static irqreturn_t sysio_ue_handler(int irq, void *dev_id, struct pt_regs *regs) 842static irqreturn_t sysio_ue_handler(int irq, void *dev_id)
843{ 843{
844 struct sbus_bus *sbus = dev_id; 844 struct sbus_bus *sbus = dev_id;
845 struct sbus_iommu *iommu = sbus->iommu; 845 struct sbus_iommu *iommu = sbus->iommu;
@@ -911,7 +911,7 @@ static irqreturn_t sysio_ue_handler(int irq, void *dev_id, struct pt_regs *regs)
911#define SYSIO_CEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */ 911#define SYSIO_CEAFSR_SIZE 0x00001c0000000000UL /* Bad transfer size 2^SIZE */
912#define SYSIO_CEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */ 912#define SYSIO_CEAFSR_MID 0x000003e000000000UL /* UPA MID causing the fault */
913#define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ 913#define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */
914static irqreturn_t sysio_ce_handler(int irq, void *dev_id, struct pt_regs *regs) 914static irqreturn_t sysio_ce_handler(int irq, void *dev_id)
915{ 915{
916 struct sbus_bus *sbus = dev_id; 916 struct sbus_bus *sbus = dev_id;
917 struct sbus_iommu *iommu = sbus->iommu; 917 struct sbus_iommu *iommu = sbus->iommu;
@@ -988,7 +988,7 @@ static irqreturn_t sysio_ce_handler(int irq, void *dev_id, struct pt_regs *regs)
988#define SYSIO_SBAFSR_SIZE 0x00001c0000000000UL /* Size of transfer */ 988#define SYSIO_SBAFSR_SIZE 0x00001c0000000000UL /* Size of transfer */
989#define SYSIO_SBAFSR_MID 0x000003e000000000UL /* MID causing the error */ 989#define SYSIO_SBAFSR_MID 0x000003e000000000UL /* MID causing the error */
990#define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */ 990#define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */
991static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id, struct pt_regs *regs) 991static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id)
992{ 992{
993 struct sbus_bus *sbus = dev_id; 993 struct sbus_bus *sbus = dev_id;
994 struct sbus_iommu *iommu = sbus->iommu; 994 struct sbus_iommu *iommu = sbus->iommu;
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index f62bf3a2de1a..cc09d8266414 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -31,6 +31,7 @@
31#include <asm/cpudata.h> 31#include <asm/cpudata.h>
32 32
33#include <asm/irq.h> 33#include <asm/irq.h>
34#include <asm/irq_regs.h>
34#include <asm/page.h> 35#include <asm/page.h>
35#include <asm/pgtable.h> 36#include <asm/pgtable.h>
36#include <asm/oplib.h> 37#include <asm/oplib.h>
@@ -1187,6 +1188,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
1187 unsigned long compare, tick, pstate; 1188 unsigned long compare, tick, pstate;
1188 int cpu = smp_processor_id(); 1189 int cpu = smp_processor_id();
1189 int user = user_mode(regs); 1190 int user = user_mode(regs);
1191 struct pt_regs *old_regs;
1190 1192
1191 /* 1193 /*
1192 * Check for level 14 softint. 1194 * Check for level 14 softint.
@@ -1203,8 +1205,9 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
1203 clear_softint(tick_mask); 1205 clear_softint(tick_mask);
1204 } 1206 }
1205 1207
1208 old_regs = set_irq_regs(regs);
1206 do { 1209 do {
1207 profile_tick(CPU_PROFILING, regs); 1210 profile_tick(CPU_PROFILING);
1208 if (!--prof_counter(cpu)) { 1211 if (!--prof_counter(cpu)) {
1209 irq_enter(); 1212 irq_enter();
1210 1213
@@ -1236,6 +1239,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
1236 : /* no outputs */ 1239 : /* no outputs */
1237 : "r" (pstate)); 1240 : "r" (pstate));
1238 } while (time_after_eq(tick, compare)); 1241 } while (time_after_eq(tick, compare));
1242 set_irq_regs(old_regs);
1239} 1243}
1240 1244
1241static void __init smp_setup_percpu_timer(void) 1245static void __init smp_setup_percpu_timer(void)