On 22/06/2020 10:25, Thomas Huth wrote: >> After a recent rebase I've started seeing iotest 267 after running "make >> check" on >> qemu-system-sparc64. The diff output looks similar to this: >> >> --- /home/build/src/qemu/git/qemu/tests/qemu-iotests/267.out 2020-01-22 >> 17:57:54.246650995 +0000 >> +++ /home/build/src/qemu/git/qemu/tests/qemu-iotests/267.out.bad >> 2020-03-07 >> 09:25:36.044451658 +0000 >> @@ -41,13 +41,7 @@ >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 >> Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none -device >> virtio-blk,drive=none0 >> QEMU X.Y.Z monitor - type 'help' for more information >> -(qemu) savevm snap0 >> -(qemu) info snapshots >> -List of snapshots present on all disks: >> -ID TAG VM SIZE DATE VM CLOCK >> --- snap0 SIZE yyyy-mm-dd hh:mm:ss 00:00:00.000 >> -(qemu) loadvm snap0 >> -(qemu) quit >> +(qemu) QEMU_PROG: -device virtio-blk,drive=none0: PCI: no slot/function >> available >> for virtio-blk-pci, all in use or reserved >> >> The error message here is because the sun4u machine PCI root (default) bus >> contains >> only 2 PCI bridges and cannot have devices plugged into it directly. An >> example of >> how to use virtio-blk-pci on qemu-system-sparc64 is shown at >> https://wiki.qemu.org/Documentation/Platforms/SPARC#All_PCI_devices_are_attached_behind_one_of_the_simba_PCI_bridges. >> >> It seems that all that is missing is a way to specify the bus= parameter for >> the >> virtio-blk-pci device for this test to work. Can anyone suggest a suitable >> way to do >> this? > > Hi! > > Sorry for the late reply... but better late than never:
Heh, that's okay :) > I think you likely don't want to change each and every current and > future iotest to contain a "bus=..." parameter - that's not reasonable. > So I see two possibilities to get "make check" working here again: > > 1) From a user point of view, it would be great if PCI devices could be > used on the sun4u machine also without specifying the "bus=..." > property. Is there a way to convince QEMU to plug PCI devices in a > different bus with free slots in case the root bus is already full? ... > I had a quick look at the sources, but unfortunately I failed to spot > the code that decides which PCI bus should be used in case no "bus=..." > property has been specified, so no clue whether this is feasible or not. It has been a while since I looked at this, but from memory the problem is that the default bus value is 0 which matches the first (root) PCI bus. Which unfortunately can't have anything plugged into it for sun4u. Perhaps the QEMU machine needs a way to be able to override the id of the default PCI bus which is used for -device? > 2) Simply change the _require_devices function in > tests/qemu-iotests/common.rc to filter out the virtio and pci devices on > sparc64. Something like this should do the job, I hope: > > diff a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc > --- a/tests/qemu-iotests/common.rc > +++ b/tests/qemu-iotests/common.rc > @@ -788,6 +788,11 @@ _require_devices() > { > available=$($QEMU -M none -device help | \ > grep ^name | sed -e 's/^name "//' -e 's/".*$//') > + case "$QEMU_PROG" in > + *qemu-system-sparc64) > + available=$(grep -v -i -E 'pci|virtio' <<< $available) > + ;; > + esac > for device > do > if ! echo "$available" | grep -q "$device" ; then I'd prefer a solution that keeps the virtio tests if possible, since 5.0 is actually broken for booting from a virtio-blk-pci device - there were a couple of changes leading up to release that broke OpenBIOS (see https://mail.coreboot.org/hyperkitty/list/openb...@openbios.org/2020/5/) that managed to slip by. ATB, Mark.