Switch to Seoul VMM repository instead of NUL

In this version of the transition the Hip structure from Genode is reused,
@nfeskes seoul_libc_support is used for the string functions and the
nul/config.h is replaced by just using a constant value in the one place where
the file was needed.

Related to #666.
This commit is contained in:
Markus Partheymüller 2013-03-15 13:06:30 +01:00 committed by Norman Feske
parent 9d0a377efe
commit b8eb9b534d
7 changed files with 120 additions and 37 deletions

53
ports/ports/seoul.mk Normal file
View File

@ -0,0 +1,53 @@
SEOUL_REV = 6ee3f454c66fa9fb427ff161ced3fccf6462311a
SEOUL = seoul-git
SEOUL_URL = https://github.com/alex-ab/seoul.git
#
# Check for tools
#
$(call check_tool,git)
#
# Interface to top-level prepare Makefile
#
PORTS += $(SEOUL)
#
# We need to execute some python scripts for preparing the i82576vf
# device model.
#
PYTHON2 := $(notdir $(lastword $(shell which python2 python2.{4,5,6,7,8})))
ifeq ($(PYTHON2),)
prepare: python_not_installed
python_not_installed:
$(ECHO) "Error: Seoul needs Python 2 to be installed"
@false;
endif
prepare:: $(CONTRIB_DIR)/$(SEOUL)
#
# Port-specific local rules
#
$(DOWNLOAD_DIR)/$(SEOUL)/.git:
$(VERBOSE)git clone $(SEOUL_URL) $(DOWNLOAD_DIR)/$(SEOUL) && \
cd download/seoul-git && \
git reset --hard $(SEOUL_REV) && \
cd ../.. && touch $@
I82576VF_DIR = $(CONTRIB_DIR)/$(SEOUL)/model/intel82576vf
EXECUTOR_DIR = $(CONTRIB_DIR)/$(SEOUL)/executor
$(CONTRIB_DIR)/$(SEOUL)/.git: $(DOWNLOAD_DIR)/$(SEOUL)/.git
$(VERBOSE)git clone $(DOWNLOAD_DIR)/$(SEOUL) $(CONTRIB_DIR)/$(SEOUL)
@# fix python version in code generator scripts
$(VERBOSE)sed -i "s/env python2/env $(PYTHON2)/" $(I82576VF_DIR)/genreg.py
@# call code generators
$(VERBOSE)cd $(EXECUTOR_DIR); \
./build_instructions.py > instructions.inc
$(VERBOSE)cd $(I82576VF_DIR); \
./genreg.py reg_pci.py ../../include/model/intel82576vfpci.inc
$(VERBOSE)cd $(I82576VF_DIR); \
./genreg.py reg_mmio.py ../../include/model/intel82576vfmmio.inc
$(CONTRIB_DIR)/$(SEOUL): $(CONTRIB_DIR)/$(SEOUL)/.git

View File

@ -43,11 +43,11 @@ Device_model_info::Device_model_info(char const *name, Create create,
* Helper macro to create global 'Device_model_info' objects
*/
#define MODEL_INFO(name, ...) \
extern "C" void __parameter_##name##_function(Motherboard &, unsigned long *, \
extern "C" void __parameter_##name##_fn(Motherboard &, unsigned long *, \
const char *, unsigned); \
static char const * name##_arg_names[] = { __VA_ARGS__ , 0 }; \
static Device_model_info \
name##_model_info(#name, __parameter_##name##_function, name##_arg_names);
name##_model_info(#name, __parameter_##name##_fn, name##_arg_names);
#define MODEL_INFO_NO_ARG(name) MODEL_INFO(name, 0)
@ -80,8 +80,9 @@ MODEL_INFO(vga, "io_base", "fb_size")
MODEL_INFO(pmtimer, "io_port")
MODEL_INFO(pcihostbridge, "bus_num", "bus_count", "io_base", "mem_base")
MODEL_INFO(i82576vf, "promisc", "mem_mmio", "mem_msix", "txpoll_us", "rx_map")
#ifndef __x86_64__
MODEL_INFO(intel82576vf, "promisc", "mem_mmio", "mem_msix", "txpoll_us", "rx_map")
#endif
MODEL_INFO(ahci, "mem", "irq", "bdf")
MODEL_INFO(drive, "sigma0drive", "controller", "port")

