<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/uio/uio.c, branch linux-4.5.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.5.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.5.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2015-10-04T11:32:25Z</updated>
<entry>
<title>uio: fix false positive __might_sleep warning splat</title>
<updated>2015-10-04T11:32:25Z</updated>
<author>
<name>Michal Hocko</name>
</author>
<published>2015-09-07T07:21:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=edce5e6f33a365c879b453286191bf397cc5efb4'/>
<id>urn:sha1:edce5e6f33a365c879b453286191bf397cc5efb4</id>
<content type='text'>
Andy has reported a __might_sleep warning
[ 5174.883617] WARNING: CPU: 0 PID: 1532 at
/home/agrover/git/kernel/kernel/sched/core.c:7389 __might_sleep+0x7d/0x90()
[ 5174.884407] do not call blocking ops when !TASK_RUNNING; state=1 set at [&lt;ffffffffa02a5821&gt;] uio_read+0x91/0x170 [uio]
[ 5174.885198] Modules linked in: tcm_loop target_core_user uio target_core_pscsi target_core_file target_core_iblock iscsi_target_mod  target_core_mod uinput fuse nfsv3 nfs_acl nfs lockd grace fscache sunrpc microcode i2c_piix4 virtio_balloon i2c_core xfs libcrc32c crc32c_intel  virtio_net virtio_blk
[ 5174.887351] CPU: 0 PID: 1532 Comm: tcmu-runner Not tainted 4.2.0-rc7+
[ 5174.887853] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
BIOS 1.8.1-20150318_183358- 04/01/2014
[ 5174.888633]  ffffffff81a3b870 ffff880045393ca8 ffffffff817afaae
0000000000000000
[ 5174.889224]  ffff880045393cf8 ffff880045393ce8 ffffffff8109a846
ffff880045393cd8
[ 5174.889793]  ffffffffa02a7150 00000000000002dc 0000000000000000
ffff880045008000
[ 5174.890375] Call Trace:
[ 5174.890562]  [&lt;ffffffff817afaae&gt;] dump_stack+0x4c/0x65
[ 5174.890938]  [&lt;ffffffff8109a846&gt;] warn_slowpath_common+0x86/0xc0
[ 5174.891388]  [&lt;ffffffff8109a8c6&gt;] warn_slowpath_fmt+0x46/0x50
[ 5174.891808]  [&lt;ffffffffa02a5821&gt;] ? uio_read+0x91/0x170 [uio]
[ 5174.892237]  [&lt;ffffffffa02a5821&gt;] ? uio_read+0x91/0x170 [uio]
[ 5174.892653]  [&lt;ffffffff810c584d&gt;] __might_sleep+0x7d/0x90
[ 5174.893055]  [&lt;ffffffff811ea023&gt;] __might_fault+0x43/0xa0
[ 5174.893448]  [&lt;ffffffff817b31ce&gt;] ? schedule+0x3e/0x90
[ 5174.893820]  [&lt;ffffffffa02a58c2&gt;] uio_read+0x132/0x170 [uio]
[ 5174.894240]  [&lt;ffffffff810cbb80&gt;] ? wake_up_q+0x70/0x70
[ 5174.894620]  [&lt;ffffffff81236168&gt;] __vfs_read+0x28/0xe0
[ 5174.894993]  [&lt;ffffffff81353233&gt;] ? security_file_permission+0xa3/0xc0
[ 5174.895541]  [&lt;ffffffff8123678f&gt;] ? rw_verify_area+0x4f/0xf0
[ 5174.896006]  [&lt;ffffffff812368ba&gt;] vfs_read+0x8a/0x140
[ 5174.896391]  [&lt;ffffffff817b28f5&gt;] ? __schedule+0x425/0xcc0
[ 5174.896788]  [&lt;ffffffff812375d9&gt;] SyS_read+0x49/0xb0

The warning is a false positive because uio_read doesn't depent on
TASK_INTERRUPTIBLE after copy_to_user so it is safe to silence the
warning by an explicit setting the state to TASK_RUNNING in the path
which might call into TASK_RUNNING.

Reported-by: Andy Grover &lt;agrover@redhat.com&gt;
Signed-off-by: Michal Hocko &lt;mhocko@suse.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: Destroy uio_idr on module exit</title>
<updated>2015-08-05T20:25:59Z</updated>
<author>
<name>Johannes Thumshirn</name>
</author>
<published>2015-07-08T15:24:46Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e2ef93930326134001523016782daddf1a4b78a2'/>
<id>urn:sha1:e2ef93930326134001523016782daddf1a4b78a2</id>
<content type='text'>
Destroy uio_idr on module exit, reclaiming the allocated memory.

