Re: [PATCH] mm/migrate: Mark unmap_and_move() "noinline" to avoid ICE in gcc 4.7.3

From: Lina Iyer
Date: Thu Apr 02 2015 - 17:53:12 EST


On Thu, Apr 02 2015 at 15:12 -0600, Kevin Hilman wrote:
On Thu, Apr 2, 2015 at 12:12 PM, Lina Iyer <lina.iyer@xxxxxxxxxx> wrote:
On Wed, Apr 01 2015 at 15:57 -0600, Kevin Hilman wrote:

Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> writes:

On Wed, 01 Apr 2015 10:47:49 +0100 Marc Zyngier <marc.zyngier@xxxxxxx>
wrote:

> -static int unmap_and_move(new_page_t get_new_page, free_page_t
> put_new_page,
> - unsigned long private, struct page *page, int
> force,
> - enum migrate_mode mode)
> +static noinline int unmap_and_move(new_page_t get_new_page,
> + free_page_t put_new_page,
> + unsigned long private, struct page
> *page,
> + int force, enum migrate_mode mode)
> {
> int rc = 0;
> int *result = NULL;
>

Ouch. That's really ugly. And on 32bit ARM, we end-up spilling half of
the parameters on the stack, which is not going to help performance
either (not that this would be useful on 32bit ARM anyway...).

Any chance you could make this dependent on some compiler detection
mechanism?


With my arm compiler (gcc-4.4.4) the patch makes no difference -
unmap_and_move() isn't being inlined anyway.

How does this look?

Kevin, could you please retest? I might have fat-fingered something...


Your patch on top of Geert's still compiles fine for me with gcc-4.7.3.
However, I'm not sure how specific we can be on the versions.

/me goes to test a few more compilers... OK...

ICE: 4.7.1, 4.7.3, 4.8.3
OK: 4.6.3, 4.9.2, 4.9.3

The diff below[2] on top of yours compiles fine here and at least covers
the compilers I *know* to trigger the ICE.


I see ICE on arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.7.4-2ubuntu1) 4.7.4


Thanks for checking. I'm assuming my patch fixes it for your since
that should catch any 4.7.x compiler.

Yes, thank you. This fixes it on 4.7.4

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/