<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/s390/cio, branch linux-5.7.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.7.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.7.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2020-06-24T15:48:36Z</updated>
<entry>
<title>s390/qdio: put thinint indicator after early error</title>
<updated>2020-06-24T15:48:36Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-04-09T07:59:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=854a04f82c792a4eb72caba3b181e08095d3d47e'/>
<id>urn:sha1:854a04f82c792a4eb72caba3b181e08095d3d47e</id>
<content type='text'>
[ Upstream commit 75e82bec6b2622c6f455b7a543fb5476a5d0eed7 ]

qdio_establish() calls qdio_setup_thinint() via qdio_setup_irq().
If the subsequent qdio_establish_thinint() fails, we miss to put the
DSCI again. Thus the DSCI isn't available for re-use. Given enough of
such errors, we could end up with having only the shared DSCI available.

Merge qdio_setup_thinint() into qdio_establish_thinint(), and deal with
such an error internally.

Fixes: 779e6e1c724d ("[S390] qdio: new qdio driver.")
Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>s390/qdio: tear down thinint indicator after early error</title>
<updated>2020-06-24T15:48:36Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-04-09T07:55:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=42d6c5a750b2bd2501a9bdeaadd4010b09e3e0a3'/>
<id>urn:sha1:42d6c5a750b2bd2501a9bdeaadd4010b09e3e0a3</id>
<content type='text'>
[ Upstream commit 68a381746f20e5435206173e22d0a011ef78790e ]

qdio_establish() calls qdio_establish_thinint(), but later has an error
exit path that doesn't roll this call back. Fix it.

Fixes: 779e6e1c724d ("[S390] qdio: new qdio driver.")
Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>s390/qdio: consistently restore the IRQ handler</title>
<updated>2020-06-24T15:48:36Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-04-09T08:55:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a4482984c41f5cc1d217aa189fe51bbbc0500f98'/>
<id>urn:sha1:a4482984c41f5cc1d217aa189fe51bbbc0500f98</id>
<content type='text'>
[ Upstream commit 7b942b4be971d49cb185ce4690d7fbf94636e88a ]

For rolling back after an error, qdio_establish() calls qdio_shutdown().
If the error occurs early enough, then the qdio_irq's state still is
QDIO_IRQ_STATE_INACTIVE and qdio_shutdown() does nothing.

But at _any_ point where qdio_establish() bails out in this way,
qdio_setup_irq() will have already replaced the IRQ handler. This then
won't be restored after an early error, and the device can end up being
returned to the device driver with qdio's IRQ handler still installed.

Slightly reorder qdio_setup_irq() so we can be 100% sure that the IRQ
handler was replaced. Then fix the bug in qdio_establish() by calling a
helper that rolls back only the IRQ handler modification.

Also use the new helper in qdio_shutdown() to keep things in sync, and
slightly clean up the locking while doing so.
This makes minor semantical changes, but holding setup_mutex gives us
sufficient leeway to eg. pull qdio_shutdown_thinint() outside of the
ccwdev lock's scope.

Fixes: 779e6e1c724d ("[S390] qdio: new qdio driver.")
Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>s390/cio: generate delayed uevent for vfio-ccw subchannels</title>
<updated>2020-04-06T12:02:28Z</updated>
<author>
<name>Cornelia Huck</name>
</author>
<published>2020-03-27T12:45:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2bc55eaeb88d30accfc1b6ac2708d4e4b81ca260'/>
<id>urn:sha1:2bc55eaeb88d30accfc1b6ac2708d4e4b81ca260</id>
<content type='text'>
The common I/O layer delays the ADD uevent for subchannels and
delegates generating this uevent to the individual subchannel
drivers. The vfio-ccw I/O subchannel driver, however, did not
do that, and will not generate an ADD uevent for subchannels
that had not been bound to a different driver (or none at all,
which also triggers the uevent).

Generate the ADD uevent at the end of the probe function if
uevents were still suppressed for the device.

Message-Id: &lt;20200327124503.9794-3-cohuck@redhat.com&gt;
Fixes: 63f1934d562d ("vfio: ccw: basic implementation for vfio_ccw driver")
Reviewed-by: Eric Farman &lt;farman@linux.ibm.com&gt;
Signed-off-by: Cornelia Huck &lt;cohuck@redhat.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/cio: avoid duplicated 'ADD' uevents</title>
<updated>2020-04-06T12:02:28Z</updated>
<author>
<name>Cornelia Huck</name>
</author>
<published>2020-03-27T12:45:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=05ce3e53f375295c2940390b2b429e506e07655c'/>
<id>urn:sha1:05ce3e53f375295c2940390b2b429e506e07655c</id>
<content type='text'>
The common I/O layer delays the ADD uevent for subchannels and
delegates generating this uevent to the individual subchannel
drivers. The io_subchannel driver will do so when the associated
ccw_device has been registered -- but unconditionally, so more
ADD uevents will be generated if a subchannel has been unbound
from the io_subchannel driver and later rebound.