This was detected by the following semantic patch (written by Luis Rodriguez
&lt;mcgrof@suse.com&gt;)
&lt;SmPL&gt;
@ defines_module_init @
declarer name module_init, module_exit;
declarer name DEFINE_IDR;
identifier init;
@@

module_init(init);

@ defines_module_exit @
identifier exit;
@@

module_exit(exit);

@ declares_idr depends on defines_module_init &amp;&amp; defines_module_exit @
identifier idr;
@@

DEFINE_IDR(idr);

@ on_exit_calls_destroy depends on declares_idr &amp;&amp; defines_module_exit @
identifier declares_idr.idr, defines_module_exit.exit;
@@

exit(void)
{
 ...
 idr_destroy(&amp;idr);
 ...
}

@ missing_module_idr_destroy depends on declares_idr &amp;&amp; defines_module_exit &amp;&amp; !on_exit_calls_destroy @
identifier declares_idr.idr, defines_module_exit.exit;
@@

exit(void)
{
 ...
 +idr_destroy(&amp;idr);
}

&lt;/SmPL&gt;

Signed-off-by: Johannes Thumshirn &lt;jthumshirn@suse.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: don't free irq that was not requested</title>
<updated>2015-05-24T18:55:15Z</updated>
<author>
<name>Stephen Hemminger</name>
</author>
<published>2015-05-14T16:19:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9ff2c132345cab8972a2bd29069aa52a3cadbbcc'/>
<id>urn:sha1:9ff2c132345cab8972a2bd29069aa52a3cadbbcc</id>
<content type='text'>
UIO base driver should only free_irq that it has requested.
UIO supports drivers without interrupts (irq == 0) or custom handlers.

This fixes warnings like:

WARNING: CPU: 1 PID: 5478 at kernel/irq/manage.c:1244 __free_irq+0xa9/0x1e0()
Trying to free already-free IRQ 0

Signed-off-by: Stephen Hemminger &lt;stephen@networkplumber.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: Request/free irq separate from dev lifecycle</title>
<updated>2015-03-20T12:18:16Z</updated>
<author>
<name>Brian Russell</name>
</author>
<published>2015-03-19T17:55:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a087146c72bad795bcab80e5987c5b80fa225000'/>
<id>urn:sha1:a087146c72bad795bcab80e5987c5b80fa225000</id>
<content type='text'>
Separate irq request/free from the device lifecycle.
After device unregister the parent module can call pci_disable_msi.
&gt;From the PCI MSI how to:

"Before calling this function, a device driver must always call free_irq()
on any interrupt for which it previously called request_irq().
Failure to do so results in a BUG_ON(), leaving the device with
MSI enabled and thus leaking its vector."

So we need to separately free the irq at unregister to allow the device
to be kept around in the case of it still having open FDs.

Signed-off-by: Brian Russell &lt;brussell@brocade.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: support memory sizes larger than 32 bits</title>
<updated>2014-11-07T18:09:07Z</updated>
<author>
<name>Cristian Stoica</name>
</author>
<published>2014-10-09T12:00:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e0f1147cc9512d3610d2f2a0f069690661444703'/>
<id>urn:sha1:e0f1147cc9512d3610d2f2a0f069690661444703</id>
<content type='text'>
This is a completion to 27a90700a4275c5178b883b65927affdafa5185c
The size field is also increased to allow values larger than 32 bits
on platforms that have more than 32 bit physical addresses.

Signed-off-by: Cristian Stoica &lt;cristian.stoica@freescale.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: Export definition of struct uio_device</title>
<updated>2014-10-03T04:35:54Z</updated>
<author>
<name>Andy Grover</name>
</author>
<published>2014-10-01T23:07:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f14bb039a4e8206439d3e9abd92bc76bd142f243'/>
<id>urn:sha1:f14bb039a4e8206439d3e9abd92bc76bd142f243</id>
<content type='text'>
In order to prevent a O(n) search of the filesystem to link up its uio
node with its target configuration, TCMU needs to know the minor number
that UIO assigned. Expose the definition of this struct so TCMU can
access this field.

