Re: [parisc] A500 boot crash with 44786880df196a4200c178945c4d41675faf9fb7

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 24.10.2018 17:03, John David Anglin wrote:
> On 2018-10-24 7:59 AM, John David Anglin wrote:
>> The fault occured executing this instruction "stw r31,0(r25)". Register r31 contains the following
>> instruction "pdtlb,l r0(sr1,r3)".  This indicates the fault occurred during alternative patching.
>>
>> I suspect all kernel TLB entries need to be flushed prior to alternative patching to ensure that kernel
>> pages are writeable.
> 
> Looks like this is a problem with set_kernel_text_rw().  Maybe this causes problems:
> 
> int __flush_tlb_range(unsigned long sid, unsigned long start,
>                       unsigned long end)
> {
>         unsigned long flags;
> 
>         if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
>             end - start >= parisc_tlb_flush_threshold) {
>                 flush_tlb_all();
>                 return 1;
>         }
> 
> I believe that we need to disable this optimization until the parisc_tlb_flush_threshold is
> calculated.  I think this crash is related to the occasional crash in parisc_setup_cache_timing().
> 
> Maybe change in cache.c the initial define for parisc_tlb_flush_threshold:
> static unsigned long parisc_tlb_flush_threshold __read_mostly = ~0UL;

If it would run into flush_tlb_all(), then I'd expect that all TLBs have been flushed and
we wouldn't see an issue.
Maybe the info in the cache_info struct, which is used in the assembly of flush_tlb_all_local(),
hasn't been initialized yet and such the whole cache hasn't been flushed?

Helge



[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux