<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/powerpc/lib/Makefile, branch linux-5.3.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.3.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.3.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2019-05-28T02:08:11Z</updated>
<entry>
<title>powerpc/lib: only build ldstfp.o when CONFIG_PPC_FPU is set</title>
<updated>2019-05-28T02:08:11Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2019-05-13T10:00:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3e3ebed3fef4878e6f1680ff98088db1a9688831'/>
<id>urn:sha1:3e3ebed3fef4878e6f1680ff98088db1a9688831</id>
<content type='text'>
The entire code in ldstfp.o is enclosed into #ifdef CONFIG_PPC_FPU,
so there is no point in building it when this config is not selected.

Fixes: cd64d1697cf0 ("powerpc: mtmsrd not defined")
Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc/lib: fix redundant inclusion of quad.o</title>
<updated>2019-05-28T02:08:11Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2019-05-13T10:00:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f8e0d0fddf87f26aed576983f752329de4c0900f'/>
<id>urn:sha1:f8e0d0fddf87f26aed576983f752329de4c0900f</id>
<content type='text'>
quad.o is only for PPC64, and already included in obj64-y,
so it doesn't have to be in obj-y

Fixes: 31bfdb036f12 ("powerpc: Use instruction emulation infrastructure to handle alignment faults")
Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc: disable KASAN instrumentation on early/critical files.</title>
<updated>2019-05-02T15:20:26Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2019-04-26T16:23:33Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f072015c7b742c42aa5649d22f43163cd0eb7024'/>
<id>urn:sha1:f072015c7b742c42aa5649d22f43163cd0eb7024</id>
<content type='text'>
All files containing functions run before kasan_early_init() is called
must have KASAN instrumentation disabled.

For those file, branch profiling also have to be disabled otherwise
each if () generates a call to ftrace_likely_update().

Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc: prepare string/mem functions for KASAN</title>
<updated>2019-05-02T15:20:25Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2019-04-26T16:23:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=26deb04342e343ac58ab05bc7d2345ff0be9b667'/>
<id>urn:sha1:26deb04342e343ac58ab05bc7d2345ff0be9b667</id>
<content type='text'>
CONFIG_KASAN implements wrappers for memcpy() memmove() and memset()
Those wrappers are doing the verification then call respectively
__memcpy() __memmove() and __memset(). The arches are therefore
expected to rename their optimised functions that way.

For files on which KASAN is inhibited, #defines are used to allow
them to directly call optimised versions of the functions without
going through the KASAN wrappers.

