On 05.05.20 19:21, Jakub Kicinski wrote: > On Tue, 5 May 2020 18:25:58 +0200 Julian Wiedmann wrote: >> Implement the .reset callback. Only a full reset is supported. >> >> Signed-off-by: Julian Wiedmann <jwi@xxxxxxxxxxxxx> >> Reviewed-by: Alexandra Winter <wintera@xxxxxxxxxxxxx> >> --- >> drivers/s390/net/qeth_ethtool.c | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/drivers/s390/net/qeth_ethtool.c b/drivers/s390/net/qeth_ethtool.c >> index ebdc03210608..0d12002d0615 100644 >> --- a/drivers/s390/net/qeth_ethtool.c >> +++ b/drivers/s390/net/qeth_ethtool.c >> @@ -193,6 +193,21 @@ static void qeth_get_drvinfo(struct net_device *dev, >> CARD_RDEV_ID(card), CARD_WDEV_ID(card), CARD_DDEV_ID(card)); >> } >> >> +static int qeth_reset(struct net_device *dev, u32 *flags) >> +{ >> + struct qeth_card *card = dev->ml_priv; >> + int rc; >> + >> + if (*flags != ETH_RESET_ALL) >> + return -EINVAL; >> + >> + rc = qeth_schedule_recovery(card); >> + if (!rc) >> + *flags = 0; > > I think it's better if you only clear the flags for things you actually > reset. See the commit message for 7a13240e3718 ("bnxt_en: fix > ethtool_reset_flags ABI violations"). > Not sure I understand - you mean *flags &= ~ETH_RESET_ALL ? Since we're effectively managing a virtual device, those individual ETH_RESET_* flags just don't map very well... This _is_ a full-blown reset, I don't see how we could provide any finer granularity.