On Tue, May 05, 2020 at 02:18:21AM +0200, Andrew Lunn wrote:
> Given that it takes time to run a cable test, send a notify message at
> the start, as well as when it is completed.
> 
> Signed-off-by: Andrew Lunn <and...@lunn.ch>
> ---
>  net/ethtool/cabletest.c | 39 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> diff --git a/net/ethtool/cabletest.c b/net/ethtool/cabletest.c
> index f500454a54eb..e59f570494c0 100644
> --- a/net/ethtool/cabletest.c
> +++ b/net/ethtool/cabletest.c
> @@ -20,6 +20,41 @@ cable_test_act_policy[ETHTOOL_A_CABLE_TEST_MAX + 1] = {
>       [ETHTOOL_A_CABLE_TEST_HEADER]           = { .type = NLA_NESTED },
>  };
>  
> +static int ethnl_cable_test_started(struct phy_device *phydev)
> +{
> +     struct sk_buff *skb;
> +     int err = -ENOMEM;
> +     void *ehdr;
> +
> +     skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
> +     if (!skb)
> +             goto out;
> +
> +     ehdr = ethnl_bcastmsg_put(skb, ETHTOOL_MSG_CABLE_TEST_NTF);
> +     if (!ehdr) {
> +             err = -EINVAL;

This should rather be -EMSGSIZE. But as we are not going to use the
return value anyway, it's only cosmetic problem.

Michal

Reviewed-by: Michal Kubecek <mkube...@suse.cz>

> +             goto out;
> +     }
> +
> +     err = ethnl_fill_reply_header(skb, phydev->attached_dev,
> +                                   ETHTOOL_A_CABLE_TEST_NTF_HEADER);
> +     if (err)
> +             goto out;
> +
> +     err = nla_put_u8(skb, ETHTOOL_A_CABLE_TEST_NTF_STATUS,
> +                      ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED);
> +     if (err)
> +             goto out;
> +
> +     genlmsg_end(skb, ehdr);
> +
> +     return ethnl_multicast(skb, phydev->attached_dev);
> +
> +out:
> +     nlmsg_free(skb);
> +     return err;
> +}
> +
>  int ethnl_act_cable_test(struct sk_buff *skb, struct genl_info *info)
>  {
>       struct nlattr *tb[ETHTOOL_A_CABLE_TEST_MAX + 1];
> @@ -54,6 +89,10 @@ int ethnl_act_cable_test(struct sk_buff *skb, struct 
> genl_info *info)
>       ret = phy_start_cable_test(dev->phydev, info->extack);
>  
>       ethnl_ops_complete(dev);
> +
> +     if (!ret)
> +             ethnl_cable_test_started(dev->phydev);
> +
>  out_rtnl:
>       rtnl_unlock();
>  out_dev_put:
> -- 
> 2.26.2
> 

Reply via email to