mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-20 11:34:02 +08:00
arch/tile: use extended assembly to inline __mb_incoherent()
This avoids having to maintain an additional separate assembly file, and of course the inline is slightly more efficient as well. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
This commit is contained in:
parent
0b989cac90
commit
6c4d112688
@ -90,7 +90,24 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CHIP_HAS_MF_WAITS_FOR_VICTIMS()
|
#if !CHIP_HAS_MF_WAITS_FOR_VICTIMS()
|
||||||
int __mb_incoherent(void); /* Helper routine for mb_incoherent(). */
|
#include <hv/syscall_public.h>
|
||||||
|
/*
|
||||||
|
* Issue an uncacheable load to each memory controller, then
|
||||||
|
* wait until those loads have completed.
|
||||||
|
*/
|
||||||
|
static inline void __mb_incoherent(void)
|
||||||
|
{
|
||||||
|
long clobber_r10;
|
||||||
|
asm volatile("swint2"
|
||||||
|
: "=R10" (clobber_r10)
|
||||||
|
: "R10" (HV_SYS_fence_incoherent)
|
||||||
|
: "r0", "r1", "r2", "r3", "r4",
|
||||||
|
"r5", "r6", "r7", "r8", "r9",
|
||||||
|
"r11", "r12", "r13", "r14",
|
||||||
|
"r15", "r16", "r17", "r18", "r19",
|
||||||
|
"r20", "r21", "r22", "r23", "r24",
|
||||||
|
"r25", "r26", "r27", "r28", "r29");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Fence to guarantee visibility of stores to incoherent memory. */
|
/* Fence to guarantee visibility of stores to incoherent memory. */
|
||||||
|
@ -2,9 +2,8 @@
|
|||||||
# Makefile for TILE-specific library files..
|
# Makefile for TILE-specific library files..
|
||||||
#
|
#
|
||||||
|
|
||||||
lib-y = cacheflush.o checksum.o cpumask.o delay.o \
|
lib-y = cacheflush.o checksum.o cpumask.o delay.o uaccess.o \
|
||||||
mb_incoherent.o uaccess.o memmove.o \
|
memmove.o memcpy_$(BITS).o memchr_$(BITS).o memset_$(BITS).o \
|
||||||
memcpy_$(BITS).o memchr_$(BITS).o memset_$(BITS).o \
|
|
||||||
strchr_$(BITS).o strlen_$(BITS).o
|
strchr_$(BITS).o strlen_$(BITS).o
|
||||||
|
|
||||||
ifeq ($(CONFIG_TILEGX),y)
|
ifeq ($(CONFIG_TILEGX),y)
|
||||||
|
@ -45,9 +45,6 @@ EXPORT_SYMBOL(__copy_from_user_zeroing);
|
|||||||
EXPORT_SYMBOL(__copy_in_user_inatomic);
|
EXPORT_SYMBOL(__copy_in_user_inatomic);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* arch/tile/lib/mb_incoherent.S */
|
|
||||||
EXPORT_SYMBOL(__mb_incoherent);
|
|
||||||
|
|
||||||
/* hypervisor glue */
|
/* hypervisor glue */
|
||||||
#include <hv/hypervisor.h>
|
#include <hv/hypervisor.h>
|
||||||
EXPORT_SYMBOL(hv_dev_open);
|
EXPORT_SYMBOL(hv_dev_open);
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010 Tilera Corporation. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation, version 2.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
|
|
||||||
* NON INFRINGEMENT. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* Assembly code for invoking the HV's fence_incoherent syscall.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
|
||||||
#include <hv/syscall_public.h>
|
|
||||||
#include <arch/abi.h>
|
|
||||||
#include <arch/chip.h>
|
|
||||||
|
|
||||||
#if !CHIP_HAS_MF_WAITS_FOR_VICTIMS()
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Invoke the hypervisor's fence_incoherent syscall, which guarantees
|
|
||||||
* that all victims for cachelines homed on this tile have reached memory.
|
|
||||||
*/
|
|
||||||
STD_ENTRY(__mb_incoherent)
|
|
||||||
moveli TREG_SYSCALL_NR_NAME, HV_SYS_fence_incoherent
|
|
||||||
swint2
|
|
||||||
jrp lr
|
|
||||||
STD_ENDPROC(__mb_incoherent)
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user