• Jiong Wang's avatar
    nfp: bpf: fix latency bug when updating stack index register · 86c28b2d
    Jiong Wang authored
    NFP is using Local Memory to model stack. LM_addr could be used as base of
    a 16 32-bit word region of Local Memory. Then, if the stack offset is
    beyond the current region, the local index needs to be updated. The update
    needs at least three cycles to take effect, therefore the sequence normally
    looks like:
    
      local_csr_wr[ActLMAddr3, gprB_5]
      nop
      nop
      nop
    
    If the local index switch happens on a narrow loads, then the instruction
    preparing value to zero high 32-bit of the destination register could be
    counted as one cycle, the sequence then could be something like:
    
      local_csr_wr[ActLMAddr3, gprB_5]
      nop
      nop
      immed[gprB_5, 0]
    
    However, we have zero extension optimization that zeroing high 32-bit could
    be eliminated, therefore above IMMED insn won't be available for which case
    the first sequence needs to be generated.
    
    Fixes: 0b4de1ff ("nfp: bpf: eliminate zero extension code-gen")
    Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
    Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    86c28b2d
jit.c 125 KB