From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: devel@linuxdriverproject.org, haiyangz@microsoft.com,
sthemmin@microsoft.com, netdev@vger.kernel.org
Subject: Re: [PATCH net-next 0/1] netvsc: another VF datapath fix
Date: Wed, 09 Aug 2017 11:03:05 +0200 [thread overview]
Message-ID: <87r2wlxgdy.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20170808085354.4208a612@xeon-e3> (Stephen Hemminger's message of "Tue, 8 Aug 2017 08:53:54 -0700")
Stephen Hemminger <stephen@networkplumber.org> writes:
> The following would allow udev a chance at the device.
>
This would of course work but the approach is a bit hackish and can
still fail on a loaded system. Raising the pause interval would be an
option, but again, probably not the best one.
Let me try to send an RFC removing the check it dev_change_name() and if
it turns out that it can't be removed we can go back to your patch. But
in case it can we can leave without it.
Thanks,
> From 37fb240a6107834c3dd3f57caede9d73b807f414 Mon Sep 17 00:00:00 2001
> From: Stephen Hemminger <sthemmin@microsoft.com>
> Date: Tue, 8 Aug 2017 08:39:24 -0700
> Subject: [PATCH] netvsc: delay setup of VF device
>
> When VF device is discovered, delay bring it automatically up in
> order to allow userspace to some simple changes (like renaming).
>
> Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
> ---
> drivers/net/hyperv/hyperv_net.h | 2 +-
> drivers/net/hyperv/netvsc_drv.c | 11 ++++++-----
> 2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
> index d1ea99a12cf2..f620c90307ed 100644
> --- a/drivers/net/hyperv/hyperv_net.h
> +++ b/drivers/net/hyperv/hyperv_net.h
> @@ -723,7 +723,7 @@ struct net_device_context {
> /* State to manage the associated VF interface. */
> struct net_device __rcu *vf_netdev;
> struct netvsc_vf_pcpu_stats __percpu *vf_stats;
> - struct work_struct vf_takeover;
> + struct delayed_work vf_takeover;
>
> /* 1: allocated, serial number is valid. 0: not allocated */
> u32 vf_alloc;
> diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
> index 7ebf0e10e62b..1dff160368a3 100644
> --- a/drivers/net/hyperv/netvsc_drv.c
> +++ b/drivers/net/hyperv/netvsc_drv.c
> @@ -47,6 +47,7 @@
>
> #define RING_SIZE_MIN 64
> #define LINKCHANGE_INT (2 * HZ)
> +#define VF_TAKEOVER_INT (HZ / 10)
>
> static int ring_size = 128;
> module_param(ring_size, int, S_IRUGO);
> @@ -1570,7 +1571,7 @@ static int netvsc_vf_join(struct net_device *vf_netdev,
> /* set slave flag before open to prevent IPv6 addrconf */
> vf_netdev->flags |= IFF_SLAVE;
>
> - schedule_work(&ndev_ctx->vf_takeover);
> + schedule_delayed_work(&ndev_ctx->vf_takeover, VF_TAKEOVER_INT);
>
> netdev_info(vf_netdev, "joined to %s\n", ndev->name);
> return 0;
> @@ -1608,12 +1609,12 @@ static void __netvsc_vf_setup(struct net_device *ndev,
> static void netvsc_vf_setup(struct work_struct *w)
> {
> struct net_device_context *ndev_ctx
> - = container_of(w, struct net_device_context, vf_takeover);
> + = container_of(w, struct net_device_context, vf_takeover.work);
> struct net_device *ndev = hv_get_drvdata(ndev_ctx->device_ctx);
> struct net_device *vf_netdev;
>
> if (!rtnl_trylock()) {
> - schedule_work(w);
> + schedule_delayed_work(&ndev_ctx->vf_takeover, 0);
> return;
> }
>
> @@ -1717,7 +1718,7 @@ static int netvsc_unregister_vf(struct net_device *vf_netdev)
> return NOTIFY_DONE;
>
> net_device_ctx = netdev_priv(ndev);
> - cancel_work_sync(&net_device_ctx->vf_takeover);
> + cancel_delayed_work_sync(&net_device_ctx->vf_takeover);
>
> netdev_info(ndev, "VF unregistering: %s\n", vf_netdev->name);
>
> @@ -1759,7 +1760,7 @@ static int netvsc_probe(struct hv_device *dev,
>
> spin_lock_init(&net_device_ctx->lock);
> INIT_LIST_HEAD(&net_device_ctx->reconfig_events);
> - INIT_WORK(&net_device_ctx->vf_takeover, netvsc_vf_setup);
> + INIT_DELAYED_WORK(&net_device_ctx->vf_takeover, netvsc_vf_setup);
>
> net_device_ctx->vf_stats
> = netdev_alloc_pcpu_stats(struct netvsc_vf_pcpu_stats);
--
Vitaly
next prev parent reply other threads:[~2017-08-09 9:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-07 18:29 [PATCH net-next 0/1] netvsc: another VF datapath fix Stephen Hemminger
2017-08-07 18:30 ` [PATCH net-next 1/1] netvsc: make sure and unregister datapath Stephen Hemminger
2017-08-09 1:10 ` David Miller
2017-08-08 14:03 ` [PATCH net-next 0/1] netvsc: another VF datapath fix Vitaly Kuznetsov
2017-08-08 15:15 ` Stephen Hemminger
2017-08-08 15:24 ` Vitaly Kuznetsov
2017-08-08 15:29 ` Stephen Hemminger
2017-08-08 15:42 ` Vitaly Kuznetsov
2017-08-08 15:53 ` Stephen Hemminger
2017-08-09 9:03 ` Vitaly Kuznetsov [this message]
2017-08-09 14:41 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r2wlxgdy.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=devel@linuxdriverproject.org \
--cc=haiyangz@microsoft.com \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
--cc=sthemmin@microsoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.