All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Baron <jbaron@akamai.com>
To: "Martin Liška" <mliska@suse.cz>, "Michal Hocko" <mhocko@suse.cz>,
	"kbuild test robot" <fengguang.wu@intel.com>
Cc: kbuild-all@01.org, linux-mm@kvack.org,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [memcg:auto-latest 238/243] include/linux/compiler-gcc.h:243:38: error: impossible constraint in 'asm'
Date: Tue, 2 Aug 2016 11:18:20 -0400	[thread overview]
Message-ID: <57A0B9BC.2000201@akamai.com> (raw)
In-Reply-To: <35a0878d-84bd-ad93-8810-23c861ed464e@suse.cz>



On 08/01/2016 07:27 AM, Martin Li?ka wrote:
> On 08/01/2016 01:09 PM, Michal Hocko wrote:
>> [CC our gcc guy - I guess he has some theory for this]
>>
>> On Sun 31-07-16 14:11:25, Michal Hocko wrote:
>>> It seems that this has been already reported and Jason has noticed [1] that
>>> the problem is in the disabled optimizations:
>>>
>>> $ grep CRYPTO_DEV_UX500_DEBUG .config
>>> CONFIG_CRYPTO_DEV_UX500_DEBUG=y
>>>
>>> if I disable this particular option the code compiles just fine. I have
>>> no idea what is wrong about the code but it seems to depend on
>>> optimizations enabled which sounds a bit scrary...
>>>
>>> [1] http://www.spinics.net/lists/linux-mm/msg109590.html
>
> Hi.
>
> The difference is that w/o any optimization level, GCC doesn't make %c0 an
> intermediate integer operand [1] (see description of "i" constraint).
>
> If I change "i" to "X" (Any operand whatsoever is allowed.) and "%c0" to "%k0" I get following assembly:
>

hmmm...but the the '__jump_table' section there needs to be known
at build time. For example, the 'r3' field in the table is the
'key' which is used to identify the proper branches when we
go to update the branch directions. So this needs to be fixed
at build time...

Thanks,

-Jason

