mirror of
https://github.com/torvalds/linux
synced 2024-10-27 21:59:21 +00:00
57dace2391
Until now, we have always entered the spu page fault handler with a mutex for the spu context held. This has multiple bad side-effects: - it becomes impossible to suspend the context during page faults - if an spu program attempts to access its own mmio areas through DMA, we get an immediate livelock when the nopage function tries to acquire the same mutex This patch makes the page fault logic operate on a struct spu_context instead of a struct spu, and moves it from spu_base.c to a new file fault.c inside of spufs. We now also need to copy the dar and dsisr contents of the last fault into the saved context to have it accessible in case we schedule out the context before activating the page fault handler. Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
61 lines
1.8 KiB
Makefile
61 lines
1.8 KiB
Makefile
obj-y += switch.o fault.o
|
|
|
|
obj-$(CONFIG_SPU_FS) += spufs.o
|
|
spufs-y += inode.o file.o context.o syscalls.o coredump.o
|
|
spufs-y += sched.o backing_ops.o hw_ops.o run.o gang.o
|
|
|
|
# Rules to build switch.o with the help of SPU tool chain
|
|
SPU_CROSS := spu-
|
|
SPU_CC := $(SPU_CROSS)gcc
|
|
SPU_AS := $(SPU_CROSS)gcc
|
|
SPU_LD := $(SPU_CROSS)ld
|
|
SPU_OBJCOPY := $(SPU_CROSS)objcopy
|
|
SPU_CFLAGS := -O2 -Wall -I$(srctree)/include \
|
|
-I$(objtree)/include2 -D__KERNEL__
|
|
SPU_AFLAGS := -c -D__ASSEMBLY__ -I$(srctree)/include \
|
|
-I$(objtree)/include2 -D__KERNEL__
|
|
SPU_LDFLAGS := -N -Ttext=0x0
|
|
|
|
$(obj)/switch.o: $(obj)/spu_save_dump.h $(obj)/spu_restore_dump.h
|
|
clean-files := spu_save_dump.h spu_restore_dump.h
|
|
|
|
# Compile SPU files
|
|
cmd_spu_cc = $(SPU_CC) $(SPU_CFLAGS) -c -o $@ $<
|
|
quiet_cmd_spu_cc = SPU_CC $@
|
|
$(obj)/spu_%.o: $(src)/spu_%.c
|
|
$(call if_changed,spu_cc)
|
|
|
|
# Assemble SPU files
|
|
cmd_spu_as = $(SPU_AS) $(SPU_AFLAGS) -o $@ $<
|
|
quiet_cmd_spu_as = SPU_AS $@
|
|
$(obj)/spu_%.o: $(src)/spu_%.S
|
|
$(call if_changed,spu_as)
|
|
|
|
# Link SPU Executables
|
|
cmd_spu_ld = $(SPU_LD) $(SPU_LDFLAGS) -o $@ $^
|
|
quiet_cmd_spu_ld = SPU_LD $@
|
|
$(obj)/spu_%: $(obj)/spu_%_crt0.o $(obj)/spu_%.o
|
|
$(call if_changed,spu_ld)
|
|
|
|
# Copy into binary format
|
|
cmd_spu_objcopy = $(SPU_OBJCOPY) -O binary $< $@
|
|
quiet_cmd_spu_objcopy = OBJCOPY $@
|
|
$(obj)/spu_%.bin: $(src)/spu_%
|
|
$(call if_changed,spu_objcopy)
|
|
|
|
# create C code from ELF executable
|
|
cmd_hexdump = ( \
|
|
echo "/*" ; \
|
|
echo " * $*_dump.h: Copyright (C) 2005 IBM." ; \
|
|
echo " * Hex-dump auto generated from $*.c." ; \
|
|
echo " * Do not edit!" ; \
|
|
echo " */" ; \
|
|
echo "static unsigned int $*_code[] " \
|
|
"__attribute__((__aligned__(128))) = {" ; \
|
|
hexdump -v -e '"0x" 4/1 "%02x" "," "\n"' $< ; \
|
|
echo "};" ; \
|
|
) > $@
|
|
quiet_cmd_hexdump = HEXDUMP $@
|
|
$(obj)/%_dump.h: $(obj)/%.bin
|
|
$(call if_changed,hexdump)
|