Changeset 3e828ea in mainline for kernel/arch/ia64


Ignore:
Timestamp:
2019-09-23T12:49:29Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9be2358
Parents:
9259d20 (diff), 1a4ec93f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Jiri Svoboda <jiri@…> (2019-09-22 12:49:07)
git-committer:
Jiri Svoboda <jiri@…> (2019-09-23 12:49:29)
Message:

Merge changes from master, especially Meson build

Location:
kernel/arch/ia64
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/arch/interrupt.h

    r9259d20 r3e828ea  
    9292extern void disabled_fp_register(unsigned int, istate_t *);
    9393
    94 extern void trap_virtual_enable_irqs(uint16_t);
    95 
    9694void exception_init(void);
    9795#endif
  • kernel/arch/ia64/include/arch/istate.h

    r9259d20 r3e828ea  
    7171_NO_TRACE static inline int istate_from_uspace(istate_t *istate)
    7272{
    73         return (istate->cr_iip) < 0xe000000000000000ULL;
     73        return istate->cr_ipsr.cpl == PSR_CPL_USER;
    7474}
    7575
  • kernel/arch/ia64/include/arch/mm/as.h

    r9259d20 r3e828ea  
    3737
    3838#define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH  0
     39#define KERNEL_SEPARATE_PTL0_ARCH           0
    3940
    4041#define KERNEL_ADDRESS_SPACE_START_ARCH  UINT64_C(0xe000000000000000)
  • kernel/arch/ia64/include/arch/mm/page.h

    r9259d20 r3e828ea  
    3838
    3939#include <arch/mm/frame.h>
     40#include <arch/register.h>
    4041
    4142#ifndef __ASSEMBLER__
     
    7677
    7778/** Privilege Levels. Only the most and the least privileged ones are ever used. */
    78 #define PL_KERNEL  0x00
    79 #define PL_USER    0x03
     79#define PL_KERNEL  PSR_CPL_KERNEL
     80#define PL_USER    PSR_CPL_USER
    8081
    8182/* Access Rigths. Only certain combinations are used by the kernel. */
  • kernel/arch/ia64/include/arch/register.h

    r9259d20 r3e828ea  
    5757#define PSR_RT_MASK   (1 << 27)
    5858#define PSR_IT_MASK   (1 << 36)
     59
     60#define PSR_CPL_USER   3
     61#define PSR_CPL_KERNEL 0
    5962
    6063#define PSR_CPL_SHIFT         32
  • kernel/arch/ia64/src/ia64.c

    r9259d20 r3e828ea  
    244244         * uspace_stack_size / 2 bytes.
    245245         */
    246         switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry,
    247             ((uintptr_t) kernel_uarg->uspace_stack) +
     246        switch_to_userspace(kernel_uarg->uspace_entry,
     247            kernel_uarg->uspace_stack +
    248248            kernel_uarg->uspace_stack_size / 2 -
    249249            ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT),
    250             ((uintptr_t) kernel_uarg->uspace_stack) +
     250            kernel_uarg->uspace_stack +
    251251            kernel_uarg->uspace_stack_size / 2,
    252             (uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value);
     252            kernel_uarg->uspace_uarg, psr.value, rsc.value);
    253253
    254254        while (true)
  • kernel/arch/ia64/src/interrupt.c

    r9259d20 r3e828ea  
    301301}
    302302
    303 void trap_virtual_enable_irqs(uint16_t irqmask)
    304 {
    305 }
    306 
    307303void exception_init(void)
    308304{
  • kernel/arch/ia64/src/mm/tlb.c

    r9259d20 r3e828ea  
    464464}
    465465
    466 static bool is_kernel_fault(uintptr_t va)
     466static bool is_kernel_fault(istate_t *istate, uintptr_t va)
    467467{
    468468        region_register_t rr;
     469
     470        if (istate_from_uspace(istate))
     471                return false;
    469472
    470473        rr.word = rr_read(VA2VRN(va));
     
    484487        pte_t t;
    485488
     489        assert(istate_from_uspace(istate));
     490
    486491        va = istate->cr_ifa; /* faulting address */
    487 
    488         assert(!is_kernel_fault(va));
    489492
    490493        bool found = page_mapping_find(AS, va, true, &t);
     
    587590        as_t *as = AS;
    588591
    589         if (is_kernel_fault(va)) {
     592        if (is_kernel_fault(istate, va)) {
    590593                if (va < end_of_identity) {
    591594                        /*
     
    648651        va = istate->cr_ifa;  /* faulting address */
    649652
    650         if (is_kernel_fault(va))
     653        if (is_kernel_fault(istate, va))
    651654                as = AS_KERNEL;
    652655
     
    680683        pte_t t;
    681684
     685        assert(istate_from_uspace(istate));
     686
    682687        va = istate->cr_ifa;  /* faulting address */
    683 
    684         assert(!is_kernel_fault(va));
    685688
    686689        bool found = page_mapping_find(AS, va, true, &t);
     
    716719        va = istate->cr_ifa;  /* faulting address */
    717720
    718         if (is_kernel_fault(va))
     721        if (is_kernel_fault(istate, va))
    719722                as = AS_KERNEL;
    720723
     
    752755        pte_t t;
    753756
     757        assert(istate_from_uspace(istate));
     758
    754759        va = istate->cr_ifa;  /* faulting address */
    755 
    756         assert(!is_kernel_fault(va));
    757760
    758761        /*
     
    779782        pte_t t;
    780783
     784        assert(istate_from_uspace(istate));
     785
    781786        va = istate->cr_ifa;  /* faulting address */
    782 
    783         assert(!is_kernel_fault(va));
    784787
    785788        bool found = page_mapping_find(AS, va, true, &t);
Note: See TracChangeset for help on using the changeset viewer.