View File

@ -57,7 +57,6 @@
/* NOVA userland includes */
#include <nul/vcpu.h>
#include <nul/motherboard.h>
#include <nul/service_timer.h>
#include <sys/hip.h>
/* local includes */
@ -1094,7 +1093,7 @@ class Machine : public StaticReceiver<Machine>
Vcpu_dispatcher *vcpu_dispatcher =
new Vcpu_dispatcher(msg.vcpu, _guest_memory,
_motherboard,
_hip->has_svm(), _hip->has_vmx());
_hip->has_feature_svm(), _hip->has_feature_vmx());
msg.value = vcpu_dispatcher->sel_sm_ec();
return true;
@ -1292,7 +1291,7 @@ class Machine : public StaticReceiver<Machine>
}
msg.wallclocktime = _rtc->get_current_time();
Logging::printf("Got time %llx\n", msg.wallclocktime);
msg.timestamp = _motherboard.clock()->clock(TimerProtocol::WALLCLOCK_FREQUENCY);
msg.timestamp = _motherboard.clock()->clock(1000000U);
*Genode::Thread_base::myself()->utcb() = utcb_backup;
@ -1374,7 +1373,7 @@ class Machine : public StaticReceiver<Machine>
:
_hip_rom("hypervisor_info_page"),
_hip(Genode::env()->rm_session()->attach(_hip_rom.dataspace())),
_clock(_hip->freq_tsc*1000),
_clock(_hip->tsc_freq*1000),
_motherboard(&_clock, _hip),
_guest_memory(guest_memory),
_boot_modules(boot_modules)

View File