See commit 393f203f5fd5 ("x86_64: kasan: add interceptors for
memset/memmove/memcpy functions") for details.

Other string / mem functions do not (yet) have kasan wrappers,
we therefore have to fallback to the generic versions when
KASAN is active, otherwise KASAN checks will be skipped.

Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
[mpe: Fixups to keep selftests working]
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc: sstep: Add tests for compute type instructions</title>
<updated>2019-02-23T10:04:31Z</updated>
<author>
<name>Sandipan Das</name>
</author>
<published>2019-02-20T06:56:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=84022ac17327c5383917f46c162fd943cf79583f'/>
<id>urn:sha1:84022ac17327c5383917f46c162fd943cf79583f</id>
<content type='text'>
This enhances the current selftest framework for validating
the in-kernel instruction emulation infrastructure by adding
support for compute type instructions i.e. integer ALU-based
instructions. Originally, this framework was limited to only
testing load and store instructions.

While most of the GPRs can be validated, support for SPRs is
limited to LR, CR and XER for now.

When writing the test cases, one must ensure that the Stack
Pointer (GPR1) or the Thread Pointer (GPR13) are not touched
by any means as these are vital non-volatile registers.

Signed-off-by: Sandipan Das &lt;sandipan@linux.ibm.com&gt;
[mpe: Use patch_site for the code patching]
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc: Add support for function error injection</title>
<updated>2018-10-20T02:26:43Z</updated>
<author>
<name>Naveen N. Rao</name>
</author>
<published>2018-06-07T09:52:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7cd01b08d35f1b7d55686ed8cd57c94d3406ec8f'/>
<id>urn:sha1:7cd01b08d35f1b7d55686ed8cd57c94d3406ec8f</id>
<content type='text'>
We implement regs_set_return_value() and override_function_with_return()
for this purpose.

On powerpc, a return from a function (blr) just branches to the location
contained in the link register. So, we can just update pt_regs rather
than redirecting execution to a dummy function that returns.

Signed-off-by: Naveen N. Rao &lt;naveen.n.rao@linux.vnet.ibm.com&gt;
Reviewed-by: Samuel Mendoza-Jonas &lt;sam@mendozajonas.com&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc: Add -Werror at arch/powerpc level</title>
<updated>2018-10-18T13:56:17Z</updated>
<author>
<name>Michael Ellerman</name>
</author>
<published>2018-10-10T05:13:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=23ad1a2700725d46ee7760920974c68be81ab82d'/>
<id>urn:sha1:23ad1a2700725d46ee7760920974c68be81ab82d</id>
<content type='text'>
Back when I added -Werror in commit ba55bd74360e ("powerpc: Add
configurable -Werror for arch/powerpc") I did it by adding it to most
of the arch Makefiles.

At the time we excluded math-emu, because apparently it didn't build
cleanly. But that seems to have been fixed somewhere in the interim.

So move the -Werror addition to the top-level of the arch, this saves
us from repeating it in every Makefile and means we won't forget to
add it to any new sub-dirs.

Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc/lib: Implement strlen() in assembly for PPC32</title>
<updated>2018-08-07T11:49:30Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2018-08-01T09:01:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9412b234501eef1d273cc759387a232f0027c574'/>
<id>urn:sha1:9412b234501eef1d273cc759387a232f0027c574</id>
<content type='text'>
The generic implementation of strlen() reads strings byte per byte.

This patch implements strlen() in assembly based on a read of entire
words, in the same spirit as what some other arches and glibc do.

On a 8xx the time spent in strlen is reduced by 3/4 for long strings.

strlen() selftest on an 8xx provides the following values:

Before the patch (ie with the generic strlen() in lib/string.c):

  len 256 : time = 1.195055
  len 016 : time = 0.083745
  len 008 : time = 0.046828
  len 004 : time = 0.028390

After the patch:

  len 256 : time = 0.272185 ==&gt; 78% improvment
  len 016 : time = 0.040632 ==&gt; 51% improvment
  len 008 : time = 0.033060 ==&gt; 29% improvment
  len 004 : time = 0.029149 ==&gt; 2% degradation

On a 832x:

Before the patch:

  len 256 : time = 0.236125
  len 016 : time = 0.018136
  len 008 : time = 0.011000
  len 004 : time = 0.007229

After the patch:

  len 256 : time = 0.094950 ==&gt; 60% improvment
  len 016 : time = 0.013357 ==&gt; 26% improvment
  len 008 : time = 0.010586 ==&gt; 4% improvment
  len 004 : time = 0.008784

Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc/lib: optimise PPC32 memcmp</title>
<updated>2018-06-03T14:39:21Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2018-05-30T07:06:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2676b89eb82f56825d7289edf21f17a6461388b7'/>
<id>urn:sha1:2676b89eb82f56825d7289edf21f17a6461388b7</id>
<content type='text'>
At the time being, memcmp() compares two chunks of memory
byte per byte.

This patch optimises the comparison by comparing word by word.

On the same way as commit 15c2d45d17418 ("powerpc: Add 64bit
optimised memcmp"), this patch moves memcmp() into a dedicated
file named memcmp_32.S

A small benchmark performed on an 8xx comparing two chuncks
of 512 bytes performed 100000 times gives:

Before : 5852274 TB ticks
After:   1488638 TB ticks

This is almost 4 times faster

Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
<entry>
<title>powerpc/lib: optimise 32 bits __clear_user()</title>
<updated>2018-06-03T14:39:21Z</updated>
<author>
<name>Christophe Leroy</name>
</author>
<published>2018-05-30T07:06:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f36bbf21e8b911b3c629fd36d4d217105b47a20e'/>
<id>urn:sha1:f36bbf21e8b911b3c629fd36d4d217105b47a20e</id>
<content type='text'>
Rewrite clear_user() on the same principle as memset(0), making use
of dcbz to clear complete cache lines.

This code is a copy/paste of memset(), with some modifications
in order to retrieve remaining number of bytes to be cleared,
as it needs to be returned in case of error.

On the same way as done on PPC64 in commit 17968fbbd19f1
("powerpc: 64bit optimised __clear_user"), the patch moves
__clear_user() into a dedicated file string_32.S

On a MPC885, throughput is almost doubled:

Before:
~# dd if=/dev/zero of=/dev/null bs=1M count=1000
1048576000 bytes (1000.0MB) copied, 18.990779 seconds, 52.7MB/s

After:
~# dd if=/dev/zero of=/dev/null bs=1M count=1000
1048576000 bytes (1000.0MB) copied, 9.611468 seconds, 104.0MB/s

On a MPC8321, throughput is multiplied by 2.12:

Before:
root@vgoippro:~# dd if=/dev/zero of=/dev/null bs=1M count=1000
1048576000 bytes (1000.0MB) copied, 6.844352 seconds, 146.1MB/s

After:
root@vgoippro:~# dd if=/dev/zero of=/dev/null bs=1M count=1000
1048576000 bytes (1000.0MB) copied, 3.218854 seconds, 310.7MB/s

Signed-off-by: Christophe Leroy &lt;christophe.leroy@c-s.fr&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
</content>
</entry>
</feed>
