ixgbe_free_rx_resources(adapter->rx_ring[i]);
 }
 
+/**
+ * ixgbe_max_xdp_frame_size - returns the maximum allowed frame size for XDP
+ * @adapter: device handle, pointer to adapter
+ */
+static int ixgbe_max_xdp_frame_size(struct ixgbe_adapter *adapter)
+{
+       if (PAGE_SIZE >= 8192 || adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)
+               return IXGBE_RXBUFFER_2K;
+       else
+               return IXGBE_RXBUFFER_3K;
+}
+
 /**
  * ixgbe_change_mtu - Change the Maximum Transfer Unit
  * @netdev: network interface device structure
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
 
-       if (adapter->xdp_prog) {
+       if (ixgbe_enabled_xdp_adapter(adapter)) {
                int new_frame_size = new_mtu + ETH_HLEN + ETH_FCS_LEN +
                                     VLAN_HLEN;
-               int i;
-
-               for (i = 0; i < adapter->num_rx_queues; i++) {
-                       struct ixgbe_ring *ring = adapter->rx_ring[i];
 
-                       if (new_frame_size > ixgbe_rx_bufsz(ring)) {
-                               e_warn(probe, "Requested MTU size is not supported with XDP\n");
-                               return -EINVAL;
-                       }
+               if (new_frame_size > ixgbe_max_xdp_frame_size(adapter)) {
+                       e_warn(probe, "Requested MTU size is not supported with XDP\n");
+                       return -EINVAL;
                }
        }