Bug 957507

Summary: NetKVM: Windows guest crashes on unload when working on top of QEMU without control queue support
Product: Red Hat Enterprise Linux 6 Reporter: Dmitry Fleytman <dfleytma>
Component: virtio-winAssignee: Dmitry Fleytman <dfleytma>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 6.5CC: acathrow, bcao, bsarathy, dfleytma, juzhang, lnovich, qzhang, virt-bugs, yvugenfi
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Windows   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Do not document. Bug between internal builds. Does not exist in previous release.
Story Points: ---
Clone Of: Environment:
Last Closed: 2013-11-22 00:04:32 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Dmitry Fleytman 2013-04-28 15:29:13 UTC
Description of problem:

When control queue support is disabled in QEMU network driver crashes on unload.

Version-Release number of selected component (if applicable):


How reproducible:

100%

Steps to Reproduce:
1.
2.
3.
  
Actual results:


Expected results:


Additional info:

Comment 1 Mike Cao 2013-05-30 03:21:00 UTC
Hi, Dima/Yan

What's control queue ,Could you show QE how to reproduce this bug ?

Thanks,
Mike

Comment 3 Yvugenfi@redhat.com 2013-06-17 15:51:03 UTC
(In reply to Mike Cao from comment #1)
> Hi, Dima/Yan
> 
> What's control queue ,Could you show QE how to reproduce this bug ?
> 
> Thanks,
> Mike

Hi Mike,

Control queue is additional virtio ring in network device used to set multicast list, mac address and etc. I think it was introduced somewhere around RHEL5.5, maybe before. 

Until RHEL6.4 Windows driver didn't support it at all and handle all the functionality provided by the host inside of the driver.

Dima found a problem by code review - in current QEMU there is no way to disable control queue.

Best regards,
Yan.

Comment 7 Mike Cao 2013-07-01 06:00:46 UTC
I can not reproduce this issue on build 49

Steps
1.Start VM w/o control queue support eg -virtio-net-pci,ctrl_vq=off
CLI:/usr/libexec/qemu-kvm 
-netdev tap,id=hostnet0,script=/etc/qemu-ifup \
-device virtio-net-pci,ctrl_vq=off,netdev=hostnet0,id=net0,mac=00:12:10:94:a3:f8 \
-m 2G -smp 2 -usb -device usb-tablet,id=tablet0 -drive file=/home/win7-64-virtio.qcow2,if=none,id=drive-virtio0-0-0,format=qcow2,werror=stop,rerror=stop,cache=none -device ide-drive,drive=drive-virtio0-0-0,id=virti0-0-0,bootindex=1 -netdev tap,id=hostnet0,script=/etc/qemu-ifup -device virtio-net-pci,ctrl_vq=off,netdev=hostnet0,id=net0,mac=00:12:10:94:a3:f8 -uuid 8677bf9b-3cf6-47a1-b3e9-94213b801c87 -monitor stdio -vnc :7 -global PIIX4_PM.disable_s3=0 -global PIIX_PM.disable_s4=0
2.install virtio-win-prwehql-49 netkvm driver in the guest 
3. disable/enable it 
4. uninstall it 

Actual Results:
Both disable/enable ,uninstallation works fine ,guest did not crash 

Yan ,Could you view my steps above and why I can not reproduce this issue ?

Thanks,
MIke

Comment 8 Dmitry Fleytman 2013-07-31 06:59:31 UTC
You need an old QEMU without control queue. According to Yan it should be pre-RHEL6.4

Comment 9 Mike Cao 2013-07-31 07:08:21 UTC
(In reply to Dmitry Fleytman from comment #8)
> You need an old QEMU without control queue. According to Yan it should be
> pre-RHEL6.4

According to Amos .-virtio-net-pci,ctrl_vq=off is to disable control queue .why it still work

Comment 11 Dmitry Fleytman 2013-08-04 09:20:45 UTC
Hello Mike,

According to what I see in QEMU source code this option (ctrl_vq) doesn't disable control queue, it just "hides" it by clearing corresponding feature bit in device bit mask. One of the problems of old builds (until build 61 when we fixed control queue usage was that driver never verified that control queue feature supported by device's features bitmask.
This way driver continues to use control queue even when you disable it with QEMU command line option and since QEMU actually supports it everything works fine.

Actually I've never seen the crash on real setup, I've found the problem during code review, so I'm not sure you need to verify it formally. It could be that you need to check for regressions only, i.e. driver unloads without crashed on current QEMU version, driver uses control queue properly, etc.

Dmitry

Comment 12 Mike Cao 2013-08-07 09:22:12 UTC
QE run netkvm functional test ,did not find any issue on disable\enable load\unload 

Based on above ,this issue has been fixed ald .Move status to VERIFIED.

Comment 14 errata-xmlrpc 2013-11-22 00:04:32 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHBA-2013-1729.html