> cryp_enable_irq_src:
> 	@ args = 0, pretend = 0, frame = 48
> 	@ frame_needed = 1, uses_anonymous_args = 0
> 	push	{fp, lr}
> 	add	fp, sp, #4
> 	sub	sp, sp, #48
> 	str	r0, [fp, #-48]
> 	str	r1, [fp, #-52]
> 	ldr	r3, .L6
> 	str	r3, [fp, #-20]
> 	mov	r3, #1
> 	strb	r3, [fp, #-21]
> 	ldrb	r3, [fp, #-21]	@ zero_extendqisi2
> 	ldr	r2, [fp, #-20]
> 	add	r3, r2, r3
> 	.syntax divided
> @ 1607 "/home/marxin/Programming/testcases/asm.i" 1
> 	1:
> 	nop
> 	.pushsection __jump_table,  "aw"
> 	.word 1b, .L2, r3 # The operand is the register r3
> 	.popsection
> 	
> 	.arm
> 	.syntax unified
> 	mov	r3, #0
> 	b	.L3
> .L2:
>
> While using -O2 really make %c0 an intermediate operand:
>
> cryp_enable_irq_src:
> 	@ args = 0, pretend = 0, frame = 0
> 	@ frame_needed = 0, uses_anonymous_args = 0
> 	push	{r4, r5, r6, lr}
> 	mov	r5, r0
> 	mov	r4, r1
> 	.syntax divided
> @ 1607 "/home/marxin/Programming/testcases/asm.i" 1
> 	1:
> 	nop
> 	.pushsection __jump_table,  "aw"
> 	.word 1b, .L2, #.LANCHOR0+21  # The operand is the intermediate operand #.LANCHOR0+21
> 	.popsection
>
> Martin
>
> [1] https://gcc.gnu.org/onlinedocs/gcc/Simple-Constraints.html#Simple-Constraints
>
>>>
>>> On Sat 30-07-16 05:04:07, Wu Fengguang wrote:
>>>> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mhocko/mm.git auto-latest
>>>> head:   a7bf930624bb1d3368b71b79c5e3351b5d03aa9f
>>>> commit: 966a2c66863bb2d984b9b49aee271de502cf8747 [238/243] dynamic_debug: add jump label support
>>>> config: arm-allmodconfig (attached as .config)
>>>> compiler: arm-linux-gnueabi-gcc (Debian 5.4.0-6) 5.4.0 20160609
>>>> reproduce:
>>>>          wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
>>>>          chmod +x ~/bin/make.cross
>>>>          git checkout 966a2c66863bb2d984b9b49aee271de502cf8747
>>>>          # save the attached .config to linux build tree
>>>>          make.cross ARCH=arm
>>>>
>>>> All errors (new ones prefixed by >>):
>>>>
>>>>     In file included from include/linux/compiler.h:58:0,
>>>>                      from include/linux/linkage.h:4,
>>>>                      from include/linux/kernel.h:6,
>>>>                      from drivers/crypto/ux500/cryp/cryp_irq.c:11:
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_enable_irq_src':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>>> include/linux/compiler-gcc.h:243:38: error: impossible constraint in 'asm'
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_disable_irq_src':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>> --
>>>>     In file included from include/linux/compiler.h:58:0,
>>>>                      from include/linux/err.h:4,
>>>>                      from include/linux/clk.h:15,
>>>>                      from drivers/crypto/ux500/cryp/cryp_core.c:12:
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_interrupt_handler':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>>> include/linux/compiler-gcc.h:243:38: error: impossible constraint in 'asm'
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cfg_iv':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cfg_ivs':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'set_key':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cfg_keys':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_get_device_data':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_dma_out_callback':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_set_dma_transfer':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_dma_done':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     arch/arm/include/asm/jump_label.h: In function 'cryp_dma_write':
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>                                           ^
>>>>     arch/arm/include/asm/jump_label.h:13:2: note: in expansion of macro 'asm_volatile_goto'
>>>>       asm_volatile_goto("1:\n\t"
>>>>       ^
>>>>     include/linux/compiler-gcc.h:243:38: warning: asm operand 0 probably doesn't match constraints
>>>>      #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
>>>>
>>>> vim +/asm +243 include/linux/compiler-gcc.h
>>>>
>>>> a744fd17 Rasmus Villemoes 2015-11-05  227   * returning extra information in the low bits (but in that case the
>>>> a744fd17 Rasmus Villemoes 2015-11-05  228   * compiler should see some alignment anyway, when the return value is
>>>> a744fd17 Rasmus Villemoes 2015-11-05  229   * massaged by 'flags = ptr & 3; ptr &= ~3;').
>>>> a744fd17 Rasmus Villemoes 2015-11-05  230   */
>>>> a744fd17 Rasmus Villemoes 2015-11-05  231  #define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
>>>> a744fd17 Rasmus Villemoes 2015-11-05  232  #endif
>>>> a744fd17 Rasmus Villemoes 2015-11-05  233
>>>> cb984d10 Joe Perches      2015-06-25  234  /*
>>>> cb984d10 Joe Perches      2015-06-25  235   * GCC 'asm goto' miscompiles certain code sequences:
>>>> cb984d10 Joe Perches      2015-06-25  236   *
>>>> cb984d10 Joe Perches      2015-06-25  237   *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
>>>> cb984d10 Joe Perches      2015-06-25  238   *
>>>> cb984d10 Joe Perches      2015-06-25  239   * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
>>>> cb984d10 Joe Perches      2015-06-25  240   *
>>>> cb984d10 Joe Perches      2015-06-25  241   * (asm goto is automatically volatile - the naming reflects this.)
>>>> cb984d10 Joe Perches      2015-06-25  242   */
>>>> cb984d10 Joe Perches      2015-06-25 @243  #define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
>>>> cb984d10 Joe Perches      2015-06-25  244
>>>> cb984d10 Joe Perches      2015-06-25  245  #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
>>>> cb984d10 Joe Perches      2015-06-25  246  #if GCC_VERSION >= 40400
>>>> cb984d10 Joe Perches      2015-06-25  247  #define __HAVE_BUILTIN_BSWAP32__
>>>> cb984d10 Joe Perches      2015-06-25  248  #define __HAVE_BUILTIN_BSWAP64__
>>>> cb984d10 Joe Perches      2015-06-25  249  #endif
>>>> 8634de6d Josh Poimboeuf   2016-05-06  250  #if GCC_VERSION >= 40800
>>>> cb984d10 Joe Perches      2015-06-25  251  #define __HAVE_BUILTIN_BSWAP16__
>>>>
>>>> :::::: The code at line 243 was first introduced by commit
>>>> :::::: cb984d101b30eb7478d32df56a0023e4603cba7f compiler-gcc: integrate the various compiler-gcc[345].h files
>>>>
>>>> :::::: TO: Joe Perches <joe@perches.com>
>>>> :::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
>>>>
>>>> ---
>>>> 0-DAY kernel test infrastructure                Open Source Technology Center
>>>> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
>>>
>>>
>>>
>>> --
>>> Michal Hocko
>>> SUSE Labs
>>
>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2016-08-02 15:18 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-29 21:04 [memcg:auto-latest 238/243] include/linux/compiler-gcc.h:243:38: error: impossible constraint in 'asm' kbuild test robot
2016-07-31 12:11 ` Michal Hocko
2016-08-01 11:09   ` Michal Hocko
2016-08-01 11:27     ` Martin Liška
2016-08-01 12:41       ` oliver
2016-08-03  5:17         ` Balbir Singh
2016-08-02 15:18       ` Jason Baron [this message]
2016-08-01 15:00   ` Jason Baron
2016-08-01 15:29     ` Michal Hocko

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=57A0B9BC.2000201@akamai.com \
    --to=jbaron@akamai.com \
    --cc=akpm@linux-foundation.org \
    --cc=fengguang.wu@intel.com \
    --cc=kbuild-all@01.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.cz \
    --cc=mliska@suse.cz \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.