[PATCH V2 1/1] Drivers: hv: vmbus: Enable interrupt driven flow control

2014-09-05 Thread K. Y. Srinivasan
In win8 we have a feature that allows for interrupt driven flow management
for host/guest communication. For instance, if the host were blocked because
there was no space available in the ringbuffer, the host could request that the
guest send an interrupt when space becomes available in the ringbuffer (when
the guest drains the ringbuffer).

While this feature was implemented in the guest a while ago, we had not
advertised that the guest supported this feature. This patch advertises
the support to the host.

For pre-win8 hosts, this has no effect since the size of the ringbuffer
control structure has not changed and all changes have been backward
compatible - unused/reserved space has been used to implement this
feature.

In this version of the patch I have cleaned up the commit log based on
feedback from Greg KH.

Signed-off-by: K. Y. Srinivasan 
---
 drivers/hv/ring_buffer.c |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
index 15db66b..6361d12 100644
--- a/drivers/hv/ring_buffer.c
+++ b/drivers/hv/ring_buffer.c
@@ -361,6 +361,11 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info 
*ring_info,
ring_info->ring_buffer->read_index =
ring_info->ring_buffer->write_index = 0;
 
+   /*
+* Set the feature bit for enabling flow control.
+*/
+   ring_info->ring_buffer->feature_bits.value = 1;
+
ring_info->ring_size = buflen;
ring_info->ring_datasize = buflen - sizeof(struct hv_ring_buffer);
 
-- 
1.7.4.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH V2 1/1] Drivers: hv: vmbus: Enable interrupt driven flow control

2014-09-07 Thread Amos Kong
On Sat, Sep 6, 2014 at 8:29 AM, K. Y. Srinivasan  wrote:
>
> In win8 we have a feature that allows for interrupt driven flow management
> for host/guest communication. For instance, if the host were blocked because
> there was no space available in the ringbuffer, the host could request that 
> the
> guest send an interrupt when space becomes available in the ringbuffer (when
> the guest drains the ringbuffer).
>
> While this feature was implemented in the guest a while ago, we had not
> advertised that the guest supported this feature. This patch advertises
> the support to the host.
>
> For pre-win8 hosts, this has no effect since the size of the ringbuffer
> control structure has not changed and all changes have been backward
> compatible - unused/reserved space has been used to implement this
> feature.
>
> In this version of the patch I have cleaned up the commit log based on
> feedback from Greg KH.
>
> Signed-off-by: K. Y. Srinivasan 
> ---
>  drivers/hv/ring_buffer.c |5 +
>  1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
> index 15db66b..6361d12 100644
> --- a/drivers/hv/ring_buffer.c
> +++ b/drivers/hv/ring_buffer.c
> @@ -361,6 +361,11 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info 
> *ring_info,
> ring_info->ring_buffer->read_index =
> ring_info->ring_buffer->write_index = 0;
>
> +   /*
> +* Set the feature bit for enabling flow control.
> +*/
> +   ring_info->ring_buffer->feature_bits.value = 1;
> +

This feature is enabled, do we need to reset  pending_send_sz and
reserved1[12], reserved1[4028] here?

> ring_info->ring_size = buflen;
> ring_info->ring_datasize = buflen - sizeof(struct hv_ring_buffer);
>
> --
> 1.7.4.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


RE: [PATCH V2 1/1] Drivers: hv: vmbus: Enable interrupt driven flow control

2014-09-07 Thread KY Srinivasan


> -Original Message-
> From: Amos Kong [mailto:kongjian...@gmail.com]
> Sent: Sunday, September 7, 2014 4:44 AM
> To: KY Srinivasan
> Cc: gre...@linuxfoundation.org; open list; de...@linuxdriverproject.org;
> o...@aepfle.de; a...@canonical.com; Jason Wang
> Subject: Re: [PATCH V2 1/1] Drivers: hv: vmbus: Enable interrupt driven flow
> control
> 
> On Sat, Sep 6, 2014 at 8:29 AM, K. Y. Srinivasan  wrote:
> >
> > In win8 we have a feature that allows for interrupt driven flow
> > management for host/guest communication. For instance, if the host
> > were blocked because there was no space available in the ringbuffer,
> > the host could request that the guest send an interrupt when space
> > becomes available in the ringbuffer (when the guest drains the ringbuffer).
> >
> > While this feature was implemented in the guest a while ago, we had
> > not advertised that the guest supported this feature. This patch
> > advertises the support to the host.
> >
> > For pre-win8 hosts, this has no effect since the size of the
> > ringbuffer control structure has not changed and all changes have been
> > backward compatible - unused/reserved space has been used to
> implement
> > this feature.
> >
> > In this version of the patch I have cleaned up the commit log based on
> > feedback from Greg KH.
> >
> > Signed-off-by: K. Y. Srinivasan 
> > ---
> >  drivers/hv/ring_buffer.c |5 +
> >  1 files changed, 5 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index
> > 15db66b..6361d12 100644
> > --- a/drivers/hv/ring_buffer.c
> > +++ b/drivers/hv/ring_buffer.c
> > @@ -361,6 +361,11 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info
> *ring_info,
> > ring_info->ring_buffer->read_index =
> > ring_info->ring_buffer->write_index = 0;
> >
> > +   /*
> > +* Set the feature bit for enabling flow control.
> > +*/
> > +   ring_info->ring_buffer->feature_bits.value = 1;
> > +
> 
> This feature is enabled, do we need to reset  pending_send_sz and
> reserved1[12], reserved1[4028] here?
> 
> > ring_info->ring_size = buflen;
> > ring_info->ring_datasize = buflen - sizeof(struct
> > hv_ring_buffer);
> >

All the pages for the ring buffer have already been zeroed out including the 
shared control structure.
Look at vmbus_open() (drivers/hv/channel.c) where we allocate the ring buffer - 
we pass in the flag to
Zero out the pages.

Regards,

K. Y
> > --
> > 1.7.4.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe
> > linux-kernel" in the body of a message to majord...@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel