Message ID | 20111230062254.GA22078@morn.localdomain |
---|---|
State | New |
Headers | show |
>> >There are two main things we can do: >> >1. Make the 64 bit device only use the low 32 bit >> It was my first implementation. Unfortunately older versions of >> Linux (Like 2.6.18) hang during startup with this. >> As far as I remember it was qemu-0.15 so may be 1.0 have no such an >> issue. I will check this. > That seems really odd - there's nothing unusual with a 64bit bar being > set to an address under 4gig. > Looking at the current code, it's not initializing 64bit bars properly >(it doesn't initialize the top bits of the 64bit address). Does just > the patch below (totally untested) improve things for you? Yes I see. Will test after short holidays, now it's quite late in New Zealand. BTW: Tried today version 1.0 to reproduce this issue and could not reproduce it.
--- a/src/pciinit.c +++ b/src/pciinit.c @@ -545,8 +545,10 @@ static void pci_bios_map_devices(struct pci_bus *busses) i, addr, pci->bars[i].size, region_type_name[type]); pci_set_io_region_addr(pci, i, addr); - if (pci->bars[i].is64) + if (pci->bars[i].is64) { i++; + pci_set_io_region_addr(pci, i, 0); + } } } }