> > Fix the issue validating egress gdm port in airoha_ppe_foe_entry_prepare > > routine. > > A more interesting question is, why do you see an invalid port? Is the > hardware broken? Something not correctly configured? Are you just > papering over the crack? > > > -static int airoha_ppe_foe_entry_prepare(struct airoha_foe_entry *hwe, > > +static int airoha_ppe_foe_entry_prepare(struct airoha_eth *eth, > > + struct airoha_foe_entry *hwe, > > struct net_device *dev, int type, > > struct airoha_flow_data *data, > > int l4proto) > > @@ -224,6 +225,11 @@ static int airoha_ppe_foe_entry_prepare(struct airoha_foe_entry *hwe, > > if (dev) { > > struct airoha_gdm_port *port = netdev_priv(dev); > > If port is invalid, is dev also invalid? And if dev is invalid, could > dereferencing it to get priv cause an opps? I do not think this is a hw problem. Running bidirectional high load traffic, I got the sporadic crash reported above. In particular, netfilter runs airoha_ppe_flow_offload_replace() providing the egress net_device pointer used in airoha_ppe_foe_entry_prepare(). Debugging with gdb, I discovered the system crashes dereferencing port pointer in airoha_ppe_foe_entry_prepare() (even if dev pointer is not NULL). Adding this sanity check makes the system stable. Please note a similar check is available even in mtk driver [0]. Regards, Lorenzo [0] https://github.com/torvalds/linux/blob/master/drivers/net/ethernet/mediatek/mtk_ppe_offload.c#L220 > > Andrew