[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 09/17] plat/common: Halting functions


  • To: minios-devel@xxxxxxxxxxxxx
  • From: Costin Lupu <costin.lupu@xxxxxxxxx>
  • Date: Wed, 4 Apr 2018 16:54:00 +0300
  • Cc: simon.kuenzer@xxxxxxxxx
  • Delivery-date: Wed, 04 Apr 2018 13:54:25 +0000
  • Ironport-phdr: 9a23:OXfF1hfAI2N1eYRpBdFA0+qHlGMj4u6mDksu8pMizoh2WeGdxcS6Yh7h7PlgxGXEQZ/co6odzbaO6Oa4ASQp2tWoiDg6aptCVhsI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTahb75+Ngm6oRnMvcQKnIVuLbo8xAHUqXVSYeRWwm1oJVOXnxni48q74YBu/SdNtf8/7sBMSar1cbg2QrxeFzQmLns65Nb3uhnZTAuA/WUTX2MLmRdVGQfF7RX6XpDssivms+d2xSeXMdHqQb0yRD+v6bpgRh31hycdLzM38H/ZhNF+gqxYpxyupRJ/zpXIbI2JLvdyYrnQcc8GSWdHQ81fVzZBAoS5b4YXEecBOv1Yr5X8p1sIsBCwAxSsBPvyyjRVgXL5wao60/89EQHH2gwsBdYOsGnMrNXoL6odTfu1wLPQzTXedPxawy396I/Rfx0nvPqCXqpwfNLMxUQgCg/JlFadpIz/Mz+LyOgAsXKX4uR4We6yhGMrtht9rzuvy8s2lIXEiIwYxkrZ+Sh23oo4I8CzRlRhbt6+CpRQsjmXN45xQsw/XW5loD06yrgauZ6jeygK1Ygnywbfa/OZd4iI5QruVPiUIThihXJlfKiziAqp8US60u38S9K73ExQripCitXMt3YN2ALP6sWfV/dw8Vqt1SyM2g3T8O1IP144mKjBJ5Mv2rIwk4AcsUXHHi/4gkX2i6qWe1049eiv8OTnfrTmppmGO49wlwH+Krkul9ejDuQjKAQOR3Wb9v+m2L35+k31WK9KgeEukqnFrJDaItwWpqu4Aw9T04Yj7A2/Ay6739sGg3kIMlZFdQmDj4joIFHOPOv4Ae2wgluyljdn3ffGPqfuAp/VNHjMjK/hfaph605b0Acz1tFf55dTCrEHOv7zWVLxu8LeDh44LQO02f3qCNNj2YwCXWKAGLSWPLnMvl+VtaoTJLyJZYkUvy24J/U76vrGiX4ihURbbaSvm5wNZyOWBPNjdm6eembthJ8lDH8X9l41S/f2iVvEVSNLel65ROQk+zt9EoXwXtSLfZyknLHUhHTzJZZRfG0TUl0=
  • List-id: Mini-os development list <minios-devel.lists.xenproject.org>

Revisiting ukplat_lcpu_halt* functions.

Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
 include/uk/plat/lcpu.h      | 15 +++++++++---
 plat/common/include/_time.h | 42 +++++++++++++++++++++++++++++++
 plat/common/include/cpu.h   | 46 ++++++++++++++++++++++++++++++++++
 plat/common/lcpu.c          | 60 +++++++++++++++++++++++++++++++++++++++++++++
 plat/kvm/Makefile.uk        |  1 +
 plat/kvm/x86/lcpu.c         |  6 -----
 plat/xen/Makefile.uk        |  1 +
 plat/xen/lcpu.c             | 17 -------------
 plat/xen/x86/arch_time.c    | 13 +++-------
 9 files changed, 165 insertions(+), 36 deletions(-)
 create mode 100644 plat/common/include/_time.h
 create mode 100644 plat/common/include/cpu.h
 create mode 100644 plat/common/lcpu.c

