Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ae09838 authored by Chris Metcalf's avatar Chris Metcalf
Browse files

tile: provide traceability for hypervisor calls



This change adds infrastructure (CONFIG_TILE_HVGLUE_TRACE) that
provides C code wrappers for the calls the kernel makes to the Tilera
hypervisor.  This allows standard kernel infrastructure like FTRACE to
be able to instrument hypervisor calls.

To allow direct calls to the true API, we export their names with a
leading underscore as well.  This is important for the few contexts
where we need to make hypervisor calls without touching the stack.

As part of this change, we also switch from creating the symbols
with linker magic to creating them with assembler magic.  This lets
us provide a symbol type and generally make them appear more as symbols
and less as just random values in the Elf namespace.

Signed-off-by: default avatarChris Metcalf <cmetcalf@tilera.com>
parent fad052dc
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -24,4 +24,12 @@ config DEBUG_EXTRA_FLAGS
	  size and build time noticeably.  Such flags are often
	  helpful if the main use of debug info is line number info.

config TILE_HVGLUE_TRACE
	bool "Provide wrapper functions for hypervisor ABI calls"
	default n
	help
	  Provide wrapper functions for the hypervisor ABI calls
	  defined in arch/tile/kernel/hvglue.S.  This allows tracing
	  mechanisms, etc., to have visibility into those calls.

endmenu
+2 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#

extra-y := vmlinux.lds head_$(BITS).o
obj-y := backtrace.o entry.o irq.o messaging.o \
obj-y := backtrace.o entry.o hvglue.o irq.o messaging.o \
	pci-dma.o proc.o process.o ptrace.o reboot.o \
	setup.o signal.o single_step.o stack.o sys.o \
	sysfs.o time.o traps.o unaligned.o vdso.o \
@@ -21,5 +21,6 @@ else
obj-$(CONFIG_PCI)		+= pci.o
endif
obj-$(CONFIG_TILE_USB)		+= usb.o
obj-$(CONFIG_TILE_HVGLUE_TRACE)	+= hvglue_trace.o

obj-y				+= vdso/
+4 −4
Original line number Diff line number Diff line
@@ -39,12 +39,12 @@ ENTRY(_start)
	}
	{
	  moveli r0, _HV_VERSION_OLD_HV_INIT
	  jal hv_init
	  jal _hv_init
	}
	/* Get a reasonable default ASID in r0 */
	{
	  move r0, zero
	  jal hv_inquire_asid
	  jal _hv_inquire_asid
	}
	/* Install the default page table */
	{
@@ -73,12 +73,12 @@ ENTRY(_start)
	}
	{
	  auli lr, lr, ha16(1f)
	  j hv_install_context
	  j _hv_install_context
	}
1:

	/* Get our processor number and save it away in SAVE_K_0. */
	jal hv_inquire_topology
	jal _hv_inquire_topology
	mulll_uu r4, r1, r2        /* r1 == y, r2 == width */
	add r4, r4, r0             /* r0 == x, so r4 == cpu == y*width + x */

+4 −4
Original line number Diff line number Diff line
@@ -55,11 +55,11 @@ ENTRY(_start)
	  movei r2, TILE_CHIP_REV
	  movei r3, KERNEL_PL
	}
	jal hv_init
	jal _hv_init
	/* Get a reasonable default ASID in r0 */
	{
	  move r0, zero
	  jal hv_inquire_asid
	  jal _hv_inquire_asid
	}

	/*
@@ -130,7 +130,7 @@ ENTRY(_start)
	}
	{
	  moveli r3, CTX_PAGE_FLAG
	  j hv_install_context
	  j _hv_install_context
	}
1:

@@ -141,7 +141,7 @@ ENTRY(_start)
	mtspr SPR_INTERRUPT_VECTOR_BASE_K, r0

	/* Get our processor number and save it away in SAVE_K_0. */
	jal hv_inquire_topology
	jal _hv_inquire_topology
	{
	  GET_FIRST_INT(r5, r1)   /* r5 = width */
	  GET_SECOND_INT(r4, r0)  /* r4 = y */
+74 −0
Original line number Diff line number Diff line
/* Hypervisor call vector addresses; see <hv/hypervisor.h> */
.macro gensym sym, val, size
.org \val
.global _\sym
.type _\sym,function
_\sym:
.size _\sym,\size
#ifndef CONFIG_TILE_HVGLUE_TRACE
.globl \sym
.set \sym,_\sym
#endif
.endm

.section .hvglue,"x",@nobits
.align 8
gensym hv_init, 0x20, 32
gensym hv_install_context, 0x40, 32
gensym hv_sysconf, 0x60, 32
gensym hv_get_rtc, 0x80, 32
gensym hv_set_rtc, 0xa0, 32
gensym hv_flush_asid, 0xc0, 32
gensym hv_flush_page, 0xe0, 32
gensym hv_flush_pages, 0x100, 32
gensym hv_restart, 0x120, 32
gensym hv_halt, 0x140, 32
gensym hv_power_off, 0x160, 32
gensym hv_inquire_physical, 0x180, 32
gensym hv_inquire_memory_controller, 0x1a0, 32
gensym hv_inquire_virtual, 0x1c0, 32
gensym hv_inquire_asid, 0x1e0, 32
gensym hv_nanosleep, 0x200, 32
gensym hv_console_read_if_ready, 0x220, 32
gensym hv_console_write, 0x240, 32
gensym hv_downcall_dispatch, 0x260, 32
gensym hv_inquire_topology, 0x280, 32
gensym hv_fs_findfile, 0x2a0, 32
gensym hv_fs_fstat, 0x2c0, 32
gensym hv_fs_pread, 0x2e0, 32
gensym hv_physaddr_read64, 0x300, 32
gensym hv_physaddr_write64, 0x320, 32
gensym hv_get_command_line, 0x340, 32
gensym hv_set_caching, 0x360, 32
gensym hv_bzero_page, 0x380, 32
gensym hv_register_message_state, 0x3a0, 32
gensym hv_send_message, 0x3c0, 32
gensym hv_receive_message, 0x3e0, 32
gensym hv_inquire_context, 0x400, 32
gensym hv_start_all_tiles, 0x420, 32
gensym hv_dev_open, 0x440, 32
gensym hv_dev_close, 0x460, 32
gensym hv_dev_pread, 0x480, 32
gensym hv_dev_pwrite, 0x4a0, 32
gensym hv_dev_poll, 0x4c0, 32
gensym hv_dev_poll_cancel, 0x4e0, 32
gensym hv_dev_preada, 0x500, 32
gensym hv_dev_pwritea, 0x520, 32
gensym hv_flush_remote, 0x540, 32
gensym hv_console_putc, 0x560, 32
gensym hv_inquire_tiles, 0x580, 32
gensym hv_confstr, 0x5a0, 32
gensym hv_reexec, 0x5c0, 32
gensym hv_set_command_line, 0x5e0, 32
gensym hv_clear_intr, 0x600, 32
gensym hv_enable_intr, 0x620, 32
gensym hv_disable_intr, 0x640, 32
gensym hv_raise_intr, 0x660, 32
gensym hv_trigger_ipi, 0x680, 32
gensym hv_store_mapping, 0x6a0, 32
gensym hv_inquire_realpa, 0x6c0, 32
gensym hv_flush_all, 0x6e0, 32
gensym hv_get_ipi_pte, 0x700, 32
gensym hv_set_pte_super_shift, 0x720, 32
gensym hv_console_set_ipi, 0x7e0, 32
gensym hv_glue_internals, 0x800, 30720
Loading