diff options
author | Martin Jansa <Martin.Jansa@gmail.com> | 2010-07-21 11:03:25 +0200 |
---|---|---|
committer | Martin Jansa <Martin.Jansa@gmail.com> | 2010-07-22 22:03:20 +0200 |
commit | 511365a27aa69983c0bc2206d54a5b45a63a8ebb (patch) | |
tree | 4d236f225b8eb16cb74ed73e0e6f9c0fe5e75466 /recipes/linux/linux-openmoko-2.6.32 | |
parent | 0efc37504d3552c5f8c15d99ad3d89379ffec617 (diff) |
linux-openmoko-2.6.32: update stable patch to 2.6.32.16, rebase some patches and add possible WS fix
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.32')
8 files changed, 187 insertions, 221 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch b/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch new file mode 100644 index 0000000000..ac1efaec25 --- /dev/null +++ b/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch @@ -0,0 +1,52 @@ +From 6d97e1b1c2434fb769be7a72813efd11925225a9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Sun, 6 Jun 2010 03:28:43 +0200 +Subject: [PATCH 03/22] add noinline and noclone attributes to naked functions + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + include/linux/compiler-gcc.h | 11 ++++++++++- + include/linux/compiler-gcc4.h | 2 ++ + 2 files changed, 12 insertions(+), 1 deletions(-) + +diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h +index a3ed7cb..132a651 100644 +--- a/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -58,8 +58,12 @@ + * naked functions because then mcount is called without stack and frame pointer + * being set up and there is no chance to restore the lr register to the value + * before mcount was called. ++ * ++ * The asm() bodies of naked functions often depend on standard calling conventions, ++ * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce ++ * this, so we must do so ourselves. See GCC PR44290. + */ +-#define __naked __attribute__((naked)) notrace ++#define __naked __attribute__((naked)) noinline __noclone notrace + + #define __noreturn __attribute__((noreturn)) + +@@ -84,3 +88,8 @@ + #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) + #define gcc_header(x) _gcc_header(x) + #include gcc_header(__GNUC__) ++ ++#if !defined(__noclone) ++#define __noclone /* not needed */ ++#endif ++ +diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h +index 450fa59..cd5932a 100644 +--- a/include/linux/compiler-gcc4.h ++++ b/include/linux/compiler-gcc4.h +@@ -36,4 +36,6 @@ + the kernel context */ + #define __cold __attribute__((__cold__)) + ++/* Mark a function definition as prohibited from being cloned. */ ++#define __noclone __attribute__((__noclone__)) + #endif +-- +1.7.1.1 + diff --git a/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch b/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch deleted file mode 100644 index 103c06c886..0000000000 --- a/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 7e4a1fee4f08ef7ccedd4706b4890afc71f37dc4 Mon Sep 17 00:00:00 2001 -From: Martin Jansa <Martin.Jansa@gmail.com> -Date: Mon, 17 May 2010 12:41:06 +0200 -Subject: [PATCH 06/14] gta02 defconfigs, enable LEDS_S3C24XX and dummy battery driver - ---- - arch/arm/configs/gta02_defconfig | 2 +- - arch/arm/configs/gta02_drm_defconfig | 10 +++++----- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/configs/gta02_defconfig b/arch/arm/configs/gta02_defconfig -index 73d26ba..55832ac 100644 ---- a/arch/arm/configs/gta02_defconfig -+++ b/arch/arm/configs/gta02_defconfig -@@ -1635,7 +1635,7 @@ CONFIG_LEDS_CLASS=y - # - # LED drivers - # --# CONFIG_LEDS_S3C24XX is not set -+CONFIG_LEDS_S3C24XX=y - # CONFIG_LEDS_PCA9532 is not set - CONFIG_LEDS_GPIO=y - CONFIG_LEDS_GPIO_PLATFORM=y -diff --git a/arch/arm/configs/gta02_drm_defconfig b/arch/arm/configs/gta02_drm_defconfig -index 05aa130..62c1ee4 100644 ---- a/arch/arm/configs/gta02_drm_defconfig -+++ b/arch/arm/configs/gta02_drm_defconfig -@@ -1,7 +1,7 @@ - # - # Automatically generated make config: don't edit --# Linux kernel version: 2.6.32.11 --# Sun Apr 11 14:20:07 2010 -+# Linux kernel version: 2.6.32.13 -+# Mon May 17 14:13:35 2010 - # - CONFIG_ARM=y - CONFIG_HAVE_PWM=y -@@ -1233,7 +1233,7 @@ CONFIG_POWER_SUPPLY=y - CONFIG_CHARGER_PCF50633=y - CONFIG_BATTERY_BQ27000_HDQ=y - CONFIG_HDQ_GPIO_BITBANG=y --# CONFIG_BATTERY_PLATFORM is not set -+CONFIG_BATTERY_PLATFORM=y - # CONFIG_HWMON is not set - # CONFIG_THERMAL is not set - CONFIG_WATCHDOG=y -@@ -1681,14 +1681,14 @@ CONFIG_LEDS_CLASS=y - # - # LED drivers - # --# CONFIG_LEDS_S3C24XX is not set -+CONFIG_LEDS_S3C24XX=y - # CONFIG_LEDS_PCA9532 is not set - CONFIG_LEDS_GPIO=y - CONFIG_LEDS_GPIO_PLATFORM=y - # CONFIG_LEDS_LP3944 is not set - # CONFIG_LEDS_PCA955X is not set - # CONFIG_LEDS_DAC124S085 is not set --# CONFIG_LEDS_PWM is not set -+CONFIG_LEDS_PWM=y - # CONFIG_LEDS_BD2802 is not set - - # --- -1.7.1 - diff --git a/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch b/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch new file mode 100644 index 0000000000..e96a87d290 --- /dev/null +++ b/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch @@ -0,0 +1,64 @@ +From 99ce90618a47cdc8c373838b7ee04348cc21d303 Mon Sep 17 00:00:00 2001 +From: Thibaut Girka <thib@sitedethib.com> +Date: Wed, 21 Jul 2010 09:40:29 +0200 +Subject: [PATCH 16/23] jbt6k74: fix WS + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> +--- + drivers/video/backlight/jbt6k74.c | 15 +++++++++++---- + 1 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c +index 56a3e3a..4db021f 100644 +--- a/drivers/video/backlight/jbt6k74.c ++++ b/drivers/video/backlight/jbt6k74.c +@@ -268,8 +268,7 @@ static int jbt_off_to_normal(struct jbt_info *jbt) + + gpio_set_value_cansleep(pdata->gpio_reset, 1); + ret = regulator_bulk_enable(ARRAY_SIZE(jbt->supplies), jbt->supplies); +- +- mdelay(120); ++ mdelay(200); + + /* three times command zero */ + ret |= jbt_reg_write_nodata(jbt, 0x00); +@@ -282,10 +281,16 @@ static int jbt_off_to_normal(struct jbt_info *jbt) + /* deep standby out */ + ret |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x11); + mdelay(1); ++ if (ret != 0) ++ printk (KERN_ERR "Ignored ret value:%i",ret); ++ + ret |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28); + + /* (re)initialize register set */ + ret |= jbt_init_regs(jbt); ++ if (ret != 0) ++ printk (KERN_ERR "Ignored ret value2:%i",ret); ++ + + /* Make sure we are 120 ms after SLEEP_OUT */ + if (time_before(jiffies, jbt->next_sleep)) +@@ -644,7 +649,7 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power) + struct jbt_info *jbt = dev_get_drvdata(&ld->dev); + + jbt->blank_mode = power; +- cancel_rearming_delayed_work(&jbt->blank_work); ++ //cancel_rearming_delayed_work(&jbt->blank_work); + + switch (power) { + case FB_BLANK_UNBLANK: +@@ -658,7 +663,9 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power) + break; + case FB_BLANK_POWERDOWN: + dev_dbg(&jbt->spi->dev, "powerdown\n"); +- ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); ++ //ret = schedule_delayed_work(&jbt->blank_work, HZ); ++ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF); ++ ret = 1; + break; + default: + break; +-- +1.7.1.1 + diff --git a/recipes/linux/linux-openmoko-2.6.32/touchscreen_ignoreunexpectedintr29.patch b/recipes/linux/linux-openmoko-2.6.32/0017-s3c2410_ts-ignore-unexpected-interrupts.patch index cb99dd889d..0da1261d39 100644 --- a/recipes/linux/linux-openmoko-2.6.32/touchscreen_ignoreunexpectedintr29.patch +++ b/recipes/linux/linux-openmoko-2.6.32/0017-s3c2410_ts-ignore-unexpected-interrupts.patch @@ -1,5 +1,14 @@ +From fd25a512062b198af666bbdab805e8d6b51ed166 Mon Sep 17 00:00:00 2001 +From: Gennady Kupava <gb@bsdmn.com> +Date: Sun, 27 Jun 2010 10:01:54 +0200 +Subject: [PATCH 17/22] s3c2410_ts: ignore unexpected interrupts + +--- + drivers/input/touchscreen/s3c2410_ts.c | 30 +++++++++++++++++++++++++++++- + 1 files changed, 29 insertions(+), 1 deletions(-) + diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c -index bcfdd00..73994ff 100644 +index 97def9d..fd0b7d4 100644 --- a/drivers/input/touchscreen/s3c2410_ts.c +++ b/drivers/input/touchscreen/s3c2410_ts.c @@ -47,6 +47,9 @@ @@ -12,7 +21,7 @@ index bcfdd00..73994ff 100644 */ #include <linux/errno.h> -@@ -118,10 +121,15 @@ struct s3c2410ts { +@@ -120,10 +123,15 @@ struct s3c2410ts { struct kfifo *event_fifo; struct s3c_adc_client *adc_client; unsigned adc_selected; @@ -28,7 +37,7 @@ index bcfdd00..73994ff 100644 static void __iomem *base_addr; /* -@@ -280,6 +288,19 @@ static irqreturn_t stylus_updown(int irq, void *dev_id) +@@ -282,6 +290,19 @@ static irqreturn_t stylus_updown(int irq, void *dev_id) ts.is_down = !(data0 & S3C2410_ADCDAT0_UPDOWN) && !(data1 & S3C2410_ADCDAT0_UPDOWN); @@ -48,7 +57,7 @@ index bcfdd00..73994ff 100644 event_type = ts.is_down ? 'D' : 'U'; if (unlikely(__kfifo_put(ts.event_fifo, (unsigned char *)&event_type, -@@ -289,8 +310,10 @@ static irqreturn_t stylus_updown(int irq, void *dev_id) +@@ -291,8 +312,10 @@ static irqreturn_t stylus_updown(int irq, void *dev_id) if (ts.is_down) s3c2410_ts_start_adc_conversion(); @@ -60,7 +69,7 @@ index bcfdd00..73994ff 100644 mod_timer(&event_send_timer, jiffies + 1); -@@ -325,6 +348,7 @@ static void stylus_adc_action(unsigned p0, unsigned p1, unsigned *conv_left) +@@ -327,6 +350,7 @@ static void stylus_adc_action(struct s3c_adc_client *client, unsigned p0, unsign case -1: /* Too much noise. Ignore the event. */ ts_filter_chain_clear(ts.chain); @@ -68,7 +77,7 @@ index bcfdd00..73994ff 100644 writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC); return; }; -@@ -334,6 +358,7 @@ static void stylus_adc_action(unsigned p0, unsigned p1, unsigned *conv_left) +@@ -336,6 +360,7 @@ static void stylus_adc_action(struct s3c_adc_client *client, unsigned p0, unsign /* This will only happen if we have a bug. */ TSPRINTK("FIFO full\n"); @@ -76,7 +85,7 @@ index bcfdd00..73994ff 100644 writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC); mod_timer(&event_send_timer, jiffies + 1); -@@ -371,6 +396,7 @@ static int __init s3c2410ts_probe(struct platform_device *pdev) +@@ -373,6 +398,7 @@ static int __init s3c2410ts_probe(struct platform_device *pdev) if (!strcmp(pdev->name, "s3c2410-ts")) s3c2410_ts_connect(); @@ -84,7 +93,7 @@ index bcfdd00..73994ff 100644 writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC); /* Initialise input stuff */ -@@ -481,6 +507,7 @@ static int s3c2410ts_remove(struct platform_device *pdev) +@@ -482,6 +508,7 @@ static int s3c2410ts_remove(struct platform_device *pdev) static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state) { @@ -92,7 +101,7 @@ index bcfdd00..73994ff 100644 writel(TSC_SLEEP, base_addr + S3C2410_ADCTSC); writel(readl(base_addr + S3C2410_ADCCON) | S3C2410_ADCCON_STDBM, base_addr + S3C2410_ADCCON); -@@ -492,6 +519,7 @@ static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state) +@@ -493,6 +520,7 @@ static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state) static int s3c2410ts_resume(struct platform_device *pdev) { ts_filter_chain_clear(ts.chain); @@ -100,3 +109,6 @@ index bcfdd00..73994ff 100644 enable_irq(IRQ_TC); writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC); +-- +1.7.1.1 + diff --git a/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch b/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch new file mode 100644 index 0000000000..4888b94cd5 --- /dev/null +++ b/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch @@ -0,0 +1,36 @@ +From 9615f587ce8ac94732b6473a44d776473c120af6 Mon Sep 17 00:00:00 2001 +From: Thibaut Girka <thib@sitedethib.com> +Date: Fri, 25 Jun 2010 20:17:18 +0200 +Subject: [PATCH 18/22] glamo-core: initialize engine states as disabled + +This should fix random init failures such as white screen on boot. +--- + drivers/mfd/glamo/glamo-core.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c +index 33a7a59..f6674f4 100644 +--- a/drivers/mfd/glamo/glamo-core.c ++++ b/drivers/mfd/glamo/glamo-core.c +@@ -916,7 +916,7 @@ static int __devinit glamo_supported(struct glamo_core *glamo) + + static int __devinit glamo_probe(struct platform_device *pdev) + { +- int ret = 0, irq, irq_base; ++ int ret = 0, n, irq, irq_base; + struct glamo_core *glamo; + struct resource *mem; + +@@ -924,6 +924,9 @@ static int __devinit glamo_probe(struct platform_device *pdev) + if (!glamo) + return -ENOMEM; + ++ for (n = 0; n < __NUM_GLAMO_ENGINES; n++) ++ glamo->engine_state[n] = GLAMO_ENGINE_DISABLED; ++ + spin_lock_init(&glamo->lock); + + glamo->pdev = pdev; +-- +1.7.1.1 + diff --git a/recipes/linux/linux-openmoko-2.6.32/hs-jack.patch b/recipes/linux/linux-openmoko-2.6.32/0019-wm8753-use-snd_soc_jack-on-neo1973.patch index c92c3f6481..c3e3d02231 100644 --- a/recipes/linux/linux-openmoko-2.6.32/hs-jack.patch +++ b/recipes/linux/linux-openmoko-2.6.32/0019-wm8753-use-snd_soc_jack-on-neo1973.patch @@ -1,3 +1,12 @@ +From 261e2f00048ea8bfd5c261242c263e5a55401d64 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen <lars@metafoo.de> +Date: Wed, 7 Jul 2010 15:29:33 +0200 +Subject: [PATCH 19/22] wm8753: use snd_soc_jack on neo1973 + +--- + sound/soc/s3c24xx/neo1973_wm8753.c | 46 ++++++++++++++++++++++++++++++++++++ + 1 files changed, 46 insertions(+), 0 deletions(-) + diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c index 5cc1ef2..643dae3 100644 --- a/sound/soc/s3c24xx/neo1973_wm8753.c @@ -83,3 +92,6 @@ index 5cc1ef2..643dae3 100644 platform_device_unregister(neo1973_snd_device); if (machine_is_neo1973_gta01()) +-- +1.7.1.1 + diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch b/recipes/linux/linux-openmoko-2.6.32/0020-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch index 8ccf940c6c..71b2dd4ca2 100644 --- a/recipes/linux/linux-openmoko-2.6.32/0001-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch +++ b/recipes/linux/linux-openmoko-2.6.32/0020-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch @@ -1,7 +1,7 @@ -From 135a829c2fe551a7418696138df68eefad5a9b39 Mon Sep 17 00:00:00 2001 +From 9a8375f9f03770c85e635fc5dbde7124efb66154 Mon Sep 17 00:00:00 2001 From: Thomas White <taw@bitwiz.org.uk> Date: Thu, 26 Nov 2009 08:55:33 +0300 -Subject: [PATCH] mfd: glamo: Enable FIFO stage for the LCD engine's memory access +Subject: [PATCH 20/22] mfd: glamo: Enable FIFO stage for the LCD engine's memory access By avoiding conflicts of memory access inside Glamo, this doubles the speed of internal memory access. diff --git a/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch b/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch deleted file mode 100644 index 110a13572a..0000000000 --- a/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 583c7d937789398cb6e37989ef91cf96c16da204 Mon Sep 17 00:00:00 2001 -From: Khem Raj <raj.khem@gmail.com> -Date: Sun, 6 Jun 2010 03:28:43 +0200 -Subject: [PATCH] add noinline and noclone attributes to naked functions - -Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> ---- - arch/arm/mm/copypage-feroceon.c | 4 ++-- - arch/arm/mm/copypage-v4wb.c | 4 ++-- - arch/arm/mm/copypage-v4wt.c | 4 ++-- - arch/arm/mm/copypage-xsc3.c | 4 ++-- - include/linux/compiler-gcc.h | 11 ++++++++++- - include/linux/compiler-gcc4.h | 2 ++ - 6 files changed, 20 insertions(+), 9 deletions(-) - -diff --git a/arch/arm/mm/copypage-feroceon.c b/arch/arm/mm/copypage-feroceon.c -index 70997d5..dd9598b 100644 ---- a/arch/arm/mm/copypage-feroceon.c -+++ b/arch/arm/mm/copypage-feroceon.c -@@ -18,7 +18,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom) - { - asm("\ - stmfd sp!, {r4-r9, lr} \n\ -- mov ip, %0 \n\ -+ mov ip, %2 \n\ - 1: mov lr, r1 \n\ - ldmia r1!, {r2 - r9} \n\ - pld [lr, #32] \n\ -@@ -64,7 +64,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom) - mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ - ldmfd sp!, {r4-r9, pc}" - : -- : "I" (PAGE_SIZE)); -+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE)); - } - - void feroceon_copy_user_highpage(struct page *to, struct page *from, -diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c -index 9ab0984..7bc0ac7 100644 ---- a/arch/arm/mm/copypage-v4wb.c -+++ b/arch/arm/mm/copypage-v4wb.c -@@ -27,7 +27,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom) - { - asm("\ - stmfd sp!, {r4, lr} @ 2\n\ -- mov r2, %0 @ 1\n\ -+ mov r2, %2 @ 1\n\ - ldmia r1!, {r3, r4, ip, lr} @ 4\n\ - 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\ - stmia r0!, {r3, r4, ip, lr} @ 4\n\ -@@ -44,7 +44,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom) - mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\ - ldmfd sp!, {r4, pc} @ 3" - : -- : "I" (PAGE_SIZE / 64)); -+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64)); - } - - void v4wb_copy_user_highpage(struct page *to, struct page *from, -diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c -index 300efaf..35bf609 100644 ---- a/arch/arm/mm/copypage-v4wt.c -+++ b/arch/arm/mm/copypage-v4wt.c -@@ -25,7 +25,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom) - { - asm("\ - stmfd sp!, {r4, lr} @ 2\n\ -- mov r2, %0 @ 1\n\ -+ mov r2, %2 @ 1\n\ - ldmia r1!, {r3, r4, ip, lr} @ 4\n\ - 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\ - ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\ -@@ -40,7 +40,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom) - mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\ - ldmfd sp!, {r4, pc} @ 3" - : -- : "I" (PAGE_SIZE / 64)); -+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64)); - } - - void v4wt_copy_user_highpage(struct page *to, struct page *from, -diff --git a/arch/arm/mm/copypage-xsc3.c b/arch/arm/mm/copypage-xsc3.c -index bc4525f..27dc363 100644 ---- a/arch/arm/mm/copypage-xsc3.c -+++ b/arch/arm/mm/copypage-xsc3.c -@@ -34,7 +34,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom) - { - asm("\ - stmfd sp!, {r4, r5, lr} \n\ -- mov lr, %0 \n\ -+ mov lr, %2 \n\ - \n\ - pld [r1, #0] \n\ - pld [r1, #32] \n\ -@@ -67,7 +67,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom) - \n\ - ldmfd sp!, {r4, r5, pc}" - : -- : "I" (PAGE_SIZE / 64 - 1)); -+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1)); - } - - void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, -diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h -index a3ed7cb..132a651 100644 ---- a/include/linux/compiler-gcc.h -+++ b/include/linux/compiler-gcc.h -@@ -58,8 +58,12 @@ - * naked functions because then mcount is called without stack and frame pointer - * being set up and there is no chance to restore the lr register to the value - * before mcount was called. -+ * -+ * The asm() bodies of naked functions often depend on standard calling conventions, -+ * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce -+ * this, so we must do so ourselves. See GCC PR44290. - */ --#define __naked __attribute__((naked)) notrace -+#define __naked __attribute__((naked)) noinline __noclone notrace - - #define __noreturn __attribute__((noreturn)) - -@@ -84,3 +88,8 @@ - #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) - #define gcc_header(x) _gcc_header(x) - #include gcc_header(__GNUC__) -+ -+#if !defined(__noclone) -+#define __noclone /* not needed */ -+#endif -+ -diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h -index 450fa59..cd5932a 100644 ---- a/include/linux/compiler-gcc4.h -+++ b/include/linux/compiler-gcc4.h -@@ -36,4 +36,6 @@ - the kernel context */ - #define __cold __attribute__((__cold__)) - -+/* Mark a function definition as prohibited from being cloned. */ -+#define __noclone __attribute__((__noclone__)) - #endif --- -1.7.1 - |