On Mon, 2018-12-10 at 10:18 -0800, Stephen Hemminger wrote:
> This fixes the problem where uio application was unable to
> use multple queues on restart. The root cause is that the callbacks
> are cleared on disconnect. Change to setting up callbacks
> everytime in open.
> 
> Fixes: cdfa835c6e5e ("uio_hv_generic: defer opening vmbus until first
> use")
> Reported-by: Mohammed Gamal <mga...@redhat.com>
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> ---
>  drivers/uio/uio_hv_generic.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/uio/uio_hv_generic.c
> b/drivers/uio/uio_hv_generic.c
> index c2493d011225..3c5169eb23f5 100644
> --- a/drivers/uio/uio_hv_generic.c
> +++ b/drivers/uio/uio_hv_generic.c
> @@ -204,9 +204,11 @@ hv_uio_open(struct uio_info *info, struct inode
> *inode)
>       if (atomic_inc_return(&pdata->refcnt) != 1)
>               return 0;
>  
> +     vmbus_set_chn_rescind_callback(dev->channel,
> hv_uio_rescind);
> +     vmbus_set_sc_create_callback(dev->channel,
> hv_uio_new_channel);
> +
>       ret = vmbus_connect_ring(dev->channel,
>                                hv_uio_channel_cb, dev->channel);
> -
>       if (ret == 0)
>               dev->channel->inbound.ring_buffer->interrupt_mask =
> 1;
>       else
> @@ -334,9 +336,6 @@ hv_uio_probe(struct hv_device *dev,
>               goto fail_close;
>       }
>  
> -     vmbus_set_chn_rescind_callback(channel, hv_uio_rescind);
> -     vmbus_set_sc_create_callback(channel, hv_uio_new_channel);
> -
>       ret = sysfs_create_bin_file(&channel->kobj,
> &ring_buffer_bin_attr);
>       if (ret)
>               dev_notice(&dev->device,

Tested-by: Mohammed Gamal <mga...@redhat.com>
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to