<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/char/virtio_console.c, branch linux-3.7.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>virtio_console: Don't access uninitialized data.</title>
<updated>2013-02-14T18:48:00+00:00</updated>
<author>
<name>Sjur Brændeland</name>
<email>sjur.brandeland@stericsson.com</email>
</author>
<published>2013-01-21T23:20:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=cbadbcec8966fe7efa16786a5080013398a5d332'/>
<id>cbadbcec8966fe7efa16786a5080013398a5d332</id>
<content type='text'>
commit aded024a12b32fc1ed9a80639681daae2d07ec25 upstream.

Don't access uninitialized work-queue when removing device.
The work queue is initialized only if the device multi-queue.
So don't call cancel_work unless this is a multi-queue device.

This fixes the following panic:

Kernel panic - not syncing: BUG!
Call Trace:
62031b28:  [&lt;6026085d&gt;] panic+0x16b/0x2d3
62031b30:  [&lt;6004ef5e&gt;] flush_work+0x0/0x1d7
62031b60:  [&lt;602606f2&gt;] panic+0x0/0x2d3
62031b68:  [&lt;600333b0&gt;] memcpy+0x0/0x140
62031b80:  [&lt;6002d58a&gt;] unblock_signals+0x0/0x84
62031ba0:  [&lt;602609c5&gt;] printk+0x0/0xa0
62031bd8:  [&lt;60264e51&gt;] __mutex_unlock_slowpath+0x13d/0x148
62031c10:  [&lt;6004ef5e&gt;] flush_work+0x0/0x1d7
62031c18:  [&lt;60050234&gt;] try_to_grab_pending+0x0/0x17e
62031c38:  [&lt;6004e984&gt;] get_work_gcwq+0x71/0x8f
62031c48:  [&lt;60050539&gt;] __cancel_work_timer+0x5b/0x115
62031c78:  [&lt;628acc85&gt;] unplug_port+0x0/0x191 [virtio_console]
62031c98:  [&lt;6005061c&gt;] cancel_work_sync+0x12/0x14
62031ca8:  [&lt;628ace96&gt;] virtcons_remove+0x80/0x15c [virtio_console]
62031ce8:  [&lt;628191de&gt;] virtio_dev_remove+0x1e/0x7e [virtio]
62031d08:  [&lt;601cf242&gt;] __device_release_driver+0x75/0xe4
62031d28:  [&lt;601cf2dd&gt;] device_release_driver+0x2c/0x40
62031d48:  [&lt;601ce0dd&gt;] driver_unbind+0x7d/0xc6
62031d88:  [&lt;601cd5d9&gt;] drv_attr_store+0x27/0x29
62031d98:  [&lt;60115f61&gt;] sysfs_write_file+0x100/0x14d
62031df8:  [&lt;600b737d&gt;] vfs_write+0xcb/0x184
62031e08:  [&lt;600b58b8&gt;] filp_close+0x88/0x94
62031e38:  [&lt;600b7686&gt;] sys_write+0x59/0x88
62031e88:  [&lt;6001ced1&gt;] handle_syscall+0x5d/0x80
62031ea8:  [&lt;60030a74&gt;] userspace+0x405/0x531
62031f08:  [&lt;600d32cc&gt;] sys_dup+0x0/0x5e
62031f28:  [&lt;601b11d6&gt;] strcpy+0x0/0x18
62031f38:  [&lt;600be46c&gt;] do_execve+0x10/0x12
62031f48:  [&lt;600184c7&gt;] run_init_process+0x43/0x45
62031fd8:  [&lt;60019a91&gt;] new_thread_handler+0xba/0xbc

Signed-off-by: Sjur Brændeland &lt;sjur.brandeland@stericsson.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit aded024a12b32fc1ed9a80639681daae2d07ec25 upstream.

Don't access uninitialized work-queue when removing device.
The work queue is initialized only if the device multi-queue.
So don't call cancel_work unless this is a multi-queue device.

This fixes the following panic:

