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

BHyVeビルドめも10

DragonFlyBSD BHyVe

( ..)φカキカキ
vtd.cをコンパイル通すの大変そうだなーとか思ってたわけですが、やってみたらできましたw
変更したのはvtd.cだけです<(_ _)>
ただ、FreeBSDpmap_invalidate_cache()はそれらしいのがdbsdで見つけられなかったので適当に作ってます。

  923 pmap_invalidate_cache(void)
  924 {
  925 
  926         sched_pin();
  927         wbinvd();
  928         smp_cache_flush();
  929         sched_unpin();
  930 }

これはやってることは簡単でsched_pin()でスレッドが他のcpuに移動しないようにして(かな?)、wbinvd()でキャッシュをメモリに書き込み、次にtlbをフラッシュして最後にピンしたスレッドを元にもどしているだけです。
ちなみに、このsched_pin()ですがこれはthread構造体にあるtd_pinnedをインクリメントしているだけでした。

int             td_pinned;      /* (k) Temporary cpu pin count. */

このpmap_invalidate_cache()はやってることは解るけどDragonFlyで該当する関数がちょっと調べただけだと分からなかったので単にwbinvd()、smp_invltlb()を呼ぶだけという関数を実装してます。たしかDragonFly BSDはスレッドが動いているcpuは明示的に変更しない限り変わらない仕様だったとwikipediaか何かで読んだ記憶があるので、もしかしたらこれだけで足りてるかも。

static void
pmap_invalidate_cache(void)
{
	/* TODO: It may be need to do some more steps. */
	wbinvd();
	smp_invltlb();
}

あとはインクルードするファイルを変えたり、s/malloc/kmallocという感じです。
そして今日のコンパイルエラーは…

--------------------------------------------------------------
>>> Kernel build for BHYVE started on Fri Jul  6 22:26:35 JST 2012
--------------------------------------------------------------
===> BHYVE
cd /usr/src/sys/config;  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_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/obj/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  OBJFORMAT_PATH=/usr/obj/usr/src/ctools_x86_64_x86_64  HOST_CCVER=gcc44  CCVER=gcc44  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_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 make KERNEL=kernel all
cc -c -O -pipe  -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wold-style-definition -std=c99 -Wold-style-declaration -g -nostdinc -I. -Iinclude -I/usr/src/sys -I/usr/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  -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -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 -mno-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/vtd.c -Werror
cc -c -O -pipe  -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wold-style-definition -std=c99 -Wold-style-declaration -g -nostdinc -I. -Iinclude -I/usr/src/sys -I/usr/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  -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000 -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 -mno-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/io/iommu.c -Werror
/usr/src/sys/platform/pc64/vmm/io/iommu.c:38:28: error: dev/pci/pcivar.h: No such file or directory
/usr/src/sys/platform/pc64/vmm/io/iommu.c:39:28: error: dev/pci/pcireg.h: No such file or directory
/usr/src/sys/platform/pc64/vmm/io/iommu.c:43:22: error: vmm_util.h: No such file or directory
cc1: warnings being treated as errors
/usr/src/sys/platform/pc64/vmm/io/iommu.c: In function 'iommu_init':
/usr/src/sys/platform/pc64/vmm/io/iommu.c:134: error: implicit declaration of function 'vmm_is_intel'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:134: error: nested extern declaration of 'vmm_is_intel'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:136: error: implicit declaration of function 'vmm_is_amd'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:136: error: nested extern declaration of 'vmm_is_amd'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:161: error: 'PCI_BUSMAX' undeclared (first use in this function)
/usr/src/sys/platform/pc64/vmm/io/iommu.c:161: error: (Each undeclared identifier is reported only once
/usr/src/sys/platform/pc64/vmm/io/iommu.c:161: error: for each function it appears in.)
/usr/src/sys/platform/pc64/vmm/io/iommu.c:162: error: 'PCI_SLOTMAX' undeclared (first use in this function)
/usr/src/sys/platform/pc64/vmm/io/iommu.c:163: error: 'PCI_FUNCMAX' undeclared (first use in this function)
/usr/src/sys/platform/pc64/vmm/io/iommu.c:164: error: implicit declaration of function 'pci_find_dbsf'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:164: error: nested extern declaration of 'pci_find_dbsf'
/usr/src/sys/platform/pc64/vmm/io/iommu.c:164: error: assignment makes pointer from integer without a cast
*** 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.

ついにvmm/ioディレクトリに入りましたね~ なんかvtd.cがコンパイルできたしこれも意外とコンパイルいけるんじゃないかという甘い考えが出てきましたよヽ(・∀・ )ノ