Skip to content

Commit

Permalink
risc-v: consolidate wrapper functions
Browse files Browse the repository at this point in the history
Consolidate functions to avoid redundancy.

Signed-off-by: Axel Heider <[email protected]>
  • Loading branch information
axel-h committed Nov 28, 2023
1 parent 94c5a0b commit 8be7083
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 45 deletions.
68 changes: 30 additions & 38 deletions include/arch/riscv/arch/machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ compile_assert(kernel_elf_no_overflow, KERNEL_ELF_BASE_RAW < KERNEL_ELF_BASE_RAW
#define SIE_MEIE 11 /* M-Mode external interrupt enable (MIP only). */
/* Bit 12 and above are reserved. */

static inline void ifence_local(void)
{
asm volatile("fence.i":::"memory");
}

static inline void sfence_vma_local(void)
{
/* This flushes the TLB */
asm volatile("sfence.vma" ::: "memory");
}

#ifdef ENABLE_SMP_SUPPORT

static inline void fence_rw_rw(void)
Expand All @@ -78,17 +89,7 @@ static inline void fence_w_rw(void)

static inline void fence_r_rw(void)
{
asm volatile("fence r,rw" ::: "memory");
}

static inline void ifence_local(void)
{
asm volatile("fence.i":::"memory");
}

static inline void sfence_local(void)
{
asm volatile("sfence.vma" ::: "memory");
asm volatile("fence r, rw" ::: "memory");
}

static inline word_t get_sbi_mask_for_all_remote_harts(void)
Expand All @@ -102,47 +103,42 @@ static inline word_t get_sbi_mask_for_all_remote_harts(void)
return mask;
}

#endif /* ENABLE_SMP_SUPPORT */

static inline void ifence(void)
{
ifence_local();
#ifdef ENABLE_SMP_SUPPORT
word_t mask = get_sbi_mask_for_all_remote_harts();
sbi_remote_fence_i(mask);
#endif
}

static inline void sfence(void)
static inline void sfence_vma_global(void)
{
#ifdef ENABLE_SMP_SUPPORT
fence_w_rw();
sfence_local();
#endif

sfence_vma_local();

#ifdef ENABLE_SMP_SUPPORT
word_t mask = get_sbi_mask_for_all_remote_harts();
sbi_remote_sfence_vma(mask, 0, 0);
#endif
}

static inline void hwASIDFlushLocal(asid_t asid)
static inline void hwASIDFlush(asid_t asid)
{
/* flush ASID on the current hart */
asm volatile("sfence.vma x0, %0" :: "r"(asid): "memory");
}

static inline void hwASIDFlush(asid_t asid)
{
hwASIDFlushLocal(asid);
#ifdef ENABLE_SMP_SUPPORT
word_t mask = get_sbi_mask_for_all_remote_harts();
sbi_remote_sfence_vma_asid(mask, 0, 0, asid);
#endif
}

#else

static inline void sfence(void)
{
asm volatile("sfence.vma" ::: "memory");
}

static inline void hwASIDFlush(asid_t asid)
{
asm volatile("sfence.vma x0, %0" :: "r"(asid): "memory");
}

#endif /* end of !ENABLE_SMP_SUPPORT */

word_t PURE getRestartPC(tcb_t *thread);
void setNextPC(tcb_t *thread, word_t v);

Expand Down Expand Up @@ -252,12 +248,8 @@ static inline void setVSpaceRoot(paddr_t addr, asid_t asid)

write_satp(satp.words[0]);

/* Order read/write operations */
#ifdef ENABLE_SMP_SUPPORT
sfence_local();
#else
sfence();
#endif
/* Order read/write operations. */
sfence_vma_local();
}

void map_kernel_devices(void);
Expand Down
14 changes: 7 additions & 7 deletions src/arch/riscv/kernel/vspace.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ BOOT_CODE void map_it_pt_cap(cap_t vspace_cap, cap_t pt_cap)
0, /* read */
1 /* valid */
);
sfence();
sfence_vma_global();
}

BOOT_CODE void map_it_frame_cap(cap_t vspace_cap, cap_t frame_cap)
Expand All @@ -216,7 +216,7 @@ BOOT_CODE void map_it_frame_cap(cap_t vspace_cap, cap_t frame_cap)
1, /* read */
1 /* valid */
);
sfence();
sfence_vma_global();
}

BOOT_CODE cap_t create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large)
Expand Down Expand Up @@ -540,7 +540,7 @@ void unmapPageTable(asid_t asid, vptr_t vptr, pte_t *target_pt)
0, /* read */
0 /* valid */
);
sfence();
sfence_vma_global();
}

static pte_t pte_pte_invalid_new(void)
Expand Down Expand Up @@ -570,7 +570,7 @@ void unmapPage(vm_page_size_t page_size, asid_t asid, vptr_t vptr, pptr_t pptr)
}

lu_ret.ptSlot[0] = pte_pte_invalid_new();
sfence();
sfence_vma_global();
}

void setVMRoot(tcb_t *tcb)
Expand Down Expand Up @@ -1078,7 +1078,7 @@ exception_t performPageTableInvocationMap(cap_t cap, cte_t *ctSlot,
{
ctSlot->cap = cap;
*ptSlot = pte;
sfence();
sfence_vma_global();

return EXCEPTION_NONE;
}
Expand Down Expand Up @@ -1121,7 +1121,7 @@ static exception_t performPageGetAddress(void *vbase_ptr, bool_t call)
static exception_t updatePTE(pte_t pte, pte_t *base)
{
*base = pte;
sfence();
sfence_vma_global();
return EXCEPTION_NONE;
}

Expand Down Expand Up @@ -1228,7 +1228,7 @@ exception_t benchmark_arch_map_logBuffer(word_t frame_cptr)
kernel_image_level2_dev_pt[RISCV_GET_PT_INDEX(KS_LOG_PPTR, 1)] = pte_next(ksUserLogBuffer, true);
#endif

sfence();
sfence_vma_global();

return EXCEPTION_NONE;
}
Expand Down

0 comments on commit 8be7083

Please sign in to comment.