Kernel panic - not syncing: BUG!
Call Trace:
62031b28:  [&lt;6026085d&gt;] panic+0x16b/0x2d3
62031b30:  [&lt;6004ef5e&gt;] flush_work+0x0/0x1d7
62031b60:  [&lt;602606f2&gt;] panic+0x0/0x2d3
62031b68:  [&lt;600333b0&gt;] memcpy+0x0/0x140
62031b80:  [&lt;6002d58a&gt;] unblock_signals+0x0/0x84
62031ba0:  [&lt;602609c5&gt;] printk+0x0/0xa0
62031bd8:  [&lt;60264e51&gt;] __mutex_unlock_slowpath+0x13d/0x148
62031c10:  [&lt;6004ef5e&gt;] flush_work+0x0/0x1d7
62031c18:  [&lt;60050234&gt;] try_to_grab_pending+0x0/0x17e
62031c38:  [&lt;6004e984&gt;] get_work_gcwq+0x71/0x8f
62031c48:  [&lt;60050539&gt;] __cancel_work_timer+0x5b/0x115
62031c78:  [&lt;628acc85&gt;] unplug_port+0x0/0x191 [virtio_console]
62031c98:  [&lt;6005061c&gt;] cancel_work_sync+0x12/0x14
62031ca8:  [&lt;628ace96&gt;] virtcons_remove+0x80/0x15c [virtio_console]
62031ce8:  [&lt;628191de&gt;] virtio_dev_remove+0x1e/0x7e [virtio]
62031d08:  [&lt;601cf242&gt;] __device_release_driver+0x75/0xe4
62031d28:  [&lt;601cf2dd&gt;] device_release_driver+0x2c/0x40
62031d48:  [&lt;601ce0dd&gt;] driver_unbind+0x7d/0xc6
62031d88:  [&lt;601cd5d9&gt;] drv_attr_store+0x27/0x29
62031d98:  [&lt;60115f61&gt;] sysfs_write_file+0x100/0x14d
62031df8:  [&lt;600b737d&gt;] vfs_write+0xcb/0x184
62031e08:  [&lt;600b58b8&gt;] filp_close+0x88/0x94
62031e38:  [&lt;600b7686&gt;] sys_write+0x59/0x88
62031e88:  [&lt;6001ced1&gt;] handle_syscall+0x5d/0x80
62031ea8:  [&lt;60030a74&gt;] userspace+0x405/0x531
62031f08:  [&lt;600d32cc&gt;] sys_dup+0x0/0x5e
62031f28:  [&lt;601b11d6&gt;] strcpy+0x0/0x18
62031f38:  [&lt;600be46c&gt;] do_execve+0x10/0x12
62031f48:  [&lt;600184c7&gt;] run_init_process+0x43/0x45
62031fd8:  [&lt;60019a91&gt;] new_thread_handler+0xba/0xbc

Signed-off-by: Sjur Brændeland &lt;sjur.brandeland@stericsson.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>virtio: console: fix error handling in init() function</title>
<updated>2012-09-28T05:35:13+00:00</updated>
<author>
<name>Alexey Khoroshilov</name>
<email>khoroshilov@ispras.ru</email>
</author>
<published>2012-09-01T19:49:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=33e1afc3d82697599ccc8dc8f2fa44ffff5ae329'/>
<id>33e1afc3d82697599ccc8dc8f2fa44ffff5ae329</id>
<content type='text'>
If register_virtio_driver() fails, virtio-ports class is not destroyed.
The patch adds error handling of register_virtio_driver().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If register_virtio_driver() fails, virtio-ports class is not destroyed.
The patch adds error handling of register_virtio_driver().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov &lt;khoroshilov@ispras.ru&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio/console: Allocate scatterlist according to the current pipe size</title>
<updated>2012-09-28T05:35:12+00:00</updated>
<author>
<name>Masami Hiramatsu</name>
<email>masami.hiramatsu.pt@hitachi.com</email>
</author>
<published>2012-08-09T12:31:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=8ca84a50e5b39487ea1de8809d0ee1c8474f6a5c'/>
<id>8ca84a50e5b39487ea1de8809d0ee1c8474f6a5c</id>
<content type='text'>
Allocate scatterlist according to the current pipe size.
This allows splicing bigger buffer if the pipe size has
been changed by fcntl.

Changes in v2:
 - Just a minor fix for avoiding a confliction with previous patch.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Allocate scatterlist according to the current pipe size.
This allows splicing bigger buffer if the pipe size has
been changed by fcntl.

