From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH ARM v8 1/4] mini-os: arm: time Date: Mon, 27 Oct 2014 10:34:39 +0000 Message-ID: <1414406079.31057.6.camel@citrix.com> References: <1412328051-20015-1-git-send-email-talex5@gmail.com> <1412328051-20015-2-git-send-email-talex5@gmail.com> <1413888616.23337.22.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XihdM-000470-EL for xen-devel@lists.xenproject.org; Mon, 27 Oct 2014 10:34:44 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Thomas Leonard Cc: David Scott , Anil Madhavapeddy , Stefano Stabellini , Samuel Thibault , "xen-devel@lists.xenproject.org" List-Id: xen-devel@lists.xenproject.org On Sun, 2014-10-26 at 09:51 +0000, Thomas Leonard wrote: > On 21 October 2014 11:50, Ian Campbell wrote: > > On Fri, 2014-10-03 at 10:20 +0100, Thomas Leonard wrote: > >> Based on an initial patch by Karim Raslan. > >> > >> Signed-off-by: Karim Allah Ahmed > >> Signed-off-by: Thomas Leonard > > > > Acked-by: Ian Campbell > > > >> +/* Wall-clock time is not currently available on ARM, so this is always zero for now: > >> + * http://wiki.xenproject.org/wiki/Xen_ARM_TODO#Expose_Wallclock_time_to_guests > > > > I have some slightly hacky patches for this, I really should dust them > > off and submit them... > > > >> +void block_domain(s_time_t until) > >> +{ > >> + uint64_t until_count = ns_to_ticks(until) + cntvct_at_init; > >> + ASSERT(irqs_disabled()); > >> + if (read_virtual_count() < until_count) > >> + { > >> + set_vtimer_compare(until_count); > >> + __asm__ __volatile__("wfi"); > >> + unset_vtimer_compare(); > >> + > >> + /* Give the IRQ handler a chance to handle whatever woke us up. */ > >> + local_irq_enable(); > >> + local_irq_disable(); > >> + } > > > > Just wondering, is this not roughly equivalent to a wfi loop with > > interrupts enabled? > > I'm not quite sure what you mean. > > If we enable interrupts before the wfi then I think the following could occur: > > 1. Application checks for work, finds none and calls block_domain. > 2. block_domain enables interrupts. > 3. An interrupt occurs. > 4. The interrupt handler sets a flag indicating work to do. > 5. wfi is called, putting the domain to sleep, even though there is work to do. > > Enabling IRQs after block_domain ensures we can't sleep while we have > work to do. Ah, yes. Ian.