svn commit: r210846 - in head/sys/mips: include mips

Jayachandran C. c.jayachandran at gmail.com
Thu Aug 5 10:56:59 UTC 2010


On Thu, Aug 5, 2010 at 11:43 AM, Alan Cox <alc at cs.rice.edu> wrote:
> Just an observation ...
>
> Jayachandran C. wrote:
>>
>> Author: jchandra
>> Date: Wed Aug  4 14:12:09 2010
>> New Revision: 210846
>> URL: http://svn.freebsd.org/changeset/base/210846
>>
>> Log:
>>  Add 3 level page tables for MIPS in n64.
>>    - 32 bit compilation will still use old 2 level page tables
>>  - re-arrange pmap code so that adding another level is easier
>>  - pmap code for 3 level page tables for n64
>>  - update TLB handler to traverse 3 levels in n64
>>    Reviewed by:        jmallett
>>
>
> [snip]
>>
>>  -              if (pbits != *pte) {
>> -                       if (!atomic_cmpset_int((u_int *)pte, obits,
>> pbits))
>> -                               goto retry;
>> -                       pmap_update_page(pmap, sva, pbits);
>> +                       /* Skip invalid PTEs */
>> +                       if (!pte_test(pte, PTE_V))
>> +                               continue;
>> +retry:
>> +                       obits = pbits = *pte;
>> +                       pa = TLBLO_PTE_TO_PA(pbits);
>> +                       if (page_is_managed(pa) && pte_test(&pbits,
>> PTE_D)) {
>> +                               m = PHYS_TO_VM_PAGE(pa);
>> +                               vm_page_dirty(m);
>> +                               m->md.pv_flags &= ~PV_TABLE_MOD;
>> +                       }
>> +                       pte_clear(&pbits, PTE_D);
>> +                       pte_set(&pbits, PTE_RO);
>> +
>> +                       if (pbits != *pte) {
>> +                               if (!atomic_cmpset_int((u_int *)pte,
>> obits, pbits))
>> +                                       goto retry;
>> +                               pmap_update_page(pmap, sva, pbits);
>> +                       }
>>                }
>>
>
> MIPS doesn't really need to use atomic_cmpset_int() in situations like this
> because the software dirty bit emulation in trap.c acquires the pmap lock.
>  Atomics like this appear to be a carryover from i386 where the
> hardware-managed TLB might concurrently set the modified bit.

Then I guess we should be able to use *pte directly, without pbits,
obits and the retry loop.
Will try this change...

Thanks,
JC.


More information about the freebsd-mips mailing list