@ -19,6 +19,7 @@
/* NOVA userland includes */
#include <service/logging.h>
#include <service/memory.h>
enum { verbose_memory_leak = false };
@ -51,7 +52,7 @@ void Logging::printf(const char *format, ...)
}
void Logging::vprintf(const char *format, char *&)
void Logging::vprintf(const char *format, va_list &ap)
{
Genode::Lock::Guard guard(*printf_lock());
@ -81,7 +82,7 @@ void Logging::panic(const char *format, ...)
}
void *heap_alloc(unsigned int size)
void *heap_alloc(size_t size)
{
void *res = Genode::env()->heap()->alloc(size);
if (res)
@ -92,7 +93,7 @@ void *heap_alloc(unsigned int size)
}
void *operator new[](unsigned int size)
void *operator new[](size_t size)
{
void * addr = heap_alloc(size);
if (addr)
@ -102,8 +103,9 @@ void *operator new[](unsigned int size)
}
void *operator new[](unsigned int size, unsigned int align)
void *operator new[](size_t size, Aligned const alignment)
{
unsigned int align = alignment.alignment;
void *res = heap_alloc(size + align);
if (res)
Genode::memset(res, 0, size + align);
@ -112,7 +114,7 @@ void *operator new[](unsigned int size, unsigned int align)
}
void *operator new (unsigned int size)
void *operator new (size_t size)
{
void * addr = heap_alloc(size);
if (addr)
@ -140,3 +142,13 @@ void do_exit(char const *msg)
char __param_table_start;
char __param_table_end;
/* parameter support */
#include <service/params.h>
Genode::Fifo<Parameter> &Parameter::all_parameters()
{
static Genode::Fifo<Parameter> _all_parameters;
return _all_parameters;
}
// EOF

View File

@ -1,13 +0,0 @@
diff --git a/julian/model/82576vf.cc b/julian/model/82576vf.cc
index b4d29a5..db8d2f3 100644
--- a/julian/model/82576vf.cc
+++ b/julian/model/82576vf.cc
@@ -950,7 +950,7 @@ public:
};
-PARAM_HANDLER(82576vf,
+PARAM_HANDLER(i82576vf,
"82576vf:[promisc][,mem_mmio][,mem_msix][,txpoll_us][,rx_map] - attach an Intel 82576VF to the PCI bus.",
"promisc - if !=0, be always promiscuous (use for Linux VMs that need it for bridging) (Default 1)",
"txpoll_us - if !=0, map TX registers to guest and poll them every txpoll_us microseconds. (Default 0)",

View File

@ -0,0 +1,27 @@
/*
* \brief Memory header expected by Seoul
* \author Markus Partheymueller
* \date 2013-03-02
*/
/*
* Copyright (C) 2011-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
struct Aligned {
size_t alignment;
Aligned(size_t alignment) : alignment(alignment) {}
};
void *heap_alloc(size_t size);
void *operator new[](size_t size);
void *operator new[](size_t size, Aligned const alignment);
void *operator new (size_t size);
void operator delete[](void *ptr);

View File

@ -1,35 +1,39 @@
TARGET = vancouver
CONTRIB_DIR = $(REP_DIR)/contrib/vancouver-git
VANCOUVER_DIR = $(CONTRIB_DIR)/vancouver
NOVA_INCLUDE_DIR = $(REP_DIR)/contrib/vancouver-git/base/include
CONTRIB_DIR = $(REP_DIR)/contrib/seoul-git
VANCOUVER_DIR = $(CONTRIB_DIR)
GENODE_DIR = $(CONTRIB_DIR)/genode
NOVA_INCLUDE_DIR = $(REP_DIR)/contrib/seoul-git/include
REQUIRES = nova x86_32
REQUIRES = nova
ifeq ($(wildcard $(VANCOUVER_DIR)),)
REQUIRES += prepare_ports_vancouver
endif
LIBS += base blit alarm
LIBS += base blit alarm seoul_libc_support
SRC_CC = main.cc nova_user_env.cc device_model_registry.cc
SRC_CC += console.cc keyboard.cc network.cc disk.cc
SRC_BIN = mono.tff
MODEL_SRC_CC += $(notdir $(wildcard $(VANCOUVER_DIR)/model/*.cc))
EXECUTOR_SRC_CC += $(notdir $(wildcard $(VANCOUVER_DIR)/executor/*.cc))
SERVICE_SRC_CC += hostsink.cc
SERVICE_SRC_CC += sink.cc
ifneq ($(filter x86_64, $(SPECS)),)
FILTER_OUT += model/intel82576vf.cc
CC_CXX_OPT += -mcmodel=large
endif
SRC_CC += $(filter-out $(FILTER_OUT),$(addprefix model/,$(MODEL_SRC_CC)))
SRC_CC += $(CONTRIB_DIR)/julian/model/82576vf.cc
SRC_CC += $(filter-out $(FILTER_OUT),$(addprefix executor/,$(EXECUTOR_SRC_CC)))
SRC_CC += base/service/hostsink.cc base/lib/runtime/string.cc
SRC_CC += model/sink.cc
INC_DIR += $(PRG_DIR)
INC_DIR += $(CONTRIB_DIR)/julian/model
INC_DIR += $(CONTRIB_DIR)/julian/include
INC_DIR += $(PRG_DIR)/executor
INC_DIR += $(VANCOUVER_DIR)/model
INC_DIR += $(VANCOUVER_DIR)/executor
INC_DIR += $(VANCOUVER_DIR)/include
INC_DIR += $(VANCOUVER_DIR)/include $(GENODE_DIR)/include
INC_DIR += $(NOVA_INCLUDE_DIR)
CC_WARN += -Wno-parentheses