mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-20 11:11:24 +00:00
Invoke trap() for the alt. ITLB and alt. DTLB interrrupts when
the region is not 6 or 7. This changes the behaviour from inserting a bogus region 6 mapping to a kernel panic.
This commit is contained in:
parent
807d989e82
commit
3ea7ef6aa3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=86290
@ -234,12 +234,13 @@ interruption_Data_TLB:
|
|||||||
.org ia64_vector_table + 0x0c00 // Alternate ITLB vector
|
.org ia64_vector_table + 0x0c00 // Alternate ITLB vector
|
||||||
interruption_Alternate_Instruction_TLB:
|
interruption_Alternate_Instruction_TLB:
|
||||||
mov r16=cr.ifa // where did it happen
|
mov r16=cr.ifa // where did it happen
|
||||||
;;
|
|
||||||
mov r18=pr // save predicates
|
mov r18=pr // save predicates
|
||||||
;;
|
;;
|
||||||
extr.u r17=r16,61,3 // get region number
|
extr.u r17=r16,61,3 // get region number
|
||||||
;;
|
;;
|
||||||
|
cmp.ge p3,p0=5,r17 // RR0-RR5?
|
||||||
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
||||||
|
(p3) br.spnt 9f
|
||||||
;;
|
;;
|
||||||
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
||||||
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
||||||
@ -252,6 +253,8 @@ interruption_Alternate_Instruction_TLB:
|
|||||||
mov pr=r18,0x1ffff // restore predicates
|
mov pr=r18,0x1ffff // restore predicates
|
||||||
;;
|
;;
|
||||||
rfi
|
rfi
|
||||||
|
9: mov pr=r18,0x1ffff // restore predicates
|
||||||
|
TRAP(3)
|
||||||
|
|
||||||
.org ia64_vector_table + 0x1000 // Alternate DTLB vector
|
.org ia64_vector_table + 0x1000 // Alternate DTLB vector
|
||||||
interruption_Alternate_Data_TLB:
|
interruption_Alternate_Data_TLB:
|
||||||
@ -260,7 +263,9 @@ interruption_Alternate_Data_TLB:
|
|||||||
;;
|
;;
|
||||||
extr.u r17=r16,61,3 // get region number
|
extr.u r17=r16,61,3 // get region number
|
||||||
;;
|
;;
|
||||||
|
cmp.ge p3,p0=5,r17 // RR0-RR5?
|
||||||
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
||||||
|
(p3) br.spnt 9f
|
||||||
;;
|
;;
|
||||||
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
||||||
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
||||||
@ -273,6 +278,8 @@ interruption_Alternate_Data_TLB:
|
|||||||
mov pr=r18,0x1ffff // restore predicates
|
mov pr=r18,0x1ffff // restore predicates
|
||||||
;;
|
;;
|
||||||
rfi
|
rfi
|
||||||
|
9: mov pr=r18,0x1ffff // restore predicates
|
||||||
|
TRAP(4)
|
||||||
|
|
||||||
.org ia64_vector_table + 0x1400 // Data Nested TLB vector
|
.org ia64_vector_table + 0x1400 // Data Nested TLB vector
|
||||||
interruption_Data_Nested_TLB:
|
interruption_Data_Nested_TLB:
|
||||||
|
@ -234,12 +234,13 @@ interruption_Data_TLB:
|
|||||||
.org ia64_vector_table + 0x0c00 // Alternate ITLB vector
|
.org ia64_vector_table + 0x0c00 // Alternate ITLB vector
|
||||||
interruption_Alternate_Instruction_TLB:
|
interruption_Alternate_Instruction_TLB:
|
||||||
mov r16=cr.ifa // where did it happen
|
mov r16=cr.ifa // where did it happen
|
||||||
;;
|
|
||||||
mov r18=pr // save predicates
|
mov r18=pr // save predicates
|
||||||
;;
|
;;
|
||||||
extr.u r17=r16,61,3 // get region number
|
extr.u r17=r16,61,3 // get region number
|
||||||
;;
|
;;
|
||||||
|
cmp.ge p3,p0=5,r17 // RR0-RR5?
|
||||||
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
||||||
|
(p3) br.spnt 9f
|
||||||
;;
|
;;
|
||||||
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
||||||
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RX
|
||||||
@ -252,6 +253,8 @@ interruption_Alternate_Instruction_TLB:
|
|||||||
mov pr=r18,0x1ffff // restore predicates
|
mov pr=r18,0x1ffff // restore predicates
|
||||||
;;
|
;;
|
||||||
rfi
|
rfi
|
||||||
|
9: mov pr=r18,0x1ffff // restore predicates
|
||||||
|
TRAP(3)
|
||||||
|
|
||||||
.org ia64_vector_table + 0x1000 // Alternate DTLB vector
|
.org ia64_vector_table + 0x1000 // Alternate DTLB vector
|
||||||
interruption_Alternate_Data_TLB:
|
interruption_Alternate_Data_TLB:
|
||||||
@ -260,7 +263,9 @@ interruption_Alternate_Data_TLB:
|
|||||||
;;
|
;;
|
||||||
extr.u r17=r16,61,3 // get region number
|
extr.u r17=r16,61,3 // get region number
|
||||||
;;
|
;;
|
||||||
|
cmp.ge p3,p0=5,r17 // RR0-RR5?
|
||||||
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
cmp.eq p1,p2=7,r17 // RR7->p1, RR6->p2
|
||||||
|
(p3) br.spnt 9f
|
||||||
;;
|
;;
|
||||||
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
(p1) movl r17=PTE_P+PTE_MA_WB+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
||||||
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
(p2) movl r17=PTE_P+PTE_MA_UC+PTE_A+PTE_D+PTE_PL_KERN+PTE_AR_RW
|
||||||
@ -273,6 +278,8 @@ interruption_Alternate_Data_TLB:
|
|||||||
mov pr=r18,0x1ffff // restore predicates
|
mov pr=r18,0x1ffff // restore predicates
|
||||||
;;
|
;;
|
||||||
rfi
|
rfi
|
||||||
|
9: mov pr=r18,0x1ffff // restore predicates
|
||||||
|
TRAP(4)
|
||||||
|
|
||||||
.org ia64_vector_table + 0x1400 // Data Nested TLB vector
|
.org ia64_vector_table + 0x1400 // Data Nested TLB vector
|
||||||
interruption_Data_Nested_TLB:
|
interruption_Data_Nested_TLB:
|
||||||
|
Loading…
Reference in New Issue
Block a user