• R/O
  • HTTP
  • SSH
  • HTTPS

linux-2.4.36: Commit

2.4.36-stable kernel tree


Commit MetaInfo

Revision3c8aaf1e38d4bd893e82c7b74837b15abe6b7d3a (tree)
Zeit2007-09-09 02:38:56
AutorWilly Tarreau <w@1wt....>
CommiterWilly Tarreau

Log Message

[PATCH] i386: do_test_wp_bit() must not be inlined

do_test_wp_bit() has a comment stating that it must not be inlined.
Unfortunately, the trick to prevent it from being inlined is not
reliable under gcc 4.x.

The simple fix consists in specifying the noinline attribute.
Tested and confirmed to produce the correct code for gcc versions
2.95.3, 3.3.6, 3.4.6, 4.0.2, 4.1.1 and 4.2.1.

Special thanks to Axel Reinhold and Richard Kojedzinszky for their
continuous feedback when trying to solve this issue.

Signed-off-by: Willy Tarreau <w@1wt.eu>

Ändern Zusammenfassung

Diff

--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -381,7 +381,7 @@ void __init paging_init(void)
381381 * This function cannot be __init, since exceptions don't work in that
382382 * section.
383383 */
384-static int do_test_wp_bit(unsigned long vaddr);
384+static int __attribute__((noinline)) do_test_wp_bit(unsigned long vaddr);
385385
386386 void __init test_wp_bit(void)
387387 {
@@ -561,8 +561,8 @@ void __init mem_init(void)
561561
562562 }
563563
564-/* Put this after the callers, so that it cannot be inlined */
565-static int do_test_wp_bit(unsigned long vaddr)
564+/* This function must not be inlined */
565+static int __attribute__((noinline)) do_test_wp_bit(unsigned long vaddr)
566566 {
567567 char tmp_reg;
568568 int flag;
Show on old repository browser