On Sun, Jul 11, 2021 at 11:50 PM chensong_2000--- via Xenomai <
[email protected]> wrote:

> i had similar experience, below is my fix.
>
> 在 2021/7/12 上午12:37, Joe Lee via Xenomai 写道:
> > Hi Pals,
> >
> > I applied the ipipe-core-5.4.119-arm64-2.patch on an NXP LS1028A, a
> > 64-bit Armv8 processor.
> >
> > But then there are two problems, could anyone give me some advice ?
> >
> > 1. Warning "not pipeline-safe" when booting like below:
> >
> > [    0.053295] ASID allocator initialised with 32768 entries
> > [    0.058807] rcu: Hierarchical SRCU implementation.
> > [    0.063764] ------------[ cut here ]------------
> > [    0.068435] MSI domain irqchip ITS-pMSI is not pipeline-safe!
> > [    0.068459] WARNING: CPU: 0 PID: 1 at
> > /home/joe/nxp/linux/kernel/irq/msi.c:273 msi_create_irq_dom0
> > [    0.092331] Modules linked in:
> > [    0.095409] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.119-dirty #1
> > [    0.101994] Hardware name: LS1028A RDB Board (DT)
> > [    0.106735] I-pipe domain: Linux
> > [    0.109986] pstate: 60000005 (nZCv daif -PAN -UAO)
> > [    0.114817] pc : msi_create_irq_domain+0x184/0x190
> > [    0.119648] lr : msi_create_irq_domain+0x184/0x190
> > [    0.124477] sp : ffff80001002bca0
> > [    0.127815] x29: ffff80001002bca0 x28: 0000000000000000
> > [    0.133173] x27: 0000000000000000 x26: ffff00007ba0cb90
> > [    0.138530] x25: ffff80001132c928 x24: ffff000079014100
> > [    0.143887] x23: ffff00007ba0cb08 x22: ffff800011749000
> > [    0.149243] x21: ffff80001177e320 x20: ffff000079014100
> > [    0.154600] x19: ffff80001177e2a0 x18: ffffffffffffffff
> > [    0.159957] x17: 0000000068278711 x16: 000000009d48fe30
> > [    0.165314] x15: ffff800011749908 x14: 0000000000000000
> > [    0.170670] x13: 0000000000000001 x12: 0000000000000000
> > [    0.176027] x11: 0000000000000001 x10: ffff80001183f090
> > [    0.181384] x9 : ffff80001002bca0 x8 : 656661732d656e69
> > [    0.186741] x7 : 6c6570697020746f x6 : ffff80001183f0d1
> > [    0.192098] x5 : 0000000000000000 x4 : 0000000000000000
> > [    0.197455] x3 : ffff000079bcee18 x2 : 0000000000000000
> > [    0.202811] x1 : 741db99c0414c500 x0 : 0000000000000000
> > [    0.208168] Call trace:
> > [    0.210631]  msi_create_irq_domain+0x184/0x190
> > [    0.215114]  platform_msi_create_irq_domain+0x1c/0x130
> > [    0.220297]  its_pmsi_init+0xe0/0x154
> > [    0.223988]  do_one_initcall+0x5c/0x1a8
> > [    0.227855]  kernel_init_freeable+0xd0/0x240
> > [    0.232161]  kernel_init+0x10/0x108
> > [    0.235675]  ret_from_fork+0x10/0x1c
> > [    0.239278] ---[ end trace d5b95d1adba5cfc9 ]---
> > [    0.243957] Platform MSI: gic-its@6020000 domain created
> > [    0.249368] PCI/MSI: /interrupt-controller@6000000/gic-its@6020000
> > domain created
> > [    0.256949] fsl-mc MSI:
> > /interrupt-controller@6000000/gic-its@6020000 domain created
>
> --- a/drivers/pci/controller/pcie-brcmstb.c
> +++ b/drivers/pci/controller/pcie-brcmstb.c
> @@ -914,6 +914,7 @@ static struct irq_chip brcm_msi_irq_chip = {
>          .name = "Brcm_MSI",
>          .irq_mask = pci_msi_mask_irq,
>          .irq_unmask = pci_msi_unmask_irq,
> +       .flags = IRQCHIP_PIPELINE_SAFE,
>   };
>
> i'm not sure if it's identical to yours, but "flags =
> IRQCHIP_PIPELINE_SAFE" would be applicable to your case.
>
> >
> > 2. When the ethernet link up, kernel will crash like below.
> >
> > [ 4625.779805] Unable to handle kernel NULL pointer dereference at
> > virtual address 0000000000000000
> > [ 4625.788622] Mem abort info:
> > [ 4625.791418]   ESR = 0x86000004
> > [ 4625.794476]   EC = 0x21: IABT (current EL), IL = 32 bits
> > [ 4625.799801]   SET = 0, FnV = 0
> > [ 4625.802857]   EA = 0, S1PTW = 0
> > [ 4625.806003] user pgtable: 4k pages, 48-bit VAs, pgdp=00000000f693a000
> > [ 4625.812461] [0000000000000000] pgd=0000000000000000
> > [ 4625.817352] Internal error: Oops: 86000004 [#1] PREEMPT SMP
> > [ 4625.822938] Modules linked in: xt_addrtype xt_conntrack
> > crct10dif_ce galcore(O)
> > [ 4625.830277] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W  O
> >    5.4.119-dirty #1
> > [ 4625.838218] Hardware name: LS1028A RDB Board (DT)
> > [ 4625.842932] I-pipe domain: Linux
> > [ 4625.846164] pstate: 40000085 (nZcv daIf -PAN -UAO)
> > [ 4625.850967] pc : 0x0
> > [ 4625.853157] lr : __ipipe_ack_fasteoi_irq+0x1c/0x28
> > [ 4625.857957] sp : ffff800010003f60
> > [ 4625.861277] x29: ffff800010003f60 x28: ffff8000117521c0
> > [ 4625.866603] x27: 0000000000000000 x26: ffff800010004000
> > [ 4625.871929] x25: ffff800010000000 x24: ffff80001183a000
> > [ 4625.877255] x23: 0000000000000000 x22: ffff800011767000
> > [ 4625.882581] x21: 000000000000006d x20: 0000000000000000
> > [ 4625.887906] x19: 000000000000006d x18: 0000000000000000
> > [ 4625.893232] x17: 0000000000000000 x16: 0000000000000000
> > [ 4625.898557] x15: 0000000000000000 x14: 0000000000000000
> > [ 4625.903883] x13: 0000000000000001 x12: 0000000000000000
> > [ 4625.909208] x11: 0000000000000000 x10: 0000000000000040
> > [ 4625.914534] x9 : ffff800011760b50 x8 : ffff800011760b48
> > [ 4625.919859] x7 : ffff000078c0f190 x6 : 0000000000000000
> > [ 4625.925185] x5 : ffff000078c0f000 x4 : 0000000000000000
> > [ 4625.930510] x3 : ffff800011885580 x2 : 0000000000001b80
> > [ 4625.935835] x1 : 0000000000000000 x0 : ffff000078275e28
> > [ 4625.941161] Call trace:
> > [ 4625.943610]  0x0
> > [ 4625.945450]  __ipipe_dispatch_irq+0x174/0x1c0
> > [ 4625.949816]  __ipipe_grab_irq+0x5c/0x98
> > [ 4625.953660]  gic_handle_irq+0x5c/0xe4
> > [ 4625.957329]  handle_arch_irq_pipelined+0x14/0x60
> > [ 4625.961957]  el1_irq+0xc8/0x174
> > [ 4625.965103]  ipipe_unstall_root+0x34/0x50
> > [ 4625.969122]  arch_cpu_idle+0x14/0x20
> > [ 4625.972704]  default_idle_call+0x3c/0x44
> > [ 4625.976635]  do_idle+0xc0/0x150
> > [ 4625.979781]  cpu_startup_entry+0x20/0x48
> > [ 4625.983712]  rest_init+0xd4/0xe0
> > [ 4625.986946]  arch_call_rest_init+0xc/0x14
> > [ 4625.990963]  start_kernel+0x404/0x438
> > [ 4625.994634] Code: bad PC value
> > [ 4625.997697] ---[ end trace d5b95d1adba5cfcc ]---
> > [ 4626.002326] Kernel panic - not syncing: Attempted to kill the idle
> task!
> > [ 4626.009046] SMP: stopping secondary CPUs
> > [ 4626.012979] Kernel Offset: disabled
> > [ 4626.016474] CPU features: 0x0002,21006008
> > [ 4626.020489] Memory Limit: none
> > [ 4626.023552] ---[ end Kernel panic - not syncing: Attempted to kill
> > the idle task! ]---
> >
>
> +++ b/kernel/irq/chip.c
> @@ -986,7 +986,8 @@ void __ipipe_end_level_irq(struct irq_desc *desc)
>
>   void __ipipe_ack_fasteoi_irq(struct irq_desc *desc)
>   {
> -       desc->irq_data.chip->irq_hold(&desc->irq_data);
> +       if(desc && desc->irq_data.chip && desc->irq_data.chip->irq_hold)
> +               desc->irq_data.chip->irq_hold(&desc->irq_data);
>   }
>
> from the oops info, x0 : ffff000078275e28 should be desc,
> desc->irq_data.chip->irq_hold should be NULL.
>
> > Attached my kernel config.
> >
>
> Hi,
   The above fixes make sense, you may want to make sure that adding the
PIPELINE_SAFE flag is all that's needed in the driver.  If you want to make
a formal patch I'll apply these to the next ipipe patch. I should have it
done this week.

Thanks

Greg

Reply via email to