Hello. 

>> So, maybe I forget somethinetappg in configuration? Something related to 
>> IRQ..
> 
> I think you are spot on! Your run script routes the IRQ session of the
> AHCI driver to the ACPI server, which is correct. But for the NIC
> driver, you are just using the default route, which means that its IRQ
> session gets routed to the parent (core's IRQ service), which is wrong.
> You might try adding a route to the NIC driver that routes its IRQ
> session to the ACPI server as well.
> 
> Why then, did the run script work w/o AHCI? Maybe because Qemu uses
> different IRQs depending on the configurations with and without AHCI.
> 
> Btw, are you planning to execute your run script on any platform w/o
> ACPI support (such as OKL4 or Linux)? If not, you could greatly simplify
> it by removing all the convoluted conditionals related to '[have_spec
> acpi]'. This would make it a bit easier to see configuration mistakes.

I have removed ACPI and use_tar. This is a new version. Still something related 
to IRQ does not work. 
And I have tested without AHCI - use_ram works. 

set use_ram     0
set use_ahci    1

set disk_image "bin/srv.hda"

set build_components {
        core init
        drivers/timer
        drivers/nic
        drivers/pci
        app/netapp
}

set network_driver "nic_drv" 

lappend_if [have_spec pci]      build_components drivers/pci/device_pd

lappend_if $use_ram             build_components server/ram_blk
lappend_if $use_ram             build_components server/rump_fs

lappend_if $use_ahci            build_components drivers/ahci

build $build_components

create_boot_directory

append config {
<config>
        <parent-provides>
                <service name="ROM"/>
                <service name="LOG"/>
                <service name="CAP"/>
                <service name="RAM"/>
                <service name="RM"/>
                <service name="CPU"/>
                <service name="PD"/>
                <service name="IRQ"/>
                <service name="IO_PORT"/>
                <service name="IO_MEM"/>
                <service name="SIGNAL"/>
        </parent-provides>
        <default-route>
                <any-service> <parent/> <any-child/> </any-service>
        </default-route>
        <start name="timer">
                <resource name="RAM" quantum="1M"/>
                <provides><service name="Timer"/></provides>
        </start>
        <start name="pci_drv">
                <resource name="RAM" quantum="6M"/>
                <provides> 
                        <service name="PCI"/> 
                </provides>
        </start>}

append_if [expr $use_ram] config {
        <start name="ram_blk">
                <resource name="RAM" quantum="64M"/>
                <provides><service name="Block"/></provides>
                <config file="ext2.raw" block_size="512"/>
        </start>
        <start name="rump_fs">
                <resource name="RAM" quantum="8M" />
                <provides><service name="File_system"/></provides>
                <config fs="ext2fs"><policy label="" root="/" 
writeable="yes"/></config>
        </start>}

append_if $use_ahci config {
        <start name="ahci">
                <binary name="ahci" />
                <resource name="RAM" quantum="10M" />
                <provides><service name="Block" /></provides>
                <route>
                        <any-service> <parent /> <any-child /></any-service>
                </route>
        </start>}

append config {
        <start name="nic_drv">
                <resource name="RAM" quantum="8M"/>
                <provides><service name="Nic"/></provides>
        </start>}

append config {
        <start name="netapp">
                <resource name="RAM" quantum="1G" />
                <config>
                        <arg value="netapp" />
                        <libc tx_buf_size="320M" rx_buf_size="320M"/>
                </config>
                </start>
                }

append config {
</config>
}

install_config $config

#
# Boot modules
#

# generic modules
set boot_modules {
        core init timer ld.lib.so
        libc.lib.so libm.lib.so  pthread.lib.so libc_log.lib.so
        lxip.lib.so libc_resolv.lib.so 
        netapp
        nic_drv
}

# platform-specific modules
lappend_if [have_spec pci]           boot_modules pci_drv
lappend_if [have_spec nova]          boot_modules pci_device_pd

lappend_if $use_ram             boot_modules    ext2.raw
lappend_if $use_ram             boot_modules    rump.lib.so
lappend_if $use_ram             boot_modules    rump_fs.lib.so 
lappend_if $use_ram             boot_modules    ram_blk
lappend_if $use_ram             boot_modules    rump_fs
lappend_if $use_ram             boot_modules    libc_fs.lib.so

lappend_if $use_ahci            boot_modules ahci
lappend_if $use_ahci            boot_modules libc_fuse_ext2.lib.so
lappend_if $use_ahci            boot_modules libc_block.lib.so

build_boot_image $boot_modules

append_if [have_spec x86]     qemu_args " -net nic,model=e1000 "
append_if [have_spec lan9118] qemu_args " -net nic,model=lan9118 "

append qemu_args " -m 512m -net user -redir tcp:8080::8080"
append qemu_args " -nographic -serial mon:stdio "

