Drivers: hv: Add state to manage batched reading

For the "read" side signaling optimization, the reader has to completely
drain the queue before exiting. Add state to manage this "batched"
reading.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
K. Y. Srinivasan 2012-12-01 06:46:33 -08:00 committed by Greg Kroah-Hartman
parent 6fdf3b2143
commit 132368bd0b
2 changed files with 27 additions and 0 deletions

View File

@ -275,6 +275,13 @@ static void vmbus_onoffer(struct vmbus_channel_message_header *hdr)
return;
}
/*
* By default we setup state to enable batched
* reading. A specific service can choose to
* disable this prior to opening the channel.
*/
newchannel->batched_reading = true;
memcpy(&newchannel->offermsg, offer,
sizeof(struct vmbus_channel_offer_channel));
newchannel->monitor_grp = (u8)offer->monitorid / 32;

View File

@ -882,8 +882,28 @@ struct vmbus_channel {
void (*onchannel_callback)(void *context);
void *channel_callback_context;
/*
* A channel can be marked for efficient (batched)
* reading:
* If batched_reading is set to "true", we read until the
* channel is empty and hold off interrupts from the host
* during the entire read process.
* If batched_reading is set to "false", the client is not
* going to perform batched reading.
*
* By default we will enable batched reading; specific
* drivers that don't want this behavior can turn it off.
*/
bool batched_reading;
};
static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
{
c->batched_reading = state;
}
void vmbus_onmessage(void *context);
int vmbus_request_offers(void);