diff --git a/include/uk/plat/lcpu.h b/include/uk/plat/lcpu.h
index de37e8b..77e5846 100644
--- a/include/uk/plat/lcpu.h
+++ b/include/uk/plat/lcpu.h
@@ -36,6 +36,8 @@
 #ifndef __UKPLAT_LCPU_H__
 #define __UKPLAT_LCPU_H__
 
+#include <uk/arch/time.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -80,17 +82,22 @@ void ukplat_lcpu_irqs_handle_pending(void);
 
 /**
  * Halts the current logical CPU execution
- * Execution is returned when an interrupt/signal arrived
  */
 void ukplat_lcpu_halt(void);
 
 /**
  * Halts the current logical CPU execution
  * Execution is returned when an interrupt/signal arrived or
- * the specified timeout expired
- * @param millis number of milliseconds to halt at longest
+ * the specified deadline expired
+ * @param until deadline in nanoseconds
+ */
+void ukplat_lcpu_halt_to(__snsec until);
+
+/**
+ * Halts the current logical CPU execution
+ * Execution is returned when an interrupt/signal arrived
  */
-void ukplat_lcpu_halt_to(unsigned long millis);
+void ukplat_lcpu_halt_irq(void);
 
 #ifdef __cplusplus
 }
diff --git a/plat/common/include/_time.h b/plat/common/include/_time.h
new file mode 100644
index 0000000..06240ff
--- /dev/null
+++ b/plat/common/include/_time.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
+ *
+ * Copyright (c) 2018, NEC Europe Ltd., NEC Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+
+#ifndef __PLAT_CMN_TIME_H__
+#define __PLAT_CMN_TIME_H__
+
+#include <uk/plat/time.h>
+
+void time_block_until(__snsec until);
+
+#endif /* __PLAT_CMN_TIME_H__ */
diff --git a/plat/common/include/cpu.h b/plat/common/include/cpu.h
new file mode 100644
index 0000000..153ebf9
--- /dev/null
+++ b/plat/common/include/cpu.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
+ *
+ * Copyright (c) 2018, NEC Europe Ltd., NEC Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+
+#ifndef __PLAT_CMN_CPU_H__
+#define __PLAT_CMN_CPU_H__
+
+#include <uk/arch/lcpu.h>
+#ifdef __X86_64__
+#include <x86/cpu.h>
+#else
+#error "Add cpu.h for current architecture."
+#endif
+
+
+#endif /* __PLAT_CMN_CPU_H__ */
diff --git a/plat/common/lcpu.c b/plat/common/lcpu.c
new file mode 100644
index 0000000..517a3df
--- /dev/null
+++ b/plat/common/lcpu.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
+ *
+ * Copyright (c) 2018, NEC Europe Ltd., NEC Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+
+#include <uk/plat/lcpu.h>
+#include <cpu.h>
+#include <_time.h>
+
+
+void ukplat_lcpu_halt(void)
+{
+       ukplat_lcpu_disable_irq();
+       halt();
+}
+
+void ukplat_lcpu_halt_irq(void)
+{
+       ukplat_lcpu_enable_irq();
+       halt();
+       ukplat_lcpu_disable_irq();
+}
+
+void ukplat_lcpu_halt_to(__snsec until)
+{
+       unsigned long flags;
+
+       flags = ukplat_lcpu_save_irqf();
+       time_block_until(until);
+       ukplat_lcpu_restore_irqf(flags);
+}
diff --git a/plat/kvm/Makefile.uk b/plat/kvm/Makefile.uk
index e7a55fd..433d298 100644
--- a/plat/kvm/Makefile.uk
+++ b/plat/kvm/Makefile.uk
@@ -24,3 +24,4 @@ LIBKVMPLAT_SRCS-$(ARCH_X86_64) += 
$(LIBKVMPLAT_BASE)/x86/lcpu.c
 LIBKVMPLAT_SRCS-$(ARCH_X86_64) += $(LIBKVMPLAT_BASE)/x86/time.c
 LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/shutdown.c
 LIBKVMPLAT_SRCS-y              += $(LIBKVMPLAT_BASE)/memory.c
+LIBKVMPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
diff --git a/plat/kvm/x86/lcpu.c b/plat/kvm/x86/lcpu.c
index 6e7ba04..985c670 100644
--- a/plat/kvm/x86/lcpu.c
+++ b/plat/kvm/x86/lcpu.c
@@ -34,9 +34,3 @@
 
 #include <stdint.h>
 #include <uk/plat/lcpu.h>
-#include <uk/essentials.h>
-
-void ukplat_lcpu_halt_to(unsigned long millis __unused)
-{
-       //TODO
-}
diff --git a/plat/xen/Makefile.uk b/plat/xen/Makefile.uk
index 55ba50c..7cb55dc 100644
--- a/plat/xen/Makefile.uk
+++ b/plat/xen/Makefile.uk
@@ -27,6 +27,7 @@ LIBXENPLAT_CINCLUDES-y         += -I$(LIBXENPLAT_BASE)/include
 LIBXENPLAT_CINCLUDES-y         += -I$(UK_PLAT_COMMON_BASE)/include
 LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/hypervisor.c
 LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/memory.c
+LIBXENPLAT_SRCS-y              += $(UK_PLAT_COMMON_BASE)/lcpu.c|common
 
 ifneq (,$(filter x86_32 x86_64,$(UK_ARCH)))
 LIBXENPLAT_SRCS-$(ARCH_X86_64) += $(UK_PLAT_COMMON_BASE)/x86/trace.c|common
diff --git a/plat/xen/lcpu.c b/plat/xen/lcpu.c
index eed89fb..f0650da 100644
--- a/plat/xen/lcpu.c
+++ b/plat/xen/lcpu.c
@@ -72,20 +72,3 @@ int ukplat_lcpu_irqs_disabled(void)
 {
        return irqs_disabled();
 }
-
-void ukplat_lcpu_halt_to(unsigned long millis)
-{
-       __snsec until;
-       unsigned long flags;
-
-       until = ukplat_monotonic_clock() + ukarch_time_msec_to_nsec(millis);
-
-       flags = ukplat_lcpu_save_irqf();
-       block_domain(until);
-       ukplat_lcpu_restore_irqf(flags);
-}
-
-void ukplat_lcpu_halt(void)
-{
-       //TODO
-}
diff --git a/plat/xen/x86/arch_time.c b/plat/xen/x86/arch_time.c
index 0621d90..702f786 100644
--- a/plat/xen/x86/arch_time.c
+++ b/plat/xen/x86/arch_time.c
@@ -35,8 +35,9 @@
 
 #include <stdint.h>
 #include <sys/time.h>
-#include <x86/cpu.h>
 #include <uk/plat/time.h>
+#include <x86/cpu.h>
+#include <_time.h>
 #include <common/hypervisor.h>
 #include <common/events.h>
 #include <xen-x86/irq.h>
@@ -217,19 +218,13 @@ int gettimeofday(struct timeval *tv, void *tz)
 #endif
 
 
-void block_domain(__snsec until)
+void time_block_until(__snsec until)
 {
        UK_ASSERT(irqs_disabled());
 
        if ((__snsec) ukplat_monotonic_clock() < until) {
                HYPERVISOR_set_timer_op(until);
-#ifdef CONFIG_PARAVIRT
-               HYPERVISOR_sched_op(SCHEDOP_block, 0);
-#else
-               local_irq_enable();
-               asm volatile("hlt" : : : "memory");
-#endif
-               local_irq_disable();
+               ukplat_lcpu_halt_irq();
                HYPERVISOR_set_timer_op(0);
        }
 }
-- 
2.1.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.