From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [RFC PATCH V5 11/14] xen: introduce xen_event_channel_query_extended_abis Date: Tue, 19 Mar 2013 15:22:05 +0000 Message-ID: <1363706528-27141-12-git-send-email-wei.liu2@citrix.com> References: <1363706528-27141-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1363706528-27141-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org, konrad.wilk@oracle.com Cc: Wei Liu , ian.campbell@citrix.com, jbeulich@suse.com, david.vrabel@citrix.com List-Id: xen-devel@lists.xenproject.org Signed-off-by: Wei Liu --- drivers/xen/events.c | 37 +++++++++++++++++++++++++++++++++++++ include/xen/events.h | 3 +++ 2 files changed, 40 insertions(+) diff --git a/drivers/xen/events.c b/drivers/xen/events.c index ee33421..270821d 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -2109,6 +2109,43 @@ void xen_callback_vector(void) void xen_callback_vector(void) {} #endif +/* + * This function returns the extended AIBs a guest can use. + * When + * 1) hypervisor doesn't support extended ABIs (EVTCHNOP_* not implemented) + * 2) hypervisor supports extended ABIs but this guest cannot use them + * it returns EVTCHN_EXTENDED_NONE + * otherwise it returns a or'ed bitmap of enabled ABIs + */ +uint64_t xen_event_channel_query_extended_abis(void) +{ + struct evtchn_query_extended_abis query; + int rc; + + memset(&query, 0, sizeof(query)); + + rc = HYPERVISOR_event_channel_op(EVTCHNOP_query_extended_abis, &query); + + if (rc < 0) { + printk(KERN_INFO + "Hypervisor does not support extended event channel ABIs."); + return EVTCHN_EXTENDED_NONE; + } + + printk(KERN_INFO "Hypervisor supports extended event channel ABIs.\n"); + + printk(KERN_INFO + "Extended event channel AIBs enabled for this guest:\n"); + if (query.abis == EVTCHN_EXTENDED_NONE /* 0 */) + printk(KERN_INFO " None (disabled by host administrator)\n"); + else { + if (query.abis & EVTCHN_EXTENDED_L3) + printk(KERN_INFO " 3-level event channel ABI\n"); + } + + return query.abis; +} + const struct evtchn_ops evtchn_l2_ops = { .unmask = __unmask_local_port_l2, .debug_interrupt = xen_debug_interrupt_l2, diff --git a/include/xen/events.h b/include/xen/events.h index 24cf421..49d54ac 100644 --- a/include/xen/events.h +++ b/include/xen/events.h @@ -114,4 +114,7 @@ void xen_init_IRQ(void); extern unsigned int xen_nr_event_channels; extern uint64_t xen_evtchn_extended; +/* Query hypervisor for supported / enabled extended event channel ABIs. */ +uint64_t xen_event_channel_query_extended_abis(void); + #endif /* _XEN_EVENTS_H */ -- 1.7.10.4