<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/s390/kernel/early.c, branch linux-5.13.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.13.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.13.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2021-09-18T11:42:04Z</updated>
<entry>
<title>s390: make PCI mio support a machine flag</title>
<updated>2021-09-18T11:42:04Z</updated>
<author>
<name>Niklas Schnelle</name>
</author>
<published>2021-07-08T12:55:42Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=140324caf2775386eef2f900f8a11c1d7b72d71c'/>
<id>urn:sha1:140324caf2775386eef2f900f8a11c1d7b72d71c</id>
<content type='text'>
[ Upstream commit 3322ba0d7bea1e24ae464418626f6a15b69533ab ]

Kernel support for the newer PCI mio instructions can be toggled off
with the pci=nomio command line option which needs to integrate with
common code PCI option parsing. However this option then toggles static
branches which can't be toggled yet in an early_param() call.

Thus commit 9964f396f1d0 ("s390: fix setting of mio addressing control")
moved toggling the static branches to the PCI init routine.

With this setup however we can't check for mio support outside the PCI
code during early boot, i.e. before switching the static branches, which
we need to be able to export this as an ELF HWCAP.

Improve on this by turning mio availability into a machine flag that
gets initially set based on CONFIG_PCI and the facility bit and gets
toggled off if pci=nomio is found during PCI option parsing allowing
simple access to this machine flag after early init.

Reviewed-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Niklas Schnelle &lt;schnelle@linux.ibm.com&gt;
Signed-off-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>s390/time: convert tod_clock_base to union</title>
<updated>2021-02-13T16:17:54Z</updated>
<author>
<name>Heiko Carstens</name>
</author>
<published>2021-02-08T15:06:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f8d8977a3d971011ab04e4569a664628bd03935e'/>
<id>urn:sha1:f8d8977a3d971011ab04e4569a664628bd03935e</id>
<content type='text'>
Convert tod_clock_base to union tod_clock. This simplifies quite a bit
of code and also fixes a bug in read_persistent_clock64();

void read_persistent_clock64(struct timespec64 *ts)
{
        __u64 delta;

        delta = initial_leap_seconds + TOD_UNIX_EPOCH;
        get_tod_clock_ext(clk);
        *(__u64 *) &amp;clk[1] -= delta;
        if (*(__u64 *) &amp;clk[1] &gt; delta)
                clk[0]--;
        ext_to_timespec64(clk, ts);
}

Assume &amp;clk[1] == 3 and delta == 2; then after the substraction the if
condition becomes true and the epoch part of the clock is decremented
by one because of an assumed overflow, even though there is none.

Fix this by using 128 bit arithmetics and let the compiler do the
right thing:

void read_persistent_clock64(struct timespec64 *ts)
{
        union tod_clock clk;
        u64 delta;

        delta = initial_leap_seconds + TOD_UNIX_EPOCH;
        store_tod_clock_ext(&amp;clk);
        clk.eitod -= delta;
        ext_to_timespec64(&amp;clk, ts);
}

Signed-off-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/time: rename store_tod_clock_ext() and use union tod_clock</title>
<updated>2021-02-13T16:17:54Z</updated>
<author>
<name>Heiko Carstens</name>
</author>
<published>2021-02-08T12:56:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=530f639f1efe076df8d56719ab45eb7203175ecf'/>
<id>urn:sha1:530f639f1efe076df8d56719ab45eb7203175ecf</id>
<content type='text'>
Rename store_tod_clock_ext() to store_tod_clock_ext_cc() to reflect
that it returns a condition code and also use union tod_clock as
parameter.

Signed-off-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/time: use stcke instead of stck</title>
<updated>2021-02-09T14:57:05Z</updated>
<author>
<name>Heiko Carstens</name>
</author>
<published>2021-02-01T20:53:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b22446d00af972ef624958a09dcbe85974b701fd'/>
<id>urn:sha1:b22446d00af972ef624958a09dcbe85974b701fd</id>
<content type='text'>
Use STORE CLOCK EXTENDED instead of STORE CLOCK in early tod clock
setup. This is just to remove another usage of stck, trying to remove
all usages of STORE CLOCK.  This doesn't fix anything.

Reviewed-by: Christian Borntraeger &lt;borntraeger@de.ibm.com&gt;
Signed-off-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390: remove unused s390_base_ext_handler</title>
<updated>2020-11-09T10:20:58Z</updated>
<author>
<name>Vasily Gorbik</name>
</author>
<published>2020-09-24T15:12:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f38b0a743904cc785f5ba0d65dd1f60e17e80387'/>
<id>urn:sha1:f38b0a743904cc785f5ba0d65dd1f60e17e80387</id>
<content type='text'>
s390_base_ext_handler_fn haven't been used since its introduction in
commit ab14de6c37fa ("[S390] Convert memory detection into C code.").

