Fiasco.OC: fix io-port fault answer in sigma0

In sigma0 normally no answer tag to a request/fault is created. It simply uses
the message tag received with the request. This doesn't work out when I/O ports
are requested. This patch constructs an appropriate answer tag. Moreover,
we have to enable I/O port protection in the kernel configuration.
This commit is contained in:
Stefan Kalkowski 2012-09-18 15:46:04 +02:00 committed by Norman Feske
parent 3e406a1077
commit 361a67d749
3 changed files with 18 additions and 71 deletions

View File

@ -1,70 +0,0 @@
#
# Automatically generated file; DO NOT EDIT.
# Fiasco configuration
#
#
# Target configuration
#
# CONFIG_IA32 is not set
CONFIG_AMD64=y
# CONFIG_ARM is not set
CONFIG_PF_PC=y
CONFIG_ABI_VF=y
CONFIG_AMD64_K8=y
# CONFIG_AMD64_CORE2 is not set
# CONFIG_AMD64_ATOM is not set
# CONFIG_AMD64_K10 is not set
# CONFIG_CPU_VIRT is not set
# CONFIG_SCHED_PIT is not set
# CONFIG_SCHED_RTC is not set
CONFIG_SCHED_APIC=y
# CONFIG_WORKAROUND_AMD_FPU_LEAK is not set
#
# Kernel options
#
# CONFIG_MP is not set
CONFIG_CONTEXT_4K=y
# CONFIG_IO_PROT is not set
# CONFIG_FINE_GRAINED_CPUTIME is not set
CONFIG_SCHED_FIXED_PRIO=y
#
# Debugging
#
CONFIG_INLINE=y
# CONFIG_NDEBUG is not set
CONFIG_NO_FRAME_PTR=y
CONFIG_STACK_DEPTH=y
# CONFIG_LIST_ALLOC_SANITY is not set
# CONFIG_BEFORE_IRET_SANITY is not set
# CONFIG_IRQ_SPINNER is not set
CONFIG_WATCHDOG=y
CONFIG_SERIAL=y
CONFIG_JDB=y
CONFIG_JDB_LOGGING=y
CONFIG_JDB_DISASM=y
CONFIG_JDB_GZIP=y
CONFIG_JDB_MISC=y
CONFIG_POWERSAVE_GETCHAR=y
# CONFIG_WARN_NONE is not set
CONFIG_WARN_WARNING=y
# CONFIG_WARN_ANY is not set
#
# Compiling
#
CONFIG_CC="gcc"
CONFIG_CXX="g++"
CONFIG_HOST_CC="gcc"
CONFIG_HOST_CXX="g++"
# CONFIG_MAINTAINER_MODE is not set
CONFIG_LABEL=""
# CONFIG_EXPERIMENTAL is not set
CONFIG_PERF_CNT=y
CONFIG_BIT64=y
CONFIG_WARN_LEVEL=1
CONFIG_XARCH="amd64"
CONFIG_IA32_TARGET="AMD Opteron"
CONFIG_ABI="vf"

View File

@ -0,0 +1,16 @@
Index: l4/pkg/sigma0/server/src/ioports_x86.cc
===================================================================
--- l4/pkg/sigma0/server/src/ioports_x86.cc (revision 40)
+++ l4/pkg/sigma0/server/src/ioports_x86.cc (working copy)
@@ -39,8 +39,9 @@
size = l4_fpage_size(fp) + PORT_SHIFT;
unsigned long i = io_ports.alloc(Region::bs(port, 1UL << size, t));
- if (i == port)
+ if (i == port) {
a->snd_fpage(l4_iofpage(port >> PORT_SHIFT, size - PORT_SHIFT));
- else
+ a->tag = l4_msgtag(0, 0, 1, 0);
+ } else
a->error(L4_ENOMEM);
}

View File

@ -1,4 +1,5 @@
REQUIRES = x86 64bit
KERNEL_CONFIG = $(REP_DIR)/config/x86_64.kernel
FIASCO_DIR = $(REP_DIR)/contrib/kernel/fiasco
KERNEL_CONFIG = $(FIASCO_DIR)/src/templates/globalconfig.out.amd64-mp
-include $(PRG_DIR)/../target.inc