Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
bdfd88c2
Commit
bdfd88c2
authored
Apr 11, 2003
by
David Mosberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ia64: Merge Alex Williamson's sba_iommu patch.
Various small 2.5.67 fixes.
parent
e57dc450
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
96 additions
and
25 deletions
+96
-25
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/iosapic.c
+2
-4
arch/ia64/kernel/mca.c
arch/ia64/kernel/mca.c
+78
-7
arch/ia64/kernel/mca_asm.S
arch/ia64/kernel/mca_asm.S
+0
-2
arch/ia64/kernel/process.c
arch/ia64/kernel/process.c
+1
-1
arch/ia64/kernel/smpboot.c
arch/ia64/kernel/smpboot.c
+12
-9
arch/ia64/lib/io.c
arch/ia64/lib/io.c
+1
-1
include/asm-ia64/pal.h
include/asm-ia64/pal.h
+2
-1
No files found.
arch/ia64/kernel/iosapic.c
View file @
bdfd88c2
...
@@ -581,9 +581,8 @@ iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
...
@@ -581,9 +581,8 @@ iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
register_intr
(
gsi
,
vector
,
IOSAPIC_LOWEST_PRIORITY
,
polarity
,
trigger
);
register_intr
(
gsi
,
vector
,
IOSAPIC_LOWEST_PRIORITY
,
polarity
,
trigger
);
DBG
(
"ISA: IRQ %u -> GSI 0x%x (%s,%s) -> CPU 0x%04x vector %d
\n
"
,
DBG
(
"ISA: IRQ %u -> GSI 0x%x (%s,%s) -> CPU 0x%04x vector %d
\n
"
,
isa_irq
,
gsi
,
isa_irq
,
gsi
,
polarity
==
IOSAPIC_POL_HIGH
?
"high"
:
"low"
,
polarity
==
IOSAPIC_POL_HIGH
?
"high"
:
"low"
,
trigger
==
IOSAPIC_EDGE
?
"edge"
:
"level"
,
trigger
==
IOSAPIC_EDGE
?
"edge"
:
"level"
,
dest
,
vector
);
dest
,
vector
);
/* program the IOSAPIC routing table */
/* program the IOSAPIC routing table */
set_rte
(
vector
,
dest
);
set_rte
(
vector
,
dest
);
...
@@ -635,7 +634,6 @@ iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
...
@@ -635,7 +634,6 @@ iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
(
ver
&
0xf0
)
>>
4
,
(
ver
&
0x0f
),
phys_addr
,
gsi_base
,
gsi_base
+
num_rte
-
1
);
(
ver
&
0xf0
)
>>
4
,
(
ver
&
0x0f
),
phys_addr
,
gsi_base
,
gsi_base
+
num_rte
-
1
);
if
((
gsi_base
==
0
)
&&
pcat_compat
)
{
if
((
gsi_base
==
0
)
&&
pcat_compat
)
{
/*
/*
* Map the legacy ISA devices into the IOSAPIC data. Some of these may
* Map the legacy ISA devices into the IOSAPIC data. Some of these may
* get reprogrammed later on with data from the ACPI Interrupt Source
* get reprogrammed later on with data from the ACPI Interrupt Source
...
...
arch/ia64/kernel/mca.c
View file @
bdfd88c2
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/kallsyms.h>
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <linux/bootmem.h>
#include <linux/bootmem.h>
#include <linux/acpi.h>
#include <linux/acpi.h>
...
@@ -47,6 +48,7 @@
...
@@ -47,6 +48,7 @@
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/smp.h>
#include <linux/smp.h>
#include <asm/delay.h>
#include <asm/machvec.h>
#include <asm/machvec.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/ptrace.h>
#include <asm/ptrace.h>
...
@@ -139,7 +141,7 @@ ia64_mca_log_sal_error_record(int sal_info_type, int called_from_init)
...
@@ -139,7 +141,7 @@ ia64_mca_log_sal_error_record(int sal_info_type, int called_from_init)
/* Get the MCA error record */
/* Get the MCA error record */
if
(
!
ia64_log_get
(
sal_info_type
,
(
prfunc_t
)
printk
))
if
(
!
ia64_log_get
(
sal_info_type
,
(
prfunc_t
)
printk
))
return
platform_err
;
// no record retrieved
return
platform_err
;
/* no record retrieved */
/* TODO:
/* TODO:
* 1. analyze error logs to determine recoverability
* 1. analyze error logs to determine recoverability
...
@@ -176,18 +178,90 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
...
@@ -176,18 +178,90 @@ ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
ia64_mca_log_sal_error_record
(
SAL_INFO_TYPE_CPE
,
0
);
ia64_mca_log_sal_error_record
(
SAL_INFO_TYPE_CPE
,
0
);
}
}
static
void
show_min_state
(
pal_min_state_area_t
*
minstate
)
{
u64
iip
=
minstate
->
pmsa_iip
+
((
struct
ia64_psr
*
)(
&
minstate
->
pmsa_ipsr
))
->
ri
;
u64
xip
=
minstate
->
pmsa_xip
+
((
struct
ia64_psr
*
)(
&
minstate
->
pmsa_xpsr
))
->
ri
;
printk
(
"NaT bits
\t
%016lx
\n
"
,
minstate
->
pmsa_nat_bits
);
printk
(
"pr
\t\t
%016lx
\n
"
,
minstate
->
pmsa_pr
);
printk
(
"b0
\t\t
%016lx "
,
minstate
->
pmsa_br0
);
print_symbol
(
"%s
\n
"
,
minstate
->
pmsa_br0
);
printk
(
"ar.rsc
\t\t
%016lx
\n
"
,
minstate
->
pmsa_rsc
);
printk
(
"cr.iip
\t\t
%016lx "
,
iip
);
print_symbol
(
"%s
\n
"
,
iip
);
printk
(
"cr.ipsr
\t\t
%016lx
\n
"
,
minstate
->
pmsa_ipsr
);
printk
(
"cr.ifs
\t\t
%016lx
\n
"
,
minstate
->
pmsa_ifs
);
printk
(
"xip
\t\t
%016lx "
,
xip
);
print_symbol
(
"%s
\n
"
,
xip
);
printk
(
"xpsr
\t\t
%016lx
\n
"
,
minstate
->
pmsa_xpsr
);
printk
(
"xfs
\t\t
%016lx
\n
"
,
minstate
->
pmsa_xfs
);
printk
(
"b1
\t\t
%016lx "
,
minstate
->
pmsa_br1
);
print_symbol
(
"%s
\n
"
,
minstate
->
pmsa_br1
);
printk
(
"
\n
static registers r0-r15:
\n
"
);
printk
(
" r0- 3 %016lx %016lx %016lx %016lx
\n
"
,
0UL
,
minstate
->
pmsa_gr
[
0
],
minstate
->
pmsa_gr
[
1
],
minstate
->
pmsa_gr
[
2
]);
printk
(
" r4- 7 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_gr
[
3
],
minstate
->
pmsa_gr
[
4
],
minstate
->
pmsa_gr
[
5
],
minstate
->
pmsa_gr
[
6
]);
printk
(
" r8-11 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_gr
[
7
],
minstate
->
pmsa_gr
[
8
],
minstate
->
pmsa_gr
[
9
],
minstate
->
pmsa_gr
[
10
]);
printk
(
"r11-15 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_gr
[
11
],
minstate
->
pmsa_gr
[
12
],
minstate
->
pmsa_gr
[
13
],
minstate
->
pmsa_gr
[
14
]);
printk
(
"
\n
bank 0:
\n
"
);
printk
(
"r16-19 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank0_gr
[
0
],
minstate
->
pmsa_bank0_gr
[
1
],
minstate
->
pmsa_bank0_gr
[
2
],
minstate
->
pmsa_bank0_gr
[
3
]);
printk
(
"r20-23 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank0_gr
[
4
],
minstate
->
pmsa_bank0_gr
[
5
],
minstate
->
pmsa_bank0_gr
[
6
],
minstate
->
pmsa_bank0_gr
[
7
]);
printk
(
"r24-27 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank0_gr
[
8
],
minstate
->
pmsa_bank0_gr
[
9
],
minstate
->
pmsa_bank0_gr
[
10
],
minstate
->
pmsa_bank0_gr
[
11
]);
printk
(
"r28-31 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank0_gr
[
12
],
minstate
->
pmsa_bank0_gr
[
13
],
minstate
->
pmsa_bank0_gr
[
14
],
minstate
->
pmsa_bank0_gr
[
15
]);
printk
(
"
\n
bank 1:
\n
"
);
printk
(
"r16-19 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank1_gr
[
0
],
minstate
->
pmsa_bank1_gr
[
1
],
minstate
->
pmsa_bank1_gr
[
2
],
minstate
->
pmsa_bank1_gr
[
3
]);
printk
(
"r20-23 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank1_gr
[
4
],
minstate
->
pmsa_bank1_gr
[
5
],
minstate
->
pmsa_bank1_gr
[
6
],
minstate
->
pmsa_bank1_gr
[
7
]);
printk
(
"r24-27 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank1_gr
[
8
],
minstate
->
pmsa_bank1_gr
[
9
],
minstate
->
pmsa_bank1_gr
[
10
],
minstate
->
pmsa_bank1_gr
[
11
]);
printk
(
"r28-31 %016lx %016lx %016lx %016lx
\n
"
,
minstate
->
pmsa_bank1_gr
[
12
],
minstate
->
pmsa_bank1_gr
[
13
],
minstate
->
pmsa_bank1_gr
[
14
],
minstate
->
pmsa_bank1_gr
[
15
]);
}
/*
/*
* This routine will be used to deal with platform specific handling
* This routine will be used to deal with platform specific handling
* of the init, i.e. drop into the kernel debugger on server machine,
* of the init, i.e. drop into the kernel debugger on server machine,
* or if the processor is part of some parallel machine without a
* or if the processor is part of some parallel machine without a
* console, then we would call the appropriate debug hooks here.
* console, then we would call the appropriate debug hooks here.
*/
*/
unsigned
long
tr_val
[
32
],
tr_idx
;
void
void
init_handler_platform
(
struct
pt_regs
*
regs
)
init_handler_platform
(
s
al_log_processor_info_t
*
proc_ptr
,
s
truct
pt_regs
*
regs
)
{
{
/* if a kernel debugger is available call it here else just dump the registers */
/* if a kernel debugger is available call it here else just dump the registers */
show_regs
(
regs
);
/* dump the state info */
/*
* Wait for a bit. On some machines (e.g., HP's zx2000 and zx6000, INIT can be
* generated via the BMC's command-line interface, but since the console is on the
* same serial line, the user will need some time to switch out of the BMC before
* the dump begins.
*/
printk
(
"Delaying for 5 seconds...
\n
"
);
udelay
(
5
*
1000000
);
show_min_state
(
&
SAL_LPI_PSI_INFO
(
proc_ptr
)
->
min_state_area
);
while
(
1
);
/* hang city if no debugger */
while
(
1
);
/* hang city if no debugger */
}
}
...
@@ -263,7 +337,6 @@ ia64_mca_register_cpev (int cpev)
...
@@ -263,7 +337,6 @@ ia64_mca_register_cpev (int cpev)
/*
/*
* routine to process and prepare to dump min_state_save
* routine to process and prepare to dump min_state_save
* information for debugging purposes.
* information for debugging purposes.
*
*/
*/
void
void
ia64_process_min_state_save
(
pal_min_state_area_t
*
pmss
)
ia64_process_min_state_save
(
pal_min_state_area_t
*
pmss
)
...
@@ -272,8 +345,6 @@ ia64_process_min_state_save (pal_min_state_area_t *pmss)
...
@@ -272,8 +345,6 @@ ia64_process_min_state_save (pal_min_state_area_t *pmss)
u64
*
tpmss_ptr
=
(
u64
*
)
pmss
;
u64
*
tpmss_ptr
=
(
u64
*
)
pmss
;
u64
*
return_min_state_ptr
=
ia64_mca_min_state_save_info
;
u64
*
return_min_state_ptr
=
ia64_mca_min_state_save_info
;
/* dump out the min_state_area information */
for
(
i
=
0
;
i
<
max
;
i
++
)
{
for
(
i
=
0
;
i
<
max
;
i
++
)
{
/* copy min-state register info for eventual return to PAL */
/* copy min-state register info for eventual return to PAL */
...
@@ -1089,7 +1160,7 @@ ia64_init_handler (struct pt_regs *regs)
...
@@ -1089,7 +1160,7 @@ ia64_init_handler (struct pt_regs *regs)
/* Clear the INIT SAL logs now that they have been saved in the OS buffer */
/* Clear the INIT SAL logs now that they have been saved in the OS buffer */
ia64_sal_clear_state_info
(
SAL_INFO_TYPE_INIT
);
ia64_sal_clear_state_info
(
SAL_INFO_TYPE_INIT
);
init_handler_platform
(
regs
);
/* call platform specific routines */
init_handler_platform
(
proc_ptr
,
regs
);
/* call platform specific routines */
}
}
/*
/*
...
...
arch/ia64/kernel/mca_asm.S
View file @
bdfd88c2
...
@@ -766,8 +766,6 @@ GLOBAL_ENTRY(ia64_monarch_init_handler)
...
@@ -766,8 +766,6 @@ GLOBAL_ENTRY(ia64_monarch_init_handler)
//
stash
the
information
the
SAL
passed
to
os
//
stash
the
information
the
SAL
passed
to
os
SAL_TO_OS_MCA_HANDOFF_STATE_SAVE
(
r2
)
SAL_TO_OS_MCA_HANDOFF_STATE_SAVE
(
r2
)
;;
;;
//
now
we
want
to
save
information
so
we
can
dump
registers
SAVE_MIN_WITH_COVER
SAVE_MIN_WITH_COVER
;;
;;
mov
r8
=
cr
.
ifa
mov
r8
=
cr
.
ifa
...
...
arch/ia64/kernel/process.c
View file @
bdfd88c2
...
@@ -135,7 +135,7 @@ show_regs (struct pt_regs *regs)
...
@@ -135,7 +135,7 @@ show_regs (struct pt_regs *regs)
((
i
==
sof
-
1
)
||
(
i
%
3
)
==
2
)
?
"
\n
"
:
" "
);
((
i
==
sof
-
1
)
||
(
i
%
3
)
==
2
)
?
"
\n
"
:
" "
);
}
}
}
else
}
else
show_stack
(
0
);
show_stack
(
NULL
);
}
}
void
void
...
...
arch/ia64/kernel/smpboot.c
View file @
bdfd88c2
...
@@ -279,15 +279,6 @@ smp_callin (void)
...
@@ -279,15 +279,6 @@ smp_callin (void)
smp_setup_percpu_timer
();
smp_setup_percpu_timer
();
if
(
!
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT
))
{
/*
* Synchronize the ITC with the BP
*/
Dprintk
(
"Going to syncup ITC with BP.
\n
"
);
ia64_sync_itc
(
0
);
}
/*
/*
* Get our bogomips.
* Get our bogomips.
*/
*/
...
@@ -310,6 +301,18 @@ smp_callin (void)
...
@@ -310,6 +301,18 @@ smp_callin (void)
local_irq_enable
();
local_irq_enable
();
calibrate_delay
();
calibrate_delay
();
local_cpu_data
->
loops_per_jiffy
=
loops_per_jiffy
;
local_cpu_data
->
loops_per_jiffy
=
loops_per_jiffy
;
if
(
!
(
sal_platform_features
&
IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT
))
{
/*
* Synchronize the ITC with the BP. Need to do this after irqs are
* enabled because ia64_sync_itc() calls smp_call_function_single(), which
* calls spin_unlock_bh(), which calls spin_unlock_bh(), which calls
* local_bh_enable(), which bugs out if irqs are not enabled...
*/
Dprintk
(
"Going to syncup ITC with BP.
\n
"
);
ia64_sync_itc
(
0
);
}
/*
/*
* Allow the master to continue.
* Allow the master to continue.
*/
*/
...
...
arch/ia64/lib/io.c
View file @
bdfd88c2
...
@@ -108,7 +108,7 @@ ia64_readl (void *addr)
...
@@ -108,7 +108,7 @@ ia64_readl (void *addr)
unsigned
long
unsigned
long
ia64_readq
(
void
*
addr
)
ia64_readq
(
void
*
addr
)
{
{
return
__ia64_readq
(
addr
)
return
__ia64_readq
(
addr
)
;
}
}
...
...
include/asm-ia64/pal.h
View file @
bdfd88c2
...
@@ -622,7 +622,8 @@ typedef struct pal_min_state_area_s {
...
@@ -622,7 +622,8 @@ typedef struct pal_min_state_area_s {
u64
pmsa_xip
;
/* previous iip */
u64
pmsa_xip
;
/* previous iip */
u64
pmsa_xpsr
;
/* previous psr */
u64
pmsa_xpsr
;
/* previous psr */
u64
pmsa_xfs
;
/* previous ifs */
u64
pmsa_xfs
;
/* previous ifs */
u64
pmsa_reserved
[
71
];
/* pal_min_state_area should total to 1KB */
u64
pmsa_br1
;
/* branch register 1 */
u64
pmsa_reserved
[
70
];
/* pal_min_state_area should total to 1KB */
}
pal_min_state_area_t
;
}
pal_min_state_area_t
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment