xen-netback: split event channels support for Xen backend driver
Netback and netfront only use one event channel to do TX / RX notification, which may cause unnecessary wake-up of processing routines. This patch adds a new feature called feature-split-event-channels to netback, enabling it to handle TX and RX events separately. Netback will use tx_irq to notify guest for TX completion, rx_irq for RX notification. If frontend doesn't support this feature, tx_irq equals to rx_irq. Signed-off-by: Wei Liu <wei.liu2@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -57,8 +57,12 @@ struct xenvif {
|
||||
|
||||
u8 fe_dev_addr[6];
|
||||
|
||||
/* Physical parameters of the comms window. */
|
||||
unsigned int irq;
|
||||
/* When feature-split-event-channels = 0, tx_irq = rx_irq. */
|
||||
unsigned int tx_irq;
|
||||
unsigned int rx_irq;
|
||||
/* Only used when feature-split-event-channels = 1 */
|
||||
char tx_irq_name[IFNAMSIZ+4]; /* DEVNAME-tx */
|
||||
char rx_irq_name[IFNAMSIZ+4]; /* DEVNAME-rx */
|
||||
|
||||
/* List of frontends to notify after a batch of frames sent. */
|
||||
struct list_head notify_list;
|
||||
@@ -113,7 +117,8 @@ struct xenvif *xenvif_alloc(struct device *parent,
|
||||
unsigned int handle);
|
||||
|
||||
int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref,
|
||||
unsigned long rx_ring_ref, unsigned int evtchn);
|
||||
unsigned long rx_ring_ref, unsigned int tx_evtchn,
|
||||
unsigned int rx_evtchn);
|
||||
void xenvif_disconnect(struct xenvif *vif);
|
||||
|
||||
void xenvif_get(struct xenvif *vif);
|
||||
@@ -158,4 +163,6 @@ void xenvif_carrier_off(struct xenvif *vif);
|
||||
/* Returns number of ring slots required to send an skb to the frontend */
|
||||
unsigned int xen_netbk_count_skb_slots(struct xenvif *vif, struct sk_buff *skb);
|
||||
|
||||
extern bool separate_tx_rx_irq;
|
||||
|
||||
#endif /* __XEN_NETBACK__COMMON_H__ */
|
||||
|
Reference in New Issue
Block a user