To fix this, only generate the ADD event if uevents were still
suppressed for the device.

Fixes: fa1a8c23eb7d ("s390: cio: Delay uevents for subchannels")
Message-Id: &lt;20200327124503.9794-2-cohuck@redhat.com&gt;
Reported-by: Boris Fiuczynski &lt;fiuczy@linux.ibm.com&gt;
Reviewed-by: Peter Oberparleiter &lt;oberpar@linux.ibm.com&gt;
Reviewed-by: Boris Fiuczynski &lt;fiuczy@linux.ibm.com&gt;
Signed-off-by: Cornelia Huck &lt;cohuck@redhat.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/qdio: clear DSCI early for polling drivers</title>
<updated>2020-04-06T11:13:51Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-03-20T13:00:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9c159bbc14ba196d590dc1a2fe7931ccfe73db98'/>
<id>urn:sha1:9c159bbc14ba196d590dc1a2fe7931ccfe73db98</id>
<content type='text'>
Polling drivers in a configuration with 1 Input Queue currently keep
their DSCI armed all the way through the poll cycle, until
qdio_start_irq() clears it.

_Any_ intermittent QDIO interrupt delivered to tiqdio_thinint_handler()
will thus cause
1) the 'adapter_int' statistic to be incremented,
2) a call to tiqdio_call_inq_handlers() for this device, and then
3) the 'int_discarded' statistics to be incremented.

This causes overhead &amp; complexity in the IRQ path, along with ambiguity
in the statistics.
On the other hand the device should be in IRQ avoidance mode during a
poll cycle, so there won't be a lot of DSCI ping-pong that this
micro-optimization could prevent.

So align the DSCI handling with what we already do for devices with
multiple Input Queues: clear it right away while processing the IRQ.

For the non-polling path this means that we no longer need to handle
the 1-queue case separately.

Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/qdio: inline shared_ind()</title>
<updated>2020-04-06T11:13:50Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-03-20T13:00:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a8a4ee2740bb6224271f06742884ec375c42cb9e'/>
<id>urn:sha1:a8a4ee2740bb6224271f06742884ec375c42cb9e</id>
<content type='text'>
This is just prep work for a subsequent patch, no functional change.

For the non-polling path we can pull the code chunk in front of the
for-loop, since it only evaluates to true for a 1-queue configuration.

Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/qdio: remove cdev from init_data</title>
<updated>2020-04-06T11:13:50Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-03-20T13:00:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1da1092dbf61a0c0aab02048232f5e9fcab15861'/>
<id>urn:sha1:1da1092dbf61a0c0aab02048232f5e9fcab15861</id>
<content type='text'>
It's no longer needed.

Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/qdio: allow for non-contiguous SBAL array in init_data</title>
<updated>2020-04-06T11:13:50Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-03-20T13:00:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d8564e19da8c8b31c7fc160942f95b113f554211'/>
<id>urn:sha1:d8564e19da8c8b31c7fc160942f95b113f554211</id>
<content type='text'>
Upper-layer drivers allocate their SBALs by calling qdio_alloc_buffers()
for each individual queue. But when later passing the SBAL addresses to
qdio_establish(), they need to be in a single array of pointers.
So if the driver uses multiple Input or Output queues, it needs to
allocate a temporary array just to present all its SBAL pointers in this
layout.

This patch slightly changes the format of the QDIO initialization data,
so that drivers can pass a per-queue array where each element points to
a queue's SBAL array.
zfcp doesn't use multiple queues, so the impact there is trivial.
For qeth this brings a nice reduction in complexity, and removes
a page-sized allocation.

Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/qdio: cleanly split alloc and establish</title>
<updated>2020-04-06T11:13:50Z</updated>
<author>
<name>Julian Wiedmann</name>
</author>
<published>2020-03-20T13:00:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3db1db93e34325e14bb29f8f1d904020c409bea6'/>
<id>urn:sha1:3db1db93e34325e14bb29f8f1d904020c409bea6</id>
<content type='text'>
All that qdio_allocate() actually uses from the init_data is the cdev,
and the number of Input and Output Queues. Have the driver pass those as
parameters, and defer the init_data processing into qdio_establish().
This includes writing per-device(!) trace entries, and most of the
sanity checks.

Signed-off-by: Julian Wiedmann &lt;jwi@linux.ibm.com&gt;
Reviewed-by: Benjamin Block &lt;bblock@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
</feed>