s390_base_ext_handler itself is currently falsely storing 16 registers
at __LC_SAVE_AREA_ASYNC rewriting several following lowcore values:
cpu_flags, return_psw, return_mcck_psw, sync_enter_timer and
async_enter_timer.

Besides that s390_base_ext_handler itself is only potentially hiding
EXT interrupts which should not have happen in the first place. Any
piece of code which requires EXT interrupts before fully functional
ext_int_handler is enabled has to do it on its own, like this is done
by sclp_early_cmd() which is doing EXT interrupts handling synchronously
in sclp_early_wait_irq().

With s390_base_ext_handler removed unexpected EXT interrupt leads
to disabled wait with the address 0x1b0 (__LC_EXT_NEW_PSW), which is
currently setup in the decompressor.

Reviewed-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Signed-off-by: Heiko Carstens &lt;hca@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390: remove cad commandline option</title>
<updated>2020-09-30T10:09:54Z</updated>
<author>
<name>Sven Schnelle</name>
</author>
<published>2020-09-28T05:22:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ad3e6948f90ac3d71f9c03ec92009d99dfb561e9'/>
<id>urn:sha1:ad3e6948f90ac3d71f9c03ec92009d99dfb561e9</id>
<content type='text'>
remove the cad command line option as the instruction was never
published and never used by userspace.

Signed-off-by: Sven Schnelle &lt;svens@linux.ibm.com&gt;
Reviewed-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Acked-by: Christian Borntraeger &lt;borntraeger@de.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/kasan: fix early pgm check handler execution</title>
<updated>2020-06-23T12:05:50Z</updated>
<author>
<name>Vasily Gorbik</name>
</author>
<published>2020-06-17T13:05:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=998f5bbe3dbdab81c1cfb1aef7c3892f5d24f6c7'/>
<id>urn:sha1:998f5bbe3dbdab81c1cfb1aef7c3892f5d24f6c7</id>
<content type='text'>
Currently if early_pgm_check_handler is called it ends up in pgm check
loop. The problem is that early_pgm_check_handler is instrumented by
KASAN but executed without DAT flag enabled which leads to addressing
exception when KASAN checks try to access shadow memory.

Fix that by executing early handlers with DAT flag on under KASAN as
expected.

Reported-and-tested-by: Alexander Egorenkov &lt;egorenar@linux.ibm.com&gt;
Reviewed-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390: remove last diag 0x44 caller</title>
<updated>2019-12-11T18:53:24Z</updated>
<author>
<name>Heiko Carstens</name>
</author>
<published>2019-11-29T11:59:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1b68ac8678a8e9993deebd55014cbe803e78ca02'/>
<id>urn:sha1:1b68ac8678a8e9993deebd55014cbe803e78ca02</id>
<content type='text'>
diag 0x44 is a voluntary undirected yield of a virtual CPU. This has
caused a lot of performance issues in the past.

There is only one caller left, and that one is only executed if diag
0x9c (directed yield) is not present. Given that all hypervisors
implement diag 0x9c anyway, remove the last diag 0x44 to avoid that
more callers will be added.

Worst case that could happen now, if diag 0x9c is not present, is that
a virtual CPU would loop a bit instead of giving its time slice up.

diag 0x44 statistics in debugfs are kept and will always be zero, so
that user space can tell that there are no calls.

Signed-off-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/early: move access registers setup in C code</title>
<updated>2019-11-20T11:58:13Z</updated>
<author>
<name>Vasily Gorbik</name>
</author>
<published>2019-11-14T13:08:28Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c2313594216b3fde9559e502bb36d14e9d601a56'/>
<id>urn:sha1:c2313594216b3fde9559e502bb36d14e9d601a56</id>
<content type='text'>
Reviewed-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
<entry>
<title>s390/early: move control registers setup in C code</title>
<updated>2019-11-20T11:58:12Z</updated>
<author>
<name>Vasily Gorbik</name>
</author>
<published>2019-11-12T16:35:28Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c02ee6a16a260ae00a403be440e229fd8618486b'/>
<id>urn:sha1:c02ee6a16a260ae00a403be440e229fd8618486b</id>
<content type='text'>
Reviewed-by: Heiko Carstens &lt;heiko.carstens@de.ibm.com&gt;
Signed-off-by: Vasily Gorbik &lt;gor@linux.ibm.com&gt;
</content>
</entry>
</feed>
