@@ -3778,6 +3778,7 @@ static void mvneta_percpu_disable(void *arg)
3778
3778
static int mvneta_change_mtu (struct net_device * dev , int mtu )
3779
3779
{
3780
3780
struct mvneta_port * pp = netdev_priv (dev );
3781
+ struct bpf_prog * prog = pp -> xdp_prog ;
3781
3782
int ret ;
3782
3783
3783
3784
if (!IS_ALIGNED (MVNETA_RX_PKT_SIZE (mtu ), 8 )) {
@@ -3786,8 +3787,11 @@ static int mvneta_change_mtu(struct net_device *dev, int mtu)
3786
3787
mtu = ALIGN (MVNETA_RX_PKT_SIZE (mtu ), 8 );
3787
3788
}
3788
3789
3789
- if (pp -> xdp_prog && mtu > MVNETA_MAX_RX_BUF_SIZE ) {
3790
- netdev_info (dev , "Illegal MTU value %d for XDP mode\n" , mtu );
3790
+ if (prog && !prog -> aux -> xdp_has_frags &&
3791
+ mtu > MVNETA_MAX_RX_BUF_SIZE ) {
3792
+ netdev_info (dev , "Illegal MTU %d for XDP prog without frags\n" ,
3793
+ mtu );
3794
+
3791
3795
return - EINVAL ;
3792
3796
}
3793
3797
@@ -4528,8 +4532,9 @@ static int mvneta_xdp_setup(struct net_device *dev, struct bpf_prog *prog,
4528
4532
struct mvneta_port * pp = netdev_priv (dev );
4529
4533
struct bpf_prog * old_prog ;
4530
4534
4531
- if (prog && dev -> mtu > MVNETA_MAX_RX_BUF_SIZE ) {
4532
- NL_SET_ERR_MSG_MOD (extack , "MTU too large for XDP" );
4535
+ if (prog && !prog -> aux -> xdp_has_frags &&
4536
+ dev -> mtu > MVNETA_MAX_RX_BUF_SIZE ) {
4537
+ NL_SET_ERR_MSG_MOD (extack , "prog does not support XDP frags" );
4533
4538
return - EOPNOTSUPP ;
4534
4539
}
4535
4540
0 commit comments