Signed-off-by: Andy Grover &lt;agrover@redhat.com&gt;
Signed-off-by: Nicholas Bellinger &lt;nab@linux-iscsi.org&gt;
</content>
</entry>
<entry>
<title>Revert "uio: fix vma io range check in mmap"</title>
<updated>2014-06-17T23:07:08Z</updated>
<author>
<name>Greg Kroah-Hartman</name>
</author>
<published>2014-06-17T23:07:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b29f680c4fe305902d02c1d5aa4968fe13a45fe6'/>
<id>urn:sha1:b29f680c4fe305902d02c1d5aa4968fe13a45fe6</id>
<content type='text'>
This reverts commit ddb09754e6c7239e302c7b675df9bbd415f8de5d.

Linus objected to this originally, I can see why it might be needed, but
given that no one spoke up defending this patch, I'm going to revert it.

If you have hardware that requires this change, please speak up in the
future and defend the patch.

Reported-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Bin Wang &lt;binw@marvell.com&gt;
Cc: Nobuhiro Iwamatsu &lt;nobuhiro.iwamatsu.yj@renesas.com&gt;
Cc: Norbert Ciosek &lt;norbertciosek@gmail.com&gt;
Cc: stable &lt;stable@vger.kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: fix vma io range check in mmap</title>
<updated>2014-05-27T21:11:06Z</updated>
<author>
<name>Bin Wang</name>
</author>
<published>2014-03-25T05:52:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ddb09754e6c7239e302c7b675df9bbd415f8de5d'/>
<id>urn:sha1:ddb09754e6c7239e302c7b675df9bbd415f8de5d</id>
<content type='text'>
the vma range size is always page size aligned in mmap, while the
real io space range may not be page aligned, thus leading to range
check failure in the uio_mmap_physical().

for example, in a case of io range size "mem-&gt;size == 1KB", and we
have (vma-&gt;vm_end - vma-&gt;vm_start) == 4KB, due to "len" is aligned
to page size in do_mmap_pgoff().

now fix this issue by align mem-&gt;size to page size in the check.

Signed-off-by: Bin Wang &lt;binw@marvell.com&gt;
Signed-off-by: Nobuhiro Iwamatsu &lt;nobuhiro.iwamatsu.yj@renesas.com&gt;
Cc: stable &lt;stable@vger.kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: fix devm_request_irq usage</title>
<updated>2013-12-20T16:49:17Z</updated>
<author>
<name>Aaro Koskinen</name>
</author>
<published>2013-12-20T14:19:47Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=632fefaf1fff7c344191c363e08a43cf006fe60e'/>
<id>urn:sha1:632fefaf1fff7c344191c363e08a43cf006fe60e</id>
<content type='text'>
Commit e6789cd3dfb553077606ccafeb05e0043f072481 (uio: Simplify uio error
path by using devres functions) converted uio to use devm_request_irq().
This introduced a change in behaviour since the IRQ is associated with
the parent device instead of the created UIO device. The IRQ will remain
active after uio_unregister_device() is called, and some drivers will
crash because of this. The patch fixes this.

Signed-off-by: Aaro Koskinen &lt;aaro.koskinen@nsn.com&gt;
Cc: stable &lt;stable@vger.kernel.org&gt; # 3.13
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>uio: we cannot mmap unaligned page contents</title>
<updated>2013-12-02T19:50:37Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2013-12-02T19:50:37Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b65502879556d041b45104c6a35abbbba28c8f2d'/>
<id>urn:sha1:b65502879556d041b45104c6a35abbbba28c8f2d</id>
<content type='text'>
In commit 7314e613d5ff ("Fix a few incorrectly checked
[io_]remap_pfn_range() calls") the uio driver started more properly
checking the passed-in user mapping arguments against the size of the
actual uio driver data.

That in turn exposed that some driver authors apparently didn't realize
that mmap can only work on a page granularity, and had tried to use it
with smaller mappings, with the new size check catching that out.

So since it's not just the user mmap() arguments that can be confused,
make the uio mmap code also verify that the uio driver has the memory
allocated at page boundaries in order for mmap to work.  If the device
memory isn't properly aligned, we return

  [ENODEV]
    The fildes argument refers to a file whose type is not supported by mmap().

as per the open group documentation on mmap.

Reported-by: Holger Brunck &lt;holger.brunck@keymile.com&gt;
Acked-by: Greg KH &lt;gregkh@linuxfoundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
</feed>
