Date: Fri, 2 Jul 2010 00:17:07 +0530 From: "Jayachandran C." <c.jayachandran@gmail.com> To: Juli Mallett <jmallett@freebsd.org> Cc: freebsd-mips@freebsd.org Subject: Re: Merging 64 bit changes to -HEAD Message-ID: <AANLkTinGkedtaE0EDUWaK-Csjiy1r5pIK5U9uKWTD_PS@mail.gmail.com> In-Reply-To: <7886D15B-79BF-4BC6-8467-26A8D0FE3D00@gmail.com> References: <AANLkTik8jFkB7FTIIhyjalkfv1c0yXqse57Jzz527uf_@mail.gmail.com> <897604F6-95C4-49A8-B11F-277A74C8DBAE@gmail.com> <AANLkTilfW_zOFKuIa0gJ3ahTo-vGC1VNk99a1H24uFRq@mail.gmail.com> <AANLkTil78NFxH016C7MntD8L3d4rFlCudJ0Lv22L0KCb@mail.gmail.com> <3C0AEF9B-AE0C-4459-A4E1-2C8C30C10FD6@gmail.com> <AANLkTint7Hyf79EH29OLsIfreQRd7dQMdvX9wRq4v_yG@mail.gmail.com> <C6D73C96-3640-4502-A9D7-B3597E37E80A@gmail.com> <AANLkTilQIqF4FCfgLdVcKdcsAUVjCmr89Lu0TEXUFdYN@mail.gmail.com> <25B9A19D-0A6B-4731-8FB1-A2C6722F0E9C@gmail.com> <AANLkTim_9-G6ZuA0vkpLeG4n4GVBpBlxhGBy_7eQoIM4@mail.gmail.com> <C1BD2512-8A48-4AB2-B9CA-C46DDCBE5256@gmail.com> <AANLkTimgyYggdDYchEfb3yskmA0PsttjVzkOSMaWFsjH@mail.gmail.com> <7886D15B-79BF-4BC6-8467-26A8D0FE3D00@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jul 1, 2010 at 10:25 PM, Luiz Otavio O Souza <lists.br@gmail.com> w= rote: > On Jun 30, 2010, at 7:40 PM, Jayachandran C. wrote: >> On Wed, Jun 30, 2010 at 10:38 PM, Luiz Otavio O Souza >> <lists.br@gmail.com> wrote: >>> On Jun 30, 2010, at 9:57 AM, Jayachandran C. wrote: >>> >>>> On Tue, Jun 29, 2010 at 10:32 PM, Luiz Otavio O Souza >>>> <lists.br@gmail.com> wrote: >>>>> >>>>> On Jun 29, 2010, at 8:02 AM, Jayachandran C. wrote: >>>>> >>>>>> On Tue, Jun 29, 2010 at 2:28 AM, Luiz Otavio O Souza <lists.br@gmail= .com> wrote: >>>>>>>> Thanks for the the update. Looks like pmap_map for kernel is faili= ng, >>>>>>>> may be the new tlb_update code causes this. =A0Can you apply the >>>>>>>> attached patch and see if the problem still persists, it replaces = the >>>>>>>> new tlb_update code with the older version. >>>>>>>> >>>>>>>> Obviously not a fix, but if we can narrow it down to this function= , >>>>>>>> fixing will be easier. >>>>>>>> >>>>>>>> JC. >>>>>>>> <try.diff> >>>>>>> >>>>>>> JC, >>>>>>> >>>>>>> This fix the problem ! Thanks ! Now, at least, you know where to lo= ok :) >>>>>> >>>>>> The new tlb_update does not seem to update the tlb entry if the tlbp >>>>>> fails. =A0Here's a patch that should make the new function behave li= ke >>>>>> the older one. =A0The patch is in attached file 'tlb-update.diff'. >>>>>> >>>>>> If that does not work, I'm not sure what the issue is. =A0You could = also >>>>>> try try the nop-change.diff attached. It tries to switch the ssnop >>>>>> used for delay in the new code with 'nop' which was used by the old >>>>>> code. >>>>>> >>>>>> Thanks, >>>>>> JC. >>>>>> <tlb-update.diff><nop-change.diff> >>>>> >>>>> JC, >>>>> >>>>> The nop-change seems to have no effect at all and with the tlb-update= patch the kernel apparently crash at bzero(), here is the dmesg with TRAP_= DEBUG enabled: >>>>> >>>>> http://mips.pastebin.com/jydPvJ20 >>>>> >>>>> So hopefully you are on the right track and this may be something obv= ious to you. >>>> >>>> Not yet :) I really hoped the earlier change would fix it. =A0The numb= er >>>> of nop does not seem to be the issue as it is higher in the C code >>>> than the assembly. >>>> >>>> Can you try the attached patch (try.diff) - this re-implements the >>>> assembly code functionality almost in the same way in C. =A0This reall= y >>>> should work, given that the patch which made it assembly worked... >>>> >>>> If that works can you see if the second attached patch works, this >>>> fixes a potential problem (ie, we should be masking 13bits for TLBHI). >>>> >>>> Both patches should apply directly to SVN (not dependent on each >>>> other, or on previous patches) >>>> >>>> Thanks again, >>>> JC. >>>> <try.diff><pte.h-fix.diff> >>> >>> >>> JC, >>> >>> The try.diff works with or without the pte.h change (at least for a sim= ple boot) and the pte.h change does nothing without the try.diff. >> >> I've attached the final(final.diff) version I want to check-in, can >> you please quickly test it? >> >> If that does not work, can you tell me if the attached alt1.diff or >> alt2.diff works? The try.diff had three changes: handle case of >> index>0, remove pagemask operation, restore full entryhi instead of >> asid. So if the first does not work, this will help narrow down the >> rest of the cases. >> >> Hopefully this is the last iteration :) >> >> JC. >> <final.diff><alt1.diff><alt2.diff> > > > JC, > > The final.diff and alt1.diff crash (into debugger) like the first try.dif= f (here is the dmesg: http://pastebin.com/r2uunZPZ). > > The alt2.diff works, i'll try it a little more (buildworld). > > Feel free to send more tests if needed. Looks like I was on the wrong track, it now looks like the pagemask maybe the cause. My suspicion is that the bootloader setups a pagemask and we never clear it because all the operations save and restore the mask. As far as I can see the TLB exception handler will not update pagemask. Juli - any comments on this? Do you need to save/restore pagemask for some reason, otherwise I will take out the part from tlb.c. Will send out a patch a bit later. JC.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinGkedtaE0EDUWaK-Csjiy1r5pIK5U9uKWTD_PS>