append_if $use_ahci        qemu_args " -drive id=disk,file=$disk_image,if=none 
-device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -boot d"

run_genode_until forever

spawn qemu-system-x86_64 -no-kvm -cpu core2duo -net nic,model=e1000 -m 512m 
-net user -redir tcp:6379::6379 -redir tcp:8080::80 -nographic -serial 
mon:stdio -drive id=disk,file=bin/srv.hda,if=none -device ahci,id=ahci -device 
ide-drive,drive=disk,bus=ahci.0 -boot d -cdrom var/run/netapp.iso

NOVA Microhypervisor v6-1eba7d3 (x86_32): Mar 11 2014 16:35:04 [gcc 4.7.2]

[ 0] CORE:0:0:0 6:f:b:0 [0] Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
Hypervisor does not feature VMX
Hypervisor does not feature SVM
Hypervisor reports 1x1 CPU  - boot CPU is 0
Hypervisor info page contains 25 memory descriptors:
detected physical memory: 0x0000000000000000 - size: 0x9fc00
use      physical memory: 0x0000000000000000 - size: 0x9f000
detected physical memory: 0x0000000000100000 - size: 0x1fefe000
use      physical memory: 0x0000000000100000 - size: 0x1fefe000
map multi-boot module: physical 0x1f938000 -> [0x001c6000-0x0028c2d8) - core
map multi-boot module: physical 0x1f9ff000 -> [0x00002000-0x00002496) - config
map multi-boot module: physical 0x1fa00000 -> [0x00003000-0x0006e3b0) - init
map multi-boot module: physical 0x1fa6c000 -> [0x0006f000-0x000cdbfc) - timer
map multi-boot module: physical 0x1facb000 -> [0xb0000000-0xb0097124) - 
ld.lib.so
map multi-boot module: physical 0x1fb63000 -> [0xbff04000-0xbffb4208) - 
libc.lib.so
map multi-boot module: physical 0x1fc14000 -> [0x000ce000-0x000f26d8) - 
libm.lib.so
map multi-boot module: physical 0x1fc39000 -> [0x000f3000-0x000f91c4) - 
pthread.lib.so
map multi-boot module: physical 0x1fc40000 -> [0x000fa000-0x000fc7dc) - 
libc_log.lib.so
map multi-boot module: physical 0x1fc43000 -> [0xb0098000-0xb0185750) - 
lxip.lib.so
map multi-boot module: physical 0x1fd31000 -> [0xbffb5000-0xbffe3c00) - 
libc_resolv.lib.so
map multi-boot module: physical 0x1fd60000 -> [0xb0186000-0xb02096e8) - netapp
map multi-boot module: physical 0x1fde4000 -> [0xb020a000-0xb0292d04) - nic_drv
map multi-boot module: physical 0x1fe6d000 -> [0xb0293000-0xb0302be0) - pci_drv
map multi-boot module: physical 0x1fedd000 -> [0xb0303000-0xb0358e18) - 
pci_device_pd
map multi-boot module: physical 0x1ff33000 -> [0xb0359000-0xb03c19c0) - ahci
map multi-boot module: physical 0x1ff9c000 -> [0xb03c2000-0xb040b234) - 
libc_fuse_ext2.lib.so
map multi-boot module: physical 0x1ffe6000 -> [0xbffe4000-0xbfffbf60) - 
libc_block.lib.so
:virt_alloc: Allocator 185bb4 dump:
 Block: [00002000,00003000) size=00001000 avail=00000000 max_avail=00000000
 Block: [00003000,0006f000) size=0006c000 avail=00000000 max_avail=00000000
 Block: [0006f000,000ce000) size=0005f000 avail=00000000 max_avail=00000000
 Block: [000ce000,000f3000) size=00025000 avail=00000000 max_avail=00003000
 Block: [000f3000,000fa000) size=00007000 avail=00000000 max_avail=00000000
 Block: [000fa000,000fd000) size=00003000 avail=00000000 max_avail=00003000
 Block: [000fd000,00100000) size=00003000 avail=00003000 max_avail=00003000
 Block: [001c6000,0028d000) size=000c7000 avail=00000000 max_avail=9fd73000
 Block: [0028d000,a0000000) size=9fd73000 avail=9fd73000 max_avail=9fd73000
 Block: [b0000000,b0098000) size=00098000 avail=00000000 max_avail=9fd73000
 Block: [b0098000,b0186000) size=000ee000 avail=00000000 max_avail=9fd73000
 Block: [b0186000,b020a000) size=00084000 avail=00000000 max_avail=00000000
 Block: [b020a000,b0293000) size=00089000 avail=00000000 max_avail=9fd73000
 Block: [b0293000,b0303000) size=00070000 avail=00000000 max_avail=00000000
 Block: [b0303000,b0359000) size=00056000 avail=00000000 max_avail=00000000
 Block: [b0359000,b03c2000) size=00069000 avail=00000000 max_avail=00000000
 Block: [b03c2000,b040c000) size=0004a000 avail=00000000 max_avail=0faf3000
 Block: [b040c000,bfeff000) size=0faf3000 avail=0faf3000 max_avail=0faf3000
 Block: [bff04000,bffb5000) size=000b1000 avail=00000000 max_avail=0faf3000
 Block: [bffb5000,bffe4000) size=0002f000 avail=00000000 max_avail=00000000
 Block: [bffe4000,bfffc000) size=00018000 avail=00000000 max_avail=00001000
 Block: [bfffc000,bfffd000) size=00001000 avail=00001000 max_avail=00001000
 => mem_size=2951938048 (2815 MB) / mem_avail=2944835584 (2808 MB)
