virtnet_clear_guest_offloads(vi);
                }
                if (!old_prog)
-                       xdp_features_set_redirect_target(dev, false);
+                       xdp_features_set_redirect_target(dev, true);
        } else {
                xdp_features_clear_redirect_target(dev);
                vi->xdp_enabled = false;
        INIT_WORK(&vi->config_work, virtnet_config_changed_work);
        spin_lock_init(&vi->refill_lock);
 
-       if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF))
+       if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) {
                vi->mergeable_rx_bufs = true;
+               dev->xdp_features |= NETDEV_XDP_ACT_RX_SG;
+       }
 
        if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_NOTF_COAL)) {
                vi->rx_usecs = 0;