• Vitaly Kuznetsov's avatar
    hv_netvsc: preserve hw_features on mtu/channels/ringparam changes · aefd80e8
    Vitaly Kuznetsov authored
    rndis_filter_device_add() is called both from netvsc_probe() when we
    initially create the device and from set channels/mtu/ringparam
    routines where we basically remove the device and add it back.
    
    hw_features is reset in rndis_filter_device_add() and filled with
    host data. However, we lose all additional flags which are set outside
    of the driver, e.g. register_netdevice() adds NETIF_F_SOFT_FEATURES and
    many others.
    
    Unfortunately, calls to rndis_{query_hwcaps(), _set_offload_params()}
    calls cannot be avoided on every RNDIS reset: host expects us to set
    required features explicitly. Moreover, in theory hardware capabilities
    can change and we need to reflect the change in hw_features.
    
    Reset net->hw_features bits according to host data in
    rndis_netdev_set_hwcaps(), clear corresponding feature bits
    from net->features in case some features went missing (will never happen
    in real life I guess but let's be consistent).
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Reviewed-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aefd80e8
netvsc_drv.c 54.6 KB