hlist_del_init(&entry->list);
        if (entry->hash != 0xffff) {
 -              ppe->foe_table[entry->hash].ib1 &= ~MTK_FOE_IB1_STATE;
 -              ppe->foe_table[entry->hash].ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE,
 -                                                            MTK_FOE_STATE_INVALID);
 +              struct mtk_foe_entry *hwe = mtk_foe_get_entry(ppe, entry->hash);
 +
 +              hwe->ib1 &= ~MTK_FOE_IB1_STATE;
-               hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_UNBIND);
++              hwe->ib1 |= FIELD_PREP(MTK_FOE_IB1_STATE, MTK_FOE_STATE_INVALID);
                dma_wmb();
        }
        entry->hash = 0xffff;
 
                return &bpf_ringbuf_discard_proto;
        case BPF_FUNC_ringbuf_query:
                return &bpf_ringbuf_query_proto;
-       case BPF_FUNC_ringbuf_reserve_dynptr:
-               return &bpf_ringbuf_reserve_dynptr_proto;
-       case BPF_FUNC_ringbuf_submit_dynptr:
-               return &bpf_ringbuf_submit_dynptr_proto;
-       case BPF_FUNC_ringbuf_discard_dynptr:
-               return &bpf_ringbuf_discard_dynptr_proto;
 -      case BPF_FUNC_for_each_map_elem:
 -              return &bpf_for_each_map_elem_proto;
 -      case BPF_FUNC_loop:
 -              return &bpf_loop_proto;
        case BPF_FUNC_strncmp:
                return &bpf_strncmp_proto;
-       case BPF_FUNC_dynptr_from_mem:
-               return &bpf_dynptr_from_mem_proto;
-       case BPF_FUNC_dynptr_read:
-               return &bpf_dynptr_read_proto;
-       case BPF_FUNC_dynptr_write:
-               return &bpf_dynptr_write_proto;
-       case BPF_FUNC_dynptr_data:
-               return &bpf_dynptr_data_proto;
 +      case BPF_FUNC_strtol:
 +              return &bpf_strtol_proto;
 +      case BPF_FUNC_strtoul:
 +              return &bpf_strtoul_proto;
        default:
                break;
        }
                return &bpf_timer_cancel_proto;
        case BPF_FUNC_kptr_xchg:
                return &bpf_kptr_xchg_proto;
 +      case BPF_FUNC_for_each_map_elem:
 +              return &bpf_for_each_map_elem_proto;
 +      case BPF_FUNC_loop:
 +              return &bpf_loop_proto;
 +      case BPF_FUNC_user_ringbuf_drain:
 +              return &bpf_user_ringbuf_drain_proto;
+       case BPF_FUNC_ringbuf_reserve_dynptr:
+               return &bpf_ringbuf_reserve_dynptr_proto;
+       case BPF_FUNC_ringbuf_submit_dynptr:
+               return &bpf_ringbuf_submit_dynptr_proto;
+       case BPF_FUNC_ringbuf_discard_dynptr:
+               return &bpf_ringbuf_discard_dynptr_proto;
+       case BPF_FUNC_dynptr_from_mem:
+               return &bpf_dynptr_from_mem_proto;
+       case BPF_FUNC_dynptr_read:
+               return &bpf_dynptr_read_proto;
+       case BPF_FUNC_dynptr_write:
+               return &bpf_dynptr_write_proto;
+       case BPF_FUNC_dynptr_data:
+               return &bpf_dynptr_data_proto;
        default:
                break;
        }