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

From: KY Srinivasan
Date: Sun Sep 07 2014 - 17:42:04 EST




> -----Original Message-----
> From: Amos Kong [mailto:kongjianjun@xxxxxxxxx]
> Sent: Sunday, September 7, 2014 4:44 AM
> To: KY Srinivasan
> Cc: gregkh@xxxxxxxxxxxxxxxxxxx; open list; devel@xxxxxxxxxxxxxxxxxxxxxx;
> olaf@xxxxxxxxx; apw@xxxxxxxxxxxxx; 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 <kys@xxxxxxxxxxxxx> 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 <kys@xxxxxxxxxxxxx>
> > ---
> > 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 majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/