Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aedcfbe0 authored by Harvey Hunt's avatar Harvey Hunt Committed by Ralf Baechle
Browse files

MIPS: lib: Mark intrinsics notrace



On certain MIPS32 devices, the ftrace tracer "function_graph" uses
__lshrdi3() during the capturing of trace data. ftrace then attempts to
trace __lshrdi3() which leads to infinite recursion and a stack overflow.
Fix this by marking __lshrdi3() as notrace. Mark the other compiler
intrinsics as notrace in case the compiler decides to use them in the
ftrace path.

Signed-off-by: default avatarHarvey Hunt <harvey.hunt@imgtec.com>
Cc: <linux-mips@linux-mips.org>
Cc: <linux-kernel@vger.kernel.org>
Cc: <stable@vger.kernel.org> # 4.2.x-
Patchwork: https://patchwork.linux-mips.org/patch/13354/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent aa76042a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

#include "libgcc.h"

long long __ashldi3(long long u, word_type b)
long long notrace __ashldi3(long long u, word_type b)
{
	DWunion uu, w;
	word_type bm;
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

#include "libgcc.h"

long long __ashrdi3(long long u, word_type b)
long long notrace __ashrdi3(long long u, word_type b)
{
	DWunion uu, w;
	word_type bm;
+1 −1
Original line number Diff line number Diff line
#include <linux/module.h>

unsigned long long __bswapdi2(unsigned long long u)
unsigned long long notrace __bswapdi2(unsigned long long u)
{
	return (((u) & 0xff00000000000000ull) >> 56) |
	       (((u) & 0x00ff000000000000ull) >> 40) |
+1 −1
Original line number Diff line number Diff line
#include <linux/module.h>

unsigned int __bswapsi2(unsigned int u)
unsigned int notrace __bswapsi2(unsigned int u)
{
	return (((u) & 0xff000000) >> 24) |
	       (((u) & 0x00ff0000) >>  8) |
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

#include "libgcc.h"

word_type __cmpdi2(long long a, long long b)
word_type notrace __cmpdi2(long long a, long long b)
{
	const DWunion au = {
		.ll = a
Loading