:phys_alloc: Allocator 185758 dump:
 Block: [00001000,0009f000) size=0009e000 avail=0009e000 max_avail=0009e000
 Block: [00100000,00400000) size=00300000 avail=00300000 max_avail=1d138000
 Block: [02800000,1f938000) size=1d138000 avail=1d138000 max_avail=1d138000
 => mem_size=491610112 (468 MB) / mem_avail=491610112 (468 MB)
:io_mem_alloc: Allocator 18a45c dump:
 Block: [00000000,00001000) size=00001000 avail=00001000 max_avail=00001000
 Block: [0009f000,00100000) size=00061000 avail=00061000 max_avail=00061000
 Block: [00400000,02800000) size=02400000 avail=02400000 max_avail=e06c7000
 Block: [1f938000,fffff000) size=e06c7000 avail=e06c7000 max_avail=e06c7000
 => mem_size=3803353088 (3627 MB) / mem_avail=3803353088 (3627 MB)
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 468 MB to init
int main(): --- init created, waiting for exit condition ---
[init -> pci_drv] PCI driver started
[init -> nic_drv] --- iPXE NIC driver started ---
[init -> ahci] --- AHCI driver started ---
[init -> pci_drv -> pci_device_pd] PCI device pd starting ...
[init -> pci_drv -> pci_device_pd] PCI device pd started
[init -> netapp] void init_libc_block(): using the libc_block plugin
[init -> pci_drv] Could not open file "config"
[init -> pci_drv] Could not obtain config file
[init -> netapp] libc_fuse_ext2: try to mount /dev/blkdev...
[init -> ahci] Found AHCI HBA (Vendor ID: 8086 Device ID: 2922 Class: 00010601)
[init -> ahci] Port 0: ATAPI no
[init -> ahci] Port 0: Detected interface is active
[init -> ahci] AHCI Version: 1.0000
[init -> ahci] CAPs:
[init -> ahci]  Port count: 6
[init -> ahci]  Command slots: 32
[init -> ahci]  AHCI only: no
[init -> ahci]  Native command queuing: yes
[init -> ahci]  64 Bit: no
[init -> ahci] CMD.ST bit set during device reset --> unknown behavior
[init -> netapp] fuse* fuse_new(fuse_chan*, fuse_args*, const fuse_operations*, 
size_t, void*): 
[init -> netapp] Using DHCP for interface configuration.
[init -> netapp] void init_libc_lxip(): init_libc_lxip() address config=dhcp
[init -> netapp] INFO: NET: Registered protocol family 16
[init -> netapp] INFO: NET: Registered protocol family 2
[init -> netapp] INFO: Hash tables configured (established 524288 bind 524288)
[init -> netapp] INFO: reno registered
[init -> netapp] INFO: cubic registered
Quota exceeded! amount=8192, size=4096, consumed=8192
[init -> netapp] upgrading quota donation for SIGNAL session
[init -> nic_drv] --- init iPXE NIC
[init -> nic_drv] scan_pci(): Found: 00:03.0 8086:100e (rev 03) IRQ 0b
[init -> nic_drv] probe_pci_device(): using driver 82540em
[init -> nic_drv] adjust_pci_device(): PCI BIOS has not enabled device 00:03.0! 
Updating PCI command 0103->0107
[init -> nic_drv] adjust_pci_device(): PCI device 00:03.0 latency timer is 
unreasonably low at 0. Setting to 32.
[init -> nic_drv] ioremap(): bus_addr = febc0000 len = 20000
[init -> nic_drv] snprintf not implemented
[init -> nic_drv]     number of devices: 1
[init -> nic_drv] --- init rx_callbacks
[init -> nic_drv] --- get MAC address 52:54:00:12:34:56
Quota exceeded! amount=12288, size=4096, consumed=12288
[init -> netapp] upgrading quota donation for SIGNAL session
[init -> netapp] Received mac: 52:54:00:12:34:56
[init -> netapp] driver_net_open called


-- 
Sartakov A. Vasily
sarta...@ksyslabs.org



Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Genode-main mailing list
Genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to