Index: arch/parisc/kernel/entry.S =================================================================== RCS file: /var/cvs/linux/arch/parisc/kernel/entry.S,v retrieving revision 1.91 diff -u -p -r1.91 entry.S --- arch/parisc/kernel/entry.S 2002/03/20 05:08:58 1.91 +++ arch/parisc/kernel/entry.S 2002/03/27 04:28:11 @@ -1352,12 +1352,10 @@ dtlb_miss_20: /* Get rid of prot bits and convert to page addr for idtlbt */ - /* FIXME - sign extension of 0xf0... range is incorrect! - ** extrd,s below needs to "f-extend" to "0xf0f0f0...". - ** 4 instances of this to fix. - */ - + extrd,s pte,35,4,t0 depdi 0,63,12,pte /* clear lower 12 bits */ + addi,= 1,t0,0 + extrd,u,*tr pte,56,25,pte extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ idtlbt pte,prot @@ -1424,9 +1422,12 @@ nadtlb_miss_20: /* Get rid of prot bits and convert to page addr for idtlbt */ - depdi 0,63,12,pte /* clear lower 12 bits */ - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ - idtlbt pte,prot + extrd,s pte,35,4,t0 + depdi 0,63,12,pte /* clear lower 12 bits */ + addi,= 1,t0,0 + extrd,u,*tr pte,56,25,pte + extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ + idtlbt pte,prot rfir nop @@ -1674,8 +1675,11 @@ itlb_miss_common_20: /* Get rid of prot bits and convert to page addr for iitlbt */ - depdi 0,63,12,pte /* clear lower 12 bits */ - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ + extrd,s pte,35,4,t0 + depdi 0,63,12,pte /* clear lower 12 bits */ + addi,= 1,t0,0 + extrd,u,*tr pte,56,25,pte + extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ iitlbt pte,prot rfir @@ -1889,11 +1893,13 @@ dbit_nolock_20: extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - /* Get rid of prot bits and convert to page addr for idtlbt */ + extrd,s pte,35,4,t0 + depdi 0,63,12,pte /* clear lower 12 bits */ + addi,= 1,t0,0 + extrd,u,*tr pte,56,25,pte + extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ + idtlbt pte,prot - depdi 0,63,12,pte /* clear lower 12 bits */ - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ - idtlbt pte,prot #ifdef CONFIG_SMP CMPIB=,n 0,spc,dbit_nounlock_20 ldi 1,t1