Changes in v2:
 - Just a minor fix for avoiding a confliction with previous patch.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio/console: Wait until the port is ready on splice</title>
<updated>2012-09-28T05:35:12+00:00</updated>
<author>
<name>Masami Hiramatsu</name>
<email>masami.hiramatsu.pt@hitachi.com</email>
</author>
<published>2012-08-09T12:31:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=efe75d24a69fc39bb09d882ca2d5b90d4da02afe'/>
<id>efe75d24a69fc39bb09d882ca2d5b90d4da02afe</id>
<content type='text'>
Wait if the port is not connected or full on splice
like as write is doing.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Wait if the port is not connected or full on splice
like as write is doing.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio/console: Add a failback for unstealable pipe buffer</title>
<updated>2012-09-28T05:35:12+00:00</updated>
<author>
<name>Masami Hiramatsu</name>
<email>masami.hiramatsu.pt@hitachi.com</email>
</author>
<published>2012-08-09T12:30:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ec8fc870156b2b144f55b6a5a7d135018f04b30e'/>
<id>ec8fc870156b2b144f55b6a5a7d135018f04b30e</id>
<content type='text'>
Add a failback memcpy path for unstealable pipe buffer.
If buf-&gt;ops-&gt;steal() fails, virtio-serial tries to
copy the page contents to an allocated page, instead
of just failing splice().

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add a failback memcpy path for unstealable pipe buffer.
If buf-&gt;ops-&gt;steal() fails, virtio-serial tries to
copy the page contents to an allocated page, instead
of just failing splice().

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio/console: Add splice_write support</title>
<updated>2012-09-28T05:35:12+00:00</updated>
<author>
<name>Masami Hiramatsu</name>
<email>masami.hiramatsu.pt@hitachi.com</email>
</author>
<published>2012-08-09T12:30:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=eb5e89fc70bb3f115b3206ed0c57d3aba1fdd155'/>
<id>eb5e89fc70bb3f115b3206ed0c57d3aba1fdd155</id>
<content type='text'>
Enable to use splice_write from pipe to virtio-console port.
This steals pages from pipe and directly send it to host.

Note that this may accelerate only the guest to host path.

Changes in v2:
 - Use GFP_KERNEL instead of GFP_ATOMIC in syscall context function.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Enable to use splice_write from pipe to virtio-console port.
This steals pages from pipe and directly send it to host.

Note that this may accelerate only the guest to host path.

Changes in v2:
 - Use GFP_KERNEL instead of GFP_ATOMIC in syscall context function.

Signed-off-by: Masami Hiramatsu &lt;masami.hiramatsu.pt@hitachi.com&gt;
Acked-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio: console: tell host of open ports after resume from s3/s4</title>
<updated>2012-05-17T09:14:33+00:00</updated>
<author>
<name>Amit Shah</name>
<email>amit.shah@redhat.com</email>
</author>
<published>2012-04-25T09:10:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=fa8b66ccd2d200b64496cfedcce90bf54fe7d6e9'/>
<id>fa8b66ccd2d200b64496cfedcce90bf54fe7d6e9</id>
<content type='text'>
If a port was open before going into one of the sleep states, the port
can continue normal operation after restore.  However, the host has to
be told that the guest side of the connection is open to restore
pre-suspend state.

This wasn't noticed so far due to a bug in qemu that was fixed recently
(which marked the guest-side connection as always open).

CC: stable@vger.kernel.org   # Only for 3.3

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Michael S. Tsirkin &lt;mst@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If a port was open before going into one of the sleep states, the port
can continue normal operation after restore.  However, the host has to
be told that the guest side of the connection is open to restore
pre-suspend state.

This wasn't noticed so far due to a bug in qemu that was fixed recently
(which marked the guest-side connection as always open).

CC: stable@vger.kernel.org   # Only for 3.3

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Michael S. Tsirkin &lt;mst@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>simple_open: automatically convert to simple_open()</title>
<updated>2012-04-05T22:25:50+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2012-04-05T21:25:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=234e340582901211f40d8c732afc49f0630ecf05'/>
<id>234e340582901211f40d8c732afc49f0630ecf05</id>
<content type='text'>
Many users of debugfs copy the implementation of default_open() when
they want to support a custom read/write function op.  This leads to a
proliferation of the default_open() implementation across the entire
tree.

