You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
arch/tile: add Tilera's <arch/sim.h> header as an open-source header
This change adds one of the Tilera standard <arch> headers to the set of headers shipped with Linux. The <arch/sim.h> header provides methods for programmatically interacting with the Tilera simulator. The current <arch/sim.h> provides inline assembly for the _sim_syscall function, so the declaration and definition previously provided manually in Linux are no longer needed. We now use the standard sim_validate_lines_evicted() method from <arch/sim.h> rather than rolling our own direct call to sim_syscall(). Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -217,13 +217,6 @@ int hardwall_deactivate(struct task_struct *task);
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/* Invoke the simulator "syscall" mechanism (see arch/tile/kernel/entry.S). */
|
||||
extern int _sim_syscall(int syscall_num, ...);
|
||||
#define sim_syscall(syscall_num, ...) \
|
||||
_sim_syscall(SIM_CONTROL_SYSCALL + \
|
||||
((syscall_num) << _SIM_CONTROL_OPERATOR_BITS), \
|
||||
## __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Kernel threads can check to see if they need to migrate their
|
||||
* stack whenever they return from a context switch; for user
|
||||
|
||||
@@ -25,28 +25,6 @@ STD_ENTRY(current_text_addr)
|
||||
{ move r0, lr; jrp lr }
|
||||
STD_ENDPROC(current_text_addr)
|
||||
|
||||
STD_ENTRY(_sim_syscall)
|
||||
/*
|
||||
* Wait for r0-r9 to be ready (and lr on the off chance we
|
||||
* want the syscall to locate its caller), then make a magic
|
||||
* simulator syscall.
|
||||
*
|
||||
* We carefully stall until the registers are readable in case they
|
||||
* are the target of a slow load, etc. so that tile-sim will
|
||||
* definitely be able to read all of them inside the magic syscall.
|
||||
*
|
||||
* Technically this is wrong for r3-r9 and lr, since an interrupt
|
||||
* could come in and restore the registers with a slow load right
|
||||
* before executing the mtspr. We may need to modify tile-sim to
|
||||
* explicitly stall for this case, but we do not yet have
|
||||
* a way to implement such a stall.
|
||||
*/
|
||||
{ and zero, lr, r9 ; and zero, r8, r7 }
|
||||
{ and zero, r6, r5 ; and zero, r4, r3 }
|
||||
{ and zero, r2, r1 ; mtspr SIM_CONTROL, r0 }
|
||||
{ jrp lr }
|
||||
STD_ENDPROC(_sim_syscall)
|
||||
|
||||
/*
|
||||
* Implement execve(). The i386 code has a note that forking from kernel
|
||||
* space results in no copy on write until the execve, so we should be
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/homecache.h>
|
||||
|
||||
#include <arch/sim.h>
|
||||
|
||||
#include "migrate.h"
|
||||
|
||||
|
||||
@@ -217,13 +219,6 @@ static unsigned long cache_flush_length(unsigned long length)
|
||||
return (length >= CHIP_L2_CACHE_SIZE()) ? HV_FLUSH_EVICT_L2 : length;
|
||||
}
|
||||
|
||||
/* On the simulator, confirm lines have been evicted everywhere. */
|
||||
static void validate_lines_evicted(unsigned long pfn, size_t length)
|
||||
{
|
||||
sim_syscall(SIM_SYSCALL_VALIDATE_LINES_EVICTED,
|
||||
(HV_PhysAddr)pfn << PAGE_SHIFT, length);
|
||||
}
|
||||
|
||||
/* Flush a page out of whatever cache(s) it is in. */
|
||||
void homecache_flush_cache(struct page *page, int order)
|
||||
{
|
||||
@@ -234,7 +229,7 @@ void homecache_flush_cache(struct page *page, int order)
|
||||
|
||||
homecache_mask(page, pages, &home_mask);
|
||||
flush_remote(pfn, length, &home_mask, 0, 0, 0, NULL, NULL, 0);
|
||||
validate_lines_evicted(pfn, pages * PAGE_SIZE);
|
||||
sim_validate_lines_evicted(PFN_PHYS(pfn), pages * PAGE_SIZE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user