> On 3/15/25 3:59 PM, Lorenzo Bianconi wrote: > >>> 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]. > > I agree with Andrew, you need a better understanding of the root cause. > This really looks like papering over some deeper issue. > > AFAICS 'dev' is fetched from the airoha driver itself a few lines > before. Possibly you should double check that code. Are you referring to airoha_get_dsa_port() routine? I think dev pointer in airoha_ppe_foe_entry_prepare() is not strictly necessary a device from a driver itself since it is an egress device and the flowtable can contain even a wlan or a vlan device. In this case airoha_get_dsa_port() will just return the original device pointer and we can't assume priv pointer points to a airoha_gdm_port struct. Agree? Regards, Lorenzo > > Thanks, > > Paolo > >