On 05/04/2019 15.11, Jason J. Herne wrote:
> On 4/5/19 3:52 AM, Thomas Huth wrote:
>> On 05/04/2019 08.58, Thomas Huth wrote:
[...]
>>> while running my s390-ccw bios tests, I noticed that network booting
>>> seems to be broken now. This used to work before:
>>>
>>> s390x-softmmu/qemu-system-s390x -nographic -accel kvm \
>>>   -bios pc-bios/s390-ccw/s390-ccw.img \
>>>   -global s390-ipl.netboot_fw=pc-bios/s390-ccw/s390-netboot.img \
>>>   -netdev user,id=n1,tftp=/boot,bootfile=vmlinuz-4.18.0 \
>>>   -device virtio-net-ccw,netdev=n1,bootindex=1
>>>
>>> Now it simply fails with "! No IPL device available !".
>>>
>>> Could you have a look at it, please?
>>
>> FWIW: The problem seems to be in the last patch: virtio_is_supported()
>> is now not called anymore, and so virtio_get_device_type() now returns
>> the wrong type.
>>
>>   Thomas
>>
> 
> Good catch. Testing netboot for this iteration did slip my mind. I've
> now added a basic netboot script to my test suite to avoid this type of
> regression in the future.
> 
> Your analysis of the problem matches what I'm seeing as well. Here is
> what I'm proposing to fix it. If you like it, let me know if you want me
> to re-send just the final patch, or the entire series again with a v7 tag.
> 
> 
> diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
> index 03e90e3..3d1e9a4 100644
> --- a/pc-bios/s390-ccw/main.c
> +++ b/pc-bios/s390-ccw/main.c
> @@ -67,6 +67,7 @@ static bool find_subch(int dev_no)
>  {
>      Schib schib;
>      int i, r;
> +    bool is_virtio;
> 
>      for (i = 0; i < 0x10000; i++) {
>          blk_schid.sch_no = i;
> @@ -80,12 +81,13 @@ static bool find_subch(int dev_no)
> 
>          enable_subchannel(blk_schid);
>          cutype = cu_type(blk_schid);
> +        is_virtio = virtio_is_supported(blk_schid);
> 
>          /* No specific devno given, just return 1st possibly bootable
> device */
>          if (dev_no < 0) {
>              switch (cutype) {
>              case CU_TYPE_VIRTIO:
> -                if (virtio_is_supported(blk_schid)) {
> +                if (is_virtio) {
>                      /*
>                       * Skip net devices since no IPLB is created and
> therefore
>                       * no network bootloader has been loaded
> 
> 

Looks fine to me. But maybe we should also add a comment before the new
"virtio_is_supported" line, saying something like "Note: we always have
to run virtio_is_supported() here to make sure that the vdev.senseid
data gets pre-initialized"? Otherwise, we might accidentally "revert"
this patch when somebody thinks that the code might be optimizable by
removing the is_virtio variable again...

If you like, I can squash these changes in when I pick up the patches,
so you don't have to resend.

 Thomas


Reply via email to