mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: linux-kernel@vger.kernel.org
Cc: Arnd Bergmann <arnd@arndb.de>,
	Steven Rostedt <rostedt@goodmis.org>,
	Nicolas Pitre <nico@linaro.org>,
	"Darrick J. Wong" <darrick.wong@oracle.com>,
	linux-xfs@vger.kernel.org, Dave Chinner <dchinner@redhat.com>,
	Brian Foster <bfoster@redhat.com>,
	Eric Sandeen <sandeen@sandeen.net>
Subject: [PATCH] [RFC] xfs: work around unlikely() profiler glitch
Date: Wed, 25 Jan 2017 15:08:10 +0100	[thread overview]
Message-ID: <20170125140821.2677725-1-arnd@arndb.de> (raw)

After a patch from Steven Rostedt to rework the profiling of
unlikely(), we get a couple of link errors in XFS on ARM:

fs/xfs/libxfs/xfs_bmap.o: In function `xfs_bmap_btalloc':
xfs_bmap.c:(.text.xfs_bmap_btalloc+0x8cc): undefined reference to `____ilog2_NaN'
xfs_bmap.c:(.text.xfs_bmap_btalloc+0xb34): undefined reference to `__aeabi_uldivmod'
xfs_bmap.c:(.text.xfs_bmap_btalloc+0xb7c): undefined reference to `__aeabi_uldivmod'

As I understand the problem, this is a result of the combination
of __builtin_constant_p() usage in three places: unlikely(),
xfs_bmap_btalloc(), and __div64_32(), where the latter attempts to use
__builtin_constant_p() to decide whether to either call an out-of-line
function for variable divisors or an optimized version for constant
divisors.

As I understand it, here we end up with a case where gcc has determined
that the argument is constant in some cases but variable in other cases,
and tries to split up the handling by implementing both paths and deciding
at runtime.

This seems to be related to the problem fixed in commit b33c8ff4431a
("tracing: Fix freak link error caused by branch tracer").

I don't know why exactly it goes wrong now, but we end up getting object
code emitted for the case that should have been eliminated after the
__builtin_constant_p() check. I don't think we'd ever run into the branches
to ____ilog2_NaN or __aeabi_uldivmod, but we get a link error anyway.

Fixes: d45ae1f7041a ("tracing: Process constants for (un)likely() profiler")i
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
Cc: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 fs/xfs/libxfs/xfs_bmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index d22f7930eb75..dca3ddd737d4 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -3629,7 +3629,7 @@ xfs_bmap_btalloc(
 		align = xfs_get_cowextsz_hint(ap->ip);
 	else if (xfs_alloc_is_userdata(ap->datatype))
 		align = xfs_get_extsz_hint(ap->ip);
-	if (unlikely(align)) {
+	if (unlikely_notrace(align)) {
 		error = xfs_bmap_extsize_align(mp, &ap->got, &ap->prev,
 						align, 0, ap->eof, 0, ap->conv,
 						&ap->offset, &ap->length);
-- 
2.9.0

             reply	other threads:[~2017-01-25 14:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-25 14:08 Arnd Bergmann [this message]
2017-01-25 15:09 ` Christoph Hellwig
2017-01-25 15:15   ` Arnd Bergmann
2017-01-25 16:24   ` Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170125140821.2677725-1-arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=dchinner@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=nico@linaro.org \
    --cc=rostedt@goodmis.org \
    --cc=sandeen@sandeen.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®