読者です 読者をやめる 読者になる 読者になる

BHyVeビルドめも6

BHyVe DragonFlyBSD

φ(.. )メモシテオコウ
ついにept.cがコンパイルできた( ´∀`)bグッ! コミットはこれ
done: FreeBSDのsmp_rendezvous()に該当するのはどれかーというのを探しつつ、辿り着いたのがDragonFly BSDの公式サイトにあった更新記録でですね、「Remove the now obsolete smp_rendezvous() mechanism.」って書いてありましたよ/(^o^)\
でも、この機能自体は何かしらの関数に置き換わって使われてるだろうという予測の元にsys/kernを適当に調べて見つけたのがlwkt_ipiq.cにあるlwkt_send_ipiq3(定義はsys/thread.h)。 なんでこの機能自体はあるだろうかと思ったかというと、smp_rendezvous()がipiを使って他のcpuにメッセージを送ってからクリティカルセクションに入る処理なのでこの手の処理は使うだろうという適当な感じの予想だったんですが。 それであとは、引数の違いを適当に吸収するラッパー関数を作ってlwkt_send_ipiq3()を呼ぶようにしました。一番目の引数はこれでホントに良いのかはわかってませんが>< まぁ、他のCPUを止めたいわけだからこれで良い気もしますが。

+/*
+ * Wrapper function for smp_rendezvous().
+ */
+static inline void
+smp_rendezvous(void (* setup_func)(void *),
+               void (* action_func)(void *),
+               void (* teardown_func)(void *),
+               void *arg)
+{
+       /* TODO: need to know to pass mygd is correct or not. */
+       globaldata_t mygd = mycpu;
+       lwkt_send_ipiq3(mygd, (ipifunc3_t) action_func, arg, 0);
+
+}
+
+

FreeBSDのsmp_rendezvous()は本当の処理になるaction_funcのほかにsetup_func、teardown_funcがあるのですが、dbsdはaction_funcしか使ってませんでした。 ちなみにラッパー関数は新しくヘッダを作ってそこに書いてます。ついでなのでcritcal_enter、critical_exitもマクロで置換するようにしてみました。 todo: 今度はsys/pcpu.hが無いらしいですよ(´;ω;`)ブワッ

--------------------------------------------------------------
>>> Kernel build for BHYVE started on Mon Jul  2 21:50:09 JST 2012
--------------------------------------------------------------
===> BHYVE
cd /usr/src/sys/config;  PATH=/usr/obj/usr/src/ctools_x86_64_x86_64/usr/sbin:/us
r/obj/usr/src/ctools_x86_64_x86_64/usr/bin:/usr/obj/usr/src/ctools_x86_64_x86_64
/bin:/usr/obj/usr/src/ctools_x86_64_x86_64/usr/games:/usr/obj/usr/src/btools_x86
_64/usr/sbin:/usr/obj/usr/src/btools_x86_64/usr/bin:/usr/obj/usr/src/btools_x86_
64/bin:/usr/obj/usr/src/btools_x86_64/usr/games:/usr/pkg/bin  config  -d /usr/ob
j/usr/src/sys/BHYVE  /usr/src/sys/config/BHYVE
Kernel build directory is /usr/obj/usr/src/sys/BHYVE
cd /usr/obj/usr/src/sys/BHYVE;  MAKEOBJDIRPREFIX=/usr/obj/usr/src/world_x86_64  
OBJTREE=/usr/obj  MACHINE_ARCH=x86_64  MACHINE=x86_64  MACHINE_PLATFORM=pc64  OB
JFORMAT_PATH=/usr/obj/usr/src/ctools_x86_64_x86_64  HOST_CCVER=gcc44  CCVER=gcc4
4  BINUTILSVER=binutils221  DESTDIR=/usr/obj/usr/src/world_x86_64  INSTALL="sh /
usr/src/tools/install.sh"  PATH=/usr/obj/usr/src/ctools_x86_64_x86_64/usr/sbin:/
usr/obj/usr/src/ctools_x86_64_x86_64/usr/bin:/usr/obj/usr/src/ctools_x86_64_x86_
64/bin:/usr/obj/usr/src/ctools_x86_64_x86_64/usr/games:/usr/obj/usr/src/btools_x
86_64/usr/sbin:/usr/obj/usr/src/btools_x86_64/usr/bin:/usr/obj/usr/src/btools_x8
6_64/bin:/usr/obj/usr/src/btools_x86_64/usr/games:/usr/pkg/bin make KERNEL=kerne
l all
cc -c -O -pipe  -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -W
missing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wold-style-definition 
-std=c99 -Wold-style-declaration -g -nostdinc -I. -Iinclude -I/usr/src/sys -I/us
r/src/sys/../include -I/usr/obj/usr/src/sys/BHYVE -I"/usr/src/sys/dev/acpica5" -
I"/usr/src/sys/contrib/dev/acpica-unix/include" -I/usr/src/sys/dev/netif/ath/hal
 -I/usr/src/sys/dev/netif/ath/hal/ath_hal  -D_KERNEL -include opt_global.h  -fin
line-limit=8000 --param inline-unit-growth=100 --param large-function-growth=100
0 -fno-common -ffreestanding -mpreferred-stack-boundary=4 -fno-stack-protector -
mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
 -mno-sse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-sse4a  -mno-sse5 -m
no-abm -mno-aes -mno-avx -mno-pclmul -mno-popcnt -msoft-float -fno-asynchronous-
unwind-tables -fno-omit-frame-pointer  /usr/src/sys/platform/pc64/vmm/intel/vmcs
.c -Werror
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:36:22: error: sys/pcpu.h: No such fi
le or directory
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c: In function 'vmcs_set_defaults':
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:409: error: 'r_idt' undeclared (firs
t use in this function)
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:409: error: (Each undeclared identif
ier is reported only once
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:409: error: for each function it app
ears in.)
cc1: warnings being treated as errors
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c: At top level:
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:462: error: data definition has no t
ype or storage class
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:462: error: type defaults to 'int' i
n declaration of 'TEXT_SET'
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:462: error: parameter names (without
 types) in function declaration
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c: In function 'db_show_vmcs':
/usr/src/sys/platform/pc64/vmm/intel/vmcs.c:467: error: 'curcpu' undeclared (fir
st use in this function)
*** Error code 1

Stop in /usr/obj/usr/src/sys/BHYVE.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.