From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: David Vrabel <david.vrabel@citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>, xen-devel@lists.xen.org
Subject: Re: [PATCH 06/16] xen/events: move 2-level specific code into its own file
Date: Mon, 14 Oct 2013 12:50:53 -0400 [thread overview]
Message-ID: <525C20ED.6010903@oracle.com> (raw)
In-Reply-To: <1381236555-27493-7-git-send-email-david.vrabel@citrix.com>
On 10/08/2013 08:49 AM, David Vrabel wrote:
> From: David Vrabel <david.vrabel@citrix.com>
>
> In preparation for alternative event channel ABIs, move all the
> functions accessing the shared data structures into their own file.
>
> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
> ---
> drivers/xen/events/Makefile | 1 +
> drivers/xen/events/events.c | 372 +---------------------------------
> drivers/xen/events/events_2l.c | 322 +++++++++++++++++++++++++++++
> drivers/xen/events/events_internal.h | 74 +++++++
> 4 files changed, 408 insertions(+), 361 deletions(-)
> create mode 100644 drivers/xen/events/events_2l.c
> create mode 100644 drivers/xen/events/events_internal.h
...
> - */
> static void __xen_evtchn_do_upcall(void)
> {
> - int start_word_idx, start_bit_idx;
> - int word_idx, bit_idx;
> - int i, irq;
> - int cpu = get_cpu();
> - struct shared_info *s = HYPERVISOR_shared_info;
> struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu);
> + int cpu = get_cpu();
> unsigned count;
>
> do {
> - xen_ulong_t pending_words;
> - xen_ulong_t pending_bits;
> - struct irq_desc *desc;
> -
> vcpu_info->evtchn_upcall_pending = 0;
>
> if (__this_cpu_inc_return(xed_nesting_count) - 1)
> goto out;
>
> - /*
> - * Master flag must be cleared /before/ clearing
> - * selector flag. xchg_xen_ulong must contain an
> - * appropriate barrier.
> - */
> - if ((irq = per_cpu(virq_to_irq, cpu)[VIRQ_TIMER]) != -1) {
> - int evtchn = evtchn_from_irq(irq);
> - word_idx = evtchn / BITS_PER_LONG;
> - pending_bits = evtchn % BITS_PER_LONG;
> - if (active_evtchns(cpu, s, word_idx) & (1ULL << pending_bits)) {
> - desc = irq_to_desc(irq);
> - if (desc)
> - generic_handle_irq_desc(irq, desc);
> - }
> - }
This chunk dealing with timer interrupt has been completely removed. I
see that you have a later patch that raises priority of VIRQ_TIMER. If
that patch is replacement for what this chunk used to do, should you be
removing this code in that patch?
Also, it appears that you are not simply moving code around. There are
some changes to logic (for example this one) and it should be reflected
in the commit message.
> -
> - pending_words = xchg_xen_ulong(&vcpu_info->evtchn_pending_sel, 0);
> -
> - start_word_idx = __this_cpu_read(current_word_idx);
> - start_bit_idx = __this_cpu_read(current_bit_idx);
> -
...
> -
> +
> +void unmask_evtchn(int port)
> +{
> + struct shared_info *s = HYPERVISOR_shared_info;
> + unsigned int cpu = get_cpu();
> + int do_hypercall = 0, evtchn_pending = 0;
> +
> + BUG_ON(!irqs_disabled());
> +
> + if (unlikely((cpu != cpu_from_evtchn(port))))
> + do_hypercall = 1;
> + else {
> + sync_clear_bit(port, BM(&s->evtchn_mask[0]));
> + evtchn_pending = sync_test_bit(port, BM(&s->evtchn_pending[0]));
> +
> + if (unlikely(evtchn_pending && xen_hvm_domain()))
> + do_hypercall = 1;
Why are you no longer setting back evtchn_mask bit in the 'if' clause?
Wouldn't this make you possibly miss a pending event from Xen's
evtchn_unmask()?
You also removed a comment that talks about why we clear the bit. Is
this comment no longer relevant?
-boris
> + }
> +
> + /* Slow path (hypercall) if this is a non-local port or if this is
> + * an hvm domain and an event is pending (hvm domains don't have
> + * their own implementation of irq_enable). */
> + if (do_hypercall) {
> + struct evtchn_unmask unmask = { .port = port };
> + (void)HYPERVISOR_event_channel_op(EVTCHNOP_unmask, &unmask);
> + } else {
> + struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu);
> +
> + /*
> + * The following is basically the equivalent of
> + * 'hw_resend_irq'. Just like a real IO-APIC we 'lose
> + * the interrupt edge' if the channel is masked.
> + */
> + if (evtchn_pending &&
> + !sync_test_and_set_bit(port / BITS_PER_EVTCHN_WORD,
> + BM(&vcpu_info->evtchn_pending_sel)))
> + vcpu_info->evtchn_upcall_pending = 1;
> + }
> +
> + put_cpu();
> +}
> +
next prev parent reply other threads:[~2013-10-14 16:50 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-08 12:48 [PATCHv6 00/16] Linux: FIFO-based event channel ABI David Vrabel
2013-10-08 12:49 ` [PATCH 01/16] xen/events: refactor retrigger_dynirq() and resend_irq_on_evtchn() David Vrabel
2013-10-14 15:59 ` Boris Ostrovsky
2013-10-14 16:35 ` David Vrabel
2013-10-08 12:49 ` [PATCH 02/16] xen/events: remove unnecessary init_evtchn_cpu_bindings() David Vrabel
2013-10-08 12:49 ` [PATCH 03/16] xen/events: introduce test_and_set_mask David Vrabel
2013-10-08 12:49 ` [PATCH 04/16] xen/events: replace raw bit ops with functions David Vrabel
2013-10-14 16:30 ` Boris Ostrovsky
2013-10-14 16:43 ` David Vrabel
2013-10-08 12:49 ` [PATCH 05/16] xen/events: move drivers/xen/events.c into drivers/xen/events/ David Vrabel
2013-10-08 12:49 ` [PATCH 06/16] xen/events: move 2-level specific code into its own file David Vrabel
2013-10-14 16:50 ` Boris Ostrovsky [this message]
2013-10-14 16:53 ` David Vrabel
2013-10-08 12:49 ` [PATCH 07/16] xen/events: add struct evtchn_ops for the low-level port operations David Vrabel
2013-10-08 12:49 ` [PATCH 08/16] xen/events: allow setup of irq_info to fail David Vrabel
2013-10-14 17:26 ` Boris Ostrovsky
2013-10-15 19:20 ` David Vrabel
2013-10-08 12:49 ` [PATCH 09/16] xen/events: add a evtchn_op for port setup David Vrabel
2013-10-08 12:49 ` [PATCH 10/16] xen/events: Refactor evtchn_to_irq array to be dynamically allocated David Vrabel
2013-10-14 17:52 ` Boris Ostrovsky
2013-10-15 18:58 ` David Vrabel
2013-10-08 12:49 ` [PATCH 11/16] xen/events: add xen_evtchn_mask_all() David Vrabel
2013-10-08 12:49 ` [PATCH 12/16] xen/evtchn: support more than 4096 ports David Vrabel
2013-10-14 18:06 ` Boris Ostrovsky
2013-10-08 12:49 ` [PATCH 13/16] xen/events: Add the hypervisor interface for the FIFO-based event channels David Vrabel
2013-10-08 12:49 ` [PATCH 14/16] xen/events: allow event channel priority to be set David Vrabel
2013-10-08 12:49 ` [PATCH 15/16] xen/x86: set VIRQ_TIMER priority to maximum David Vrabel
2013-10-08 12:49 ` [PATCH 16/16] xen/events: use the FIFO-based ABI if available David Vrabel
2013-10-14 19:30 ` Boris Ostrovsky
2013-10-15 18:58 ` David Vrabel
2013-10-15 20:39 ` Boris Ostrovsky
2013-10-16 9:46 ` David Vrabel
2013-10-16 13:26 ` Boris Ostrovsky
2013-10-16 13:49 ` David Vrabel
2013-10-14 13:41 ` [PATCHv6 00/16] Linux: FIFO-based event channel ABI David Vrabel
2013-10-16 15:19 ` Ian Campbell
2013-10-16 15:36 ` David Vrabel
2013-10-16 15:38 ` Ian Jackson
-- strict thread matches above, loose matches on Subject: below --
2013-11-11 16:12 [PATCHv9 " David Vrabel
2013-11-11 16:12 ` [PATCH 06/16] xen/events: move 2-level specific code into its own file David Vrabel
2013-10-31 15:09 [PATCHv8 00/16] Linux: FIFO-based event channel ABI David Vrabel
2013-10-31 15:09 ` [PATCH 06/16] xen/events: move 2-level specific code into its own file David Vrabel
2013-10-18 14:23 [PATCHv7 00/16] Linux: FIFO-based event channel ABI David Vrabel
2013-10-18 14:23 ` [PATCH 06/16] xen/events: move 2-level specific code into its own file David Vrabel
2013-10-21 14:34 ` Boris Ostrovsky
2013-10-02 17:14 [PATCHv5 00/16] Linux: FIFO-based event channel ABI David Vrabel
2013-10-02 17:14 ` [PATCH 06/16] xen/events: move 2-level specific code into its own file David Vrabel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=525C20ED.6010903@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=jbeulich@suse.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).