Changeset 5b23a82 in mainline


Ignore:
Timestamp:
2006-08-01T21:12:54Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7c5a8dd
Parents:
7d3d641
Message:

xen32: enable/disable interrupts

Location:
kernel/arch/xen32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/xen32/include/asm.h

    r7d3d641 r5b23a82  
    3939#include <arch/pm.h>
    4040#include <arch/types.h>
     41#include <arch/barrier.h>
    4142#include <config.h>
    4243
     
    151152static inline ipl_t interrupts_enable(void)
    152153{
    153         ipl_t v = 0;
    154 /*      __asm__ volatile (
    155                 "pushf\n\t"
    156                 "popl %0\n\t"
    157                 "sti\n"
    158                 : "=r" (v)
    159         );*/
     154        // FIXME SMP
     155       
     156        ipl_t v = shared_info.vcpu_info[0].evtchn_upcall_mask;
     157        write_barrier();
     158        shared_info.vcpu_info[0].evtchn_upcall_mask = 0;
     159        write_barrier();
     160        if (shared_info.vcpu_info[0].evtchn_upcall_pending)
     161                force_evtchn_callback();
     162       
    160163        return v;
    161164}
     
    170173static inline ipl_t interrupts_disable(void)
    171174{
    172         ipl_t v = 0;
    173 /*      __asm__ volatile (
    174                 "pushf\n\t"
    175                 "popl %0\n\t"
    176                 "cli\n"
    177                 : "=r" (v)
    178         );*/
     175        // FIXME SMP
     176       
     177        ipl_t v = shared_info.vcpu_info[0].evtchn_upcall_mask;
     178        shared_info.vcpu_info[0].evtchn_upcall_mask = 1;
     179        write_barrier();
     180       
    179181        return v;
    180182}
     
    188190static inline void interrupts_restore(ipl_t ipl)
    189191{
    190 /*      __asm__ volatile (
    191                 "pushl %0\n\t"
    192                 "popf\n"
    193                 : : "r" (ipl)
    194         );*/
     192        if (ipl == 0)
     193                interrupts_enable();
     194        else
     195                interrupts_disable();
    195196}
    196197
     
    201202static inline ipl_t interrupts_read(void)
    202203{
    203         ipl_t v = 0;
    204 /*      __asm__ volatile (
    205                 "pushf\n\t"
    206                 "popl %0\n"
    207                 : "=r" (v)
    208         );*/
    209         return v;
     204        // FIXME SMP
     205       
     206        return shared_info.vcpu_info[0].evtchn_upcall_mask;
    210207}
    211208
  • kernel/arch/xen32/include/boot/boot.h

    r7d3d641 r5b23a82  
    7777typedef struct {
    7878        uint8_t evtchn_upcall_pending;
    79         uint8_t evtchn_upcall_mask;
     79        ipl_t evtchn_upcall_mask;
    8080        evtchn_t evtchn_pending_sel;
    8181        arch_vcpu_info_t arch;
  • kernel/arch/xen32/include/hypercall.h

    r7d3d641 r5b23a82  
    4949#define XEN_SET_CALLBACKS               4
    5050#define XEN_UPDATE_VA_MAPPING   14
     51#define XEN_VERSION                             17
    5152#define XEN_CONSOLE_IO                  18
    5253#define XEN_VM_ASSIST                   21
     
    101102
    102103
     104#define force_evtchn_callback() ((void) xen_version(0, 0))
     105
    103106#define hypercall0(id)  \
    104107        ({      \
     
    219222}
    220223
     224static inline int xen_version(const unsigned int cmd, const void *arg)
     225{
     226        return hypercall2(XEN_VERSION, cmd, arg);
     227}
     228
    221229#endif
  • kernel/arch/xen32/include/types.h

    • Property mode changed from 120000 to 100644
    r7d3d641 r5b23a82  
    1 ../../ia32/include/types.h
     1/*
     2 * Copyright (C) 2001-2004 Jakub Jermar
     3 * All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 *
     9 * - Redistributions of source code must retain the above copyright
     10 *   notice, this list of conditions and the following disclaimer.
     11 * - Redistributions in binary form must reproduce the above copyright
     12 *   notice, this list of conditions and the following disclaimer in the
     13 *   documentation and/or other materials provided with the distribution.
     14 * - The name of the author may not be used to endorse or promote products
     15 *   derived from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
     28
     29/** @addtogroup xen32
     30 * @{
     31 */
     32/** @file
     33 */
     34
     35#ifndef __TYPES_H__
     36#define __TYPES_H__
     37
     38#define NULL 0
     39
     40typedef signed char int8_t;
     41typedef signed short int16_t;
     42typedef signed long int32_t;
     43typedef signed long long int64_t;
     44
     45typedef unsigned char uint8_t;
     46typedef unsigned short uint16_t;
     47typedef unsigned long uint32_t;
     48typedef unsigned long long uint64_t;
     49
     50typedef uint32_t uintptr_t;
     51typedef uint32_t pfn_t;
     52
     53typedef uint8_t ipl_t;
     54
     55typedef uint32_t unative_t;
     56typedef int32_t native_t;
     57
     58typedef struct page_specifier pte_t;
     59
     60#endif
     61
     62/** @}
     63 */
  • kernel/arch/xen32/src/userspace.c

    • Property mode changed from 120000 to 100644
    r7d3d641 r5b23a82  
    1 ../../ia32/src/userspace.c
     1/*
     2 * Copyright (C) 2005 Jakub Jermar
     3 * All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 *
     9 * - Redistributions of source code must retain the above copyright
     10 *   notice, this list of conditions and the following disclaimer.
     11 * - Redistributions in binary form must reproduce the above copyright
     12 *   notice, this list of conditions and the following disclaimer in the
     13 *   documentation and/or other materials provided with the distribution.
     14 * - The name of the author may not be used to endorse or promote products
     15 *   derived from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
     28
     29/** @addtogroup xen32
     30 * @{
     31 */
     32/** @file
     33 */
     34
     35#include <userspace.h>
     36#include <arch/pm.h>
     37#include <arch/types.h>
     38#include <arch.h>
     39#include <proc/uarg.h>
     40#include <mm/as.h>
     41
     42
     43/** Enter userspace
     44 *
     45 * Change CPU protection level to 3, enter userspace.
     46 *
     47 */
     48void userspace(uspace_arg_t *kernel_uarg)
     49{
     50        uint32_t ipl = interrupts_disable();
     51
     52        asm volatile (
     53                /*
     54                 * Clear nested task flag.
     55                 */
     56                "pushfl\n"
     57                "pop %%eax\n"
     58                "and $0xffffbfff, %%eax\n"
     59                "push %%eax\n"
     60                "popfl\n"
     61
     62                /* Set up GS register (TLS) */
     63                "movl %6, %%gs\n"
     64
     65                "pushl %0\n"
     66                "pushl %1\n"
     67                "pushl %2\n"
     68                "pushl %3\n"
     69                "pushl %4\n"
     70                "movl %5, %%eax\n"
     71                "iret\n"
     72                :
     73                : "i" (selector(UDATA_DES) | PL_USER), "r" (kernel_uarg->uspace_stack+THREAD_STACK_SIZE),
     74                  "r" (ipl), "i" (selector(UTEXT_DES) | PL_USER), "r" (kernel_uarg->uspace_entry),
     75                "r" (kernel_uarg->uspace_uarg),
     76                "r" (selector(TLS_DES))
     77                : "eax");
     78       
     79        /* Unreachable */
     80        for(;;)
     81                ;
     82}
     83
     84/** @}
     85 */
Note: See TracChangeset for help on using the changeset viewer.