Now that the common implementation has been consolidated into libfs we
can replace all the users of this function with simple_open().

This replacement was done with the following semantic patch:

&lt;smpl&gt;
@ open @
identifier open_f != simple_open;
identifier i, f;
@@
-int open_f(struct inode *i, struct file *f)
-{
(
-if (i-&gt;i_private)
-f-&gt;private_data = i-&gt;i_private;
|
-f-&gt;private_data = i-&gt;i_private;
)
-return 0;
-}

@ has_open depends on open @
identifier fops;
identifier open.open_f;
@@
struct file_operations fops = {
...
-.open = open_f,
+.open = simple_open,
...
};
&lt;/smpl&gt;

[akpm@linux-foundation.org: checkpatch fixes]
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Cc: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Cc: Julia Lawall &lt;Julia.Lawall@lip6.fr&gt;
Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Many users of debugfs copy the implementation of default_open() when
they want to support a custom read/write function op.  This leads to a
proliferation of the default_open() implementation across the entire
tree.

Now that the common implementation has been consolidated into libfs we
can replace all the users of this function with simple_open().

This replacement was done with the following semantic patch:

&lt;smpl&gt;
@ open @
identifier open_f != simple_open;
identifier i, f;
@@
-int open_f(struct inode *i, struct file *f)
-{
(
-if (i-&gt;i_private)
-f-&gt;private_data = i-&gt;i_private;
|
-f-&gt;private_data = i-&gt;i_private;
)
-return 0;
-}

@ has_open depends on open @
identifier fops;
identifier open.open_f;
@@
struct file_operations fops = {
...
-.open = open_f,
+.open = simple_open,
...
};
&lt;/smpl&gt;

[akpm@linux-foundation.org: checkpatch fixes]
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Cc: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Cc: Julia Lawall &lt;Julia.Lawall@lip6.fr&gt;
Acked-by: Ingo Molnar &lt;mingo@elte.hu&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio: console: Disable callbacks for virtqueues at start of S4 freeze</title>
<updated>2012-01-12T05:14:45+00:00</updated>
<author>
<name>Amit Shah</name>
<email>amit.shah@redhat.com</email>
</author>
<published>2012-01-06T10:49:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c743d09dbd018dd6345519fb3264b16bdaa41746'/>
<id>c743d09dbd018dd6345519fb3264b16bdaa41746</id>
<content type='text'>
To ensure we don't receive any more interrupts from the host after we
enter the freeze function, disable all vq interrupts.

There wasn't any problem seen due to this in tests, but applying this
patch makes the freeze case more robust.

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
To ensure we don't receive any more interrupts from the host after we
enter the freeze function, disable all vq interrupts.

There wasn't any problem seen due to this in tests, but applying this
patch makes the freeze case more robust.

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>virtio: console: Add freeze and restore handlers to support S4</title>
<updated>2012-01-12T05:14:45+00:00</updated>
<author>
<name>Amit Shah</name>
<email>amit.shah@redhat.com</email>
</author>
<published>2011-12-22T11:28:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=2b8f41d846990c3c1c8addbaed2cf53c3ef91d25'/>
<id>2b8f41d846990c3c1c8addbaed2cf53c3ef91d25</id>
<content type='text'>
Remove all vqs and associated buffers in the freeze callback which
prepares us to go into hibernation state.  On restore, re-create all the
vqs and populate the input vqs with buffers to get to the pre-hibernate
state.

Note: Any outstanding unconsumed buffers are discarded; which means
there's a possibility of data loss in case the host or the guest didn't
consume any data already present in the vqs.  This can be addressed in a
later patch series, perhaps in virtio common code.

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Remove all vqs and associated buffers in the freeze callback which
prepares us to go into hibernation state.  On restore, re-create all the
vqs and populate the input vqs with buffers to get to the pre-hibernate
state.

Note: Any outstanding unconsumed buffers are discarded; which means
there's a possibility of data loss in case the host or the guest didn't
consume any data already present in the vqs.  This can be addressed in a
later patch series, perhaps in virtio common code.

Signed-off-by: Amit Shah &lt;amit.shah@redhat.com&gt;
Signed-off-by: Rusty Russell &lt;rusty@rustcorp.com.au&gt;
</pre>
</div>
</content>
</entry>
</feed>
