diff mbox

PATCH: s390: fix reset hypercall to reset the status

Message ID 4E71B5BB.7070503@de.ibm.com
State New
Headers show

Commit Message

Christian Borntraeger Sept. 15, 2011, 8:22 a.m. UTC
This patch fixes the reset hypercall which is supposed to also
reset the device status in device memory.
This fixes the following bug:

[root@localhost driver]# echo virtio0 > unbind
[   35.056966] ------------[ cut here ]------------
[   35.057054] kernel BUG at drivers/virtio/virtio.c:157!
[   35.057113] illegal operation: 0001 [#1] SMP 
[   35.057181] Modules linked in:
[   35.057243] CPU: 0 Not tainted 3.0.0-rc1-00180-g0792644-dirty #51
[   35.057323] Process bash (pid: 497, task: 000000003e58c538, ksp: 000000003ef43978)
[   35.057409] Krnl PSW : 0704100180000000 00000000003d46f8 (virtio_check_driver_offered_feature+0x0/0x38)
[   35.057528]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:1 PM:0 EA:3
[   35.057616] Krnl GPRS: 0000000000000000 0000000040000000 0000000000000007 0000000000000000
[   35.057716]            00000000003b3be4 0000000000000001 000000003ef4d380 000000003f1cff00
[   35.057805]            000000003ef43f18 00000000005ca620 0000000000000008 0000000000838e88
[   35.057919]            000000000083c860 000000003f7c2e00 00000000003d46b0 000000003ef43d10
[   35.058027] Krnl Code: 00000000003d46e8: f0b00004ebcf	srp	4(12,%r0),3023(%r14),0
[   35.058115]            00000000003d46ee: f0a0000407f4	srp	4(11,%r0),2036,0
[   35.058207]            00000000003d46f4: a7f40001		brc	15,3d46f6
[   35.058295]           >00000000003d46f8: e31020900004	lg	%r1,144(%r2)
[   35.058383]            00000000003d46fe: bf2f1080		icm	%r2,15,128(%r1)
[   35.058470]            00000000003d4702: a784000d		brc	8,3d471c
[   35.058557]            00000000003d4706: e32010780004	lg	%r2,120(%r1)
[   35.058645]            00000000003d470c: 59302000		c	%r3,0(%r2)
[   35.058748] Call Trace:
[   35.058777] ([<00000000003d469e>] virtio_dev_remove+0x36/0x90)
[   35.058852]  [<00000000003f3a40>] __device_release_driver+0x7c/0xec
[   35.058936]  [<00000000003f3ae8>] device_release_driver+0x38/0x48
[   35.059023]  [<00000000003f2a98>] driver_unbind+0xa4/0xc4
[   35.059111]  [<00000000002acb70>] sysfs_write_file+0xe8/0x19c
[   35.059226]  [<000000000022e7a4>] vfs_write+0xb0/0x18c
[   35.059317]  [<000000000022eb18>] SyS_write+0x58/0xb4
[   35.059398]  [<000000000057e674>] sysc_noemu+0x16/0x1c
[   35.059475]  [<000003fffd44b6c0>] 0x3fffd44b6c0
[   35.059531] Last Breaking-Event-Address:
[   35.059576]  [<00000000003d46f4>] virtio_dev_remove+0x8c/0x90
[   35.059646]  
[   35.059661] ---[ end trace 9b1959188f21ee11 ]---

Signed-off-by: Christian Borntraeger<borntraeger@de.ibm.com>

Comments

Alexander Graf Sept. 15, 2011, 11:35 a.m. UTC | #1
On 09/15/2011 10:22 AM, Christian Borntraeger wrote:
> This patch fixes the reset hypercall which is supposed to also
> reset the device status in device memory.
> This fixes the following bug:
>
> [root@localhost driver]# echo virtio0>  unbind
> [   35.056966] ------------[ cut here ]------------
> [   35.057054] kernel BUG at drivers/virtio/virtio.c:157!
> [   35.057113] illegal operation: 0001 [#1] SMP
> [   35.057181] Modules linked in:
> [   35.057243] CPU: 0 Not tainted 3.0.0-rc1-00180-g0792644-dirty #51
> [   35.057323] Process bash (pid: 497, task: 000000003e58c538, ksp: 000000003ef43978)
> [   35.057409] Krnl PSW : 0704100180000000 00000000003d46f8 (virtio_check_driver_offered_feature+0x0/0x38)
> [   35.057528]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:1 PM:0 EA:3
> [   35.057616] Krnl GPRS: 0000000000000000 0000000040000000 0000000000000007 0000000000000000
> [   35.057716]            00000000003b3be4 0000000000000001 000000003ef4d380 000000003f1cff00
> [   35.057805]            000000003ef43f18 00000000005ca620 0000000000000008 0000000000838e88
> [   35.057919]            000000000083c860 000000003f7c2e00 00000000003d46b0 000000003ef43d10
> [   35.058027] Krnl Code: 00000000003d46e8: f0b00004ebcf	srp	4(12,%r0),3023(%r14),0
> [   35.058115]            00000000003d46ee: f0a0000407f4	srp	4(11,%r0),2036,0
> [   35.058207]            00000000003d46f4: a7f40001		brc	15,3d46f6
> [   35.058295]>00000000003d46f8: e31020900004	lg	%r1,144(%r2)
> [   35.058383]            00000000003d46fe: bf2f1080		icm	%r2,15,128(%r1)
> [   35.058470]            00000000003d4702: a784000d		brc	8,3d471c
> [   35.058557]            00000000003d4706: e32010780004	lg	%r2,120(%r1)
> [   35.058645]            00000000003d470c: 59302000		c	%r3,0(%r2)
> [   35.058748] Call Trace:
> [   35.058777] ([<00000000003d469e>] virtio_dev_remove+0x36/0x90)
> [   35.058852]  [<00000000003f3a40>] __device_release_driver+0x7c/0xec
> [   35.058936]  [<00000000003f3ae8>] device_release_driver+0x38/0x48
> [   35.059023]  [<00000000003f2a98>] driver_unbind+0xa4/0xc4
> [   35.059111]  [<00000000002acb70>] sysfs_write_file+0xe8/0x19c
> [   35.059226]  [<000000000022e7a4>] vfs_write+0xb0/0x18c
> [   35.059317]  [<000000000022eb18>] SyS_write+0x58/0xb4
> [   35.059398]  [<000000000057e674>] sysc_noemu+0x16/0x1c
> [   35.059475]  [<000003fffd44b6c0>] 0x3fffd44b6c0
> [   35.059531] Last Breaking-Event-Address:
> [   35.059576]  [<00000000003d46f4>] virtio_dev_remove+0x8c/0x90
> [   35.059646]
> [   35.059661] ---[ end trace 9b1959188f21ee11 ]---
>
> Signed-off-by: Christian Borntraeger<borntraeger@de.ibm.com>

Thanks, applied to s390-next.


Alex
diff mbox

Patch

--- a/hw/s390-virtio.c
+++ b/hw/s390-virtio.c
@@ -107,6 +107,7 @@  int s390_virtio_hypercall(CPUState *env, uint64_t mem, uint64_t hypercall)
 
         dev = s390_virtio_bus_find_mem(s390_bus, mem);
         virtio_reset(dev->vdev);
+        stb_phys(dev->dev_offs + VIRTIO_DEV_OFFS_STATUS, 0);
         s390_virtio_device_sync(dev);
         break;
     }