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

Re: [Minios-devel] [UNIKRAFT PATCH 1/8] arch/*: Add STACK_MASK_TOP bit mask



Reviewed-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>

On 9/18/18 5:27 PM, Costin Lupu wrote:
STACK_MASK_TOP is used for getting the current stack address (e.g. sp &
STACK_MASK_TOP).

Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
  include/uk/arch/limits.h        | 2 ++
  lib/ukdebug/print.c             | 2 +-
  lib/uksched/include/uk/thread.h | 2 +-
  plat/xen/x86/arch_events.c      | 2 +-
  plat/xen/x86/entry64.S          | 2 +-
  5 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/include/uk/arch/limits.h b/include/uk/arch/limits.h
index a0683ad..18aba2e 100644
--- a/include/uk/arch/limits.h
+++ b/include/uk/arch/limits.h
@@ -49,6 +49,8 @@
  #include <uk/arch/arm/arm64/limits.h>
  #endif
+#define STACK_MASK_TOP (~(__STACK_SIZE - 1))
+
  #ifndef __ASSEMBLY__
#ifdef __X86_32__
diff --git a/lib/ukdebug/print.c b/lib/ukdebug/print.c
index 6f98d28..31bce98 100644
--- a/lib/ukdebug/print.c
+++ b/lib/ukdebug/print.c
@@ -100,7 +100,7 @@ static void _printd_stack(void)
        char buf[BUFLEN];
        int len;
- stackb = (ukarch_read_sp() & ~(__STACK_SIZE - 1)) + __STACK_SIZE;
+       stackb = (ukarch_read_sp() & STACK_MASK_TOP) + __STACK_SIZE;
len = snprintf(buf, BUFLEN, "<%p> ", (void *) stackb);
        _ukplat_coutd((char *)buf, len);
diff --git a/lib/uksched/include/uk/thread.h b/lib/uksched/include/uk/thread.h
index 4ffb002..e66a05b 100644
--- a/lib/uksched/include/uk/thread.h
+++ b/lib/uksched/include/uk/thread.h
@@ -70,7 +70,7 @@ struct uk_thread *uk_thread_current(void)
        struct uk_thread **current;
        unsigned long sp = ukarch_read_sp();
- current = (struct uk_thread **) (sp & ~(__STACK_SIZE - 1));
+       current = (struct uk_thread **) (sp & STACK_MASK_TOP);
return *current;
  }
diff --git a/plat/xen/x86/arch_events.c b/plat/xen/x86/arch_events.c
index 5b88065..1e165c8 100644
--- a/plat/xen/x86/arch_events.c
+++ b/plat/xen/x86/arch_events.c
@@ -49,7 +49,7 @@ void arch_init_events(void)
        cpu0_pda.irqcount = -1;
        cpu0_pda.irqstackptr =
                        (void *) (((unsigned long)irqstack + 2 * STACK_SIZE)
-                       & ~(STACK_SIZE - 1));
+                       & STACK_MASK_TOP);
  #endif
  }
diff --git a/plat/xen/x86/entry64.S b/plat/xen/x86/entry64.S
index c266804..be2f6e8 100644
--- a/plat/xen/x86/entry64.S
+++ b/plat/xen/x86/entry64.S
@@ -62,7 +62,7 @@ _libxenplat_start:
  #endif
          cld
          movq stack_start(%rip),%rsp
-        andq $(~(__STACK_SIZE-1)), %rsp
+        andq $STACK_MASK_TOP, %rsp
          movq %rsi,%rdi
          call _libxenplat_x86entry

--
Dr. Florian Schmidt
フローリアン・シュミット
Research Scientist,
Systems and Machine Learning Group
NEC Laboratories Europe
Kurfürsten-Anlage 36, D-69115 Heidelberg
Tel.     +49 (0)6221 4342-265
Fax:     +49 (0)6221 4342-155
e-mail:  florian.schmidt@xxxxxxxxx
============================================================
Registered at Amtsgericht Mannheim, Germany, HRB728558

_______________________________________________
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®.