diff mbox

[dpdk-dev,net-next,v2] hyper-v: allow access to vmbus from userspace driver

Message ID 20150204152029.65f02d64@urahara (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Stephen Hemminger Feb. 4, 2015, 11:20 p.m. UTC
This is enables the hyper-v driver for DPDK <dev@dpdk.org>.
The hv_uio driver needs to access the shared vmbus monitor
pages.

I would also like to put hv_uio in upstream kernel like other
uio drivers, but need to get API accepted with DPDK first.

Signed-off-by: Stas Egorov <segorov@mirantis.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>

---
v2 - simplify and rename to vmbus_get_monitor_pages

 drivers/hv/connection.c |   20 +++++++++++++++++---
 include/linux/hyperv.h  |    3 +++
 2 files changed, 20 insertions(+), 3 deletions(-)

Comments

Vitaly Kuznetsov Feb. 5, 2015, 11:01 a.m. UTC | #1
Stephen Hemminger <stephen@networkplumber.org> writes:

> This is enables the hyper-v driver for DPDK <dev@dpdk.org>.
> The hv_uio driver needs to access the shared vmbus monitor
> pages.

Why can't we just make vmbus_connection struct public?

>
> I would also like to put hv_uio in upstream kernel like other
> uio drivers, but need to get API accepted with DPDK first.
>
> Signed-off-by: Stas Egorov <segorov@mirantis.com>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
>
> ---
> v2 - simplify and rename to vmbus_get_monitor_pages
>
>  drivers/hv/connection.c |   20 +++++++++++++++++---
>  include/linux/hyperv.h  |    3 +++
>  2 files changed, 20 insertions(+), 3 deletions(-)
>
> --- a/drivers/hv/connection.c	2015-02-03 10:58:51.751752450 -0800
> +++ b/drivers/hv/connection.c	2015-02-04 14:59:51.636194383 -0800
> @@ -64,6 +64,15 @@ static __u32 vmbus_get_next_version(__u3
>  	}
>  }
>
> +void vmbus_get_monitor_pages(unsigned long *int_page,
> +			     unsigned long monitor_pages[2])
> +{

Too weird to be a public interface in my opinion.

> +	*int_page = (unsigned long)vmbus_connection.int_page;
> +	monitor_pages[0] = (unsigned long)vmbus_connection.monitor_pages[0];
> +	monitor_pages[1] = (unsigned long)vmbus_connection.monitor_pages[1];
> +}
> +EXPORT_SYMBOL_GPL(vmbus_get_monitor_pages);
> +
>  static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
>  					__u32 version)
>  {
> @@ -347,10 +356,7 @@ static void process_chn_event(u32 relid)
>  			else
>  				bytes_to_read = 0;
>  		} while (read_state && (bytes_to_read != 0));
> -	} else {
> -		pr_err("no channel callback for relid - %u\n", relid);
>  	}
> -
>  }

This change wasn't mentioned in your commit msg.

>
>  /*
> --- a/include/linux/hyperv.h	2015-02-03 10:58:51.751752450 -0800
> +++ b/include/linux/hyperv.h	2015-02-04 15:00:26.388355012 -0800
> @@ -868,6 +868,9 @@ extern int vmbus_recvpacket_raw(struct v
>
>  extern void vmbus_ontimer(unsigned long data);
>
> +extern void vmbus_get_monitor_pages(unsigned long *int_page,
> +				    unsigned long monitor_pages[2]);
> +
>  /* Base driver object */
>  struct hv_driver {
>  	const char *name;
> _______________________________________________
> devel mailing list
> devel@linuxdriverproject.org
> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Stephen Hemminger Feb. 5, 2015, 4:50 p.m. UTC | #2
On Thu, 05 Feb 2015 12:01:03 +0100
Vitaly Kuznetsov <vkuznets@redhat.com> wrote:

> Stephen Hemminger <stephen@networkplumber.org> writes:
> 
> > This is enables the hyper-v driver for DPDK <dev@dpdk.org>.
> > The hv_uio driver needs to access the shared vmbus monitor
> > pages.
> 
> Why can't we just make vmbus_connection struct public?
> 
> >
> > I would also like to put hv_uio in upstream kernel like other
> > uio drivers, but need to get API accepted with DPDK first.
> >
> > Signed-off-by: Stas Egorov <segorov@mirantis.com>
> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> >
> > ---
> > v2 - simplify and rename to vmbus_get_monitor_pages
> >
> >  drivers/hv/connection.c |   20 +++++++++++++++++---
> >  include/linux/hyperv.h  |    3 +++
> >  2 files changed, 20 insertions(+), 3 deletions(-)
> >
> > --- a/drivers/hv/connection.c	2015-02-03 10:58:51.751752450 -0800
> > +++ b/drivers/hv/connection.c	2015-02-04 14:59:51.636194383 -0800
> > @@ -64,6 +64,15 @@ static __u32 vmbus_get_next_version(__u3
> >  	}
> >  }
> >
> > +void vmbus_get_monitor_pages(unsigned long *int_page,
> > +			     unsigned long monitor_pages[2])
> > +{
> 
> Too weird to be a public interface in my opinion.
> 
> > +	*int_page = (unsigned long)vmbus_connection.int_page;
> > +	monitor_pages[0] = (unsigned long)vmbus_connection.monitor_pages[0];
> > +	monitor_pages[1] = (unsigned long)vmbus_connection.monitor_pages[1];
> > +}
> > +EXPORT_SYMBOL_GPL(vmbus_get_monitor_pages);
> > +
> >  static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
> >  					__u32 version)
> >  {
> > @@ -347,10 +356,7 @@ static void process_chn_event(u32 relid)
> >  			else
> >  				bytes_to_read = 0;
> >  		} while (read_state && (bytes_to_read != 0));
> > -	} else {
> > -		pr_err("no channel callback for relid - %u\n", relid);
> >  	}
> > -
> >  }
> 
> This change wasn't mentioned in your commit msg.

Was in earlier commit. Need to prevent driver from logging error
when device is not claimed directly by existing kernel devices.
diff mbox

Patch

--- a/drivers/hv/connection.c	2015-02-03 10:58:51.751752450 -0800
+++ b/drivers/hv/connection.c	2015-02-04 14:59:51.636194383 -0800
@@ -64,6 +64,15 @@  static __u32 vmbus_get_next_version(__u3
 	}
 }
 
+void vmbus_get_monitor_pages(unsigned long *int_page,
+			     unsigned long monitor_pages[2])
+{
+	*int_page = (unsigned long)vmbus_connection.int_page;
+	monitor_pages[0] = (unsigned long)vmbus_connection.monitor_pages[0];
+	monitor_pages[1] = (unsigned long)vmbus_connection.monitor_pages[1];
+}
+EXPORT_SYMBOL_GPL(vmbus_get_monitor_pages);
+
 static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
 					__u32 version)
 {
@@ -347,10 +356,7 @@  static void process_chn_event(u32 relid)
 			else
 				bytes_to_read = 0;
 		} while (read_state && (bytes_to_read != 0));
-	} else {
-		pr_err("no channel callback for relid - %u\n", relid);
 	}
-
 }
 
 /*
--- a/include/linux/hyperv.h	2015-02-03 10:58:51.751752450 -0800
+++ b/include/linux/hyperv.h	2015-02-04 15:00:26.388355012 -0800
@@ -868,6 +868,9 @@  extern int vmbus_recvpacket_raw(struct v
 
 extern void vmbus_ontimer(unsigned long data);
 
+extern void vmbus_get_monitor_pages(unsigned long *int_page,
+				    unsigned long monitor_pages[2]);
+
 /* Base driver object */
 struct hv_driver {
 	const char *name;