mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 23:21:46 +00:00
vmbus: add direct isr callback mode
Change the simple boolean batched_reading into a tri-value. For future NAPI support in netvsc driver, the callback needs to occur directly in interrupt handler. Batched mode is also changed to disable host interrupts immediately in interrupt routine (to avoid unnecessary host signals), and the tasklet is rescheduled if more data is detected. Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
631e63a9f3
commit
b71e328297
6 changed files with 55 additions and 41 deletions
|
@ -748,19 +748,21 @@ struct vmbus_channel {
|
|||
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.
|
||||
* A channel can be marked for one of three modes of reading:
|
||||
* BATCHED - callback called from taslket and should read
|
||||
* channel until empty. Interrupts from the host
|
||||
* are masked while read is in process (default).
|
||||
* DIRECT - callback called from tasklet (softirq).
|
||||
* ISR - callback called in interrupt context and must
|
||||
* invoke its own deferred processing.
|
||||
* Host interrupts are disabled and must be re-enabled
|
||||
* when ring is empty.
|
||||
*/
|
||||
|
||||
bool batched_reading;
|
||||
enum hv_callback_mode {
|
||||
HV_CALL_BATCHED,
|
||||
HV_CALL_DIRECT,
|
||||
HV_CALL_ISR
|
||||
} callback_mode;
|
||||
|
||||
bool is_dedicated_interrupt;
|
||||
struct hv_input_signal_event_buffer sig_buf;
|
||||
|
@ -910,9 +912,10 @@ static inline void set_channel_affinity_state(struct vmbus_channel *c,
|
|||
c->affinity_policy = policy;
|
||||
}
|
||||
|
||||
static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
|
||||
static inline void set_channel_read_mode(struct vmbus_channel *c,
|
||||
enum hv_callback_mode mode)
|
||||
{
|
||||
c->batched_reading = state;
|
||||
c->callback_mode = mode;
|
||||
}
|
||||
|
||||
static inline void set_per_channel_state(struct vmbus_channel *c, void *s)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue