[PATCH v6 13/15] ARM: hotplug: Introduce dummy_cpu_kill
Nicolas Pitre
nicolas.pitre at linaro.org
Wed Feb 8 19:16:24 EST 2012
On Wed, 8 Feb 2012, Marc Zyngier wrote:
> Most platforms don't implement their cpu_kill method.
> Some because they simply don't offer the capability, some other
> because nobody cared enough to implement the necessary code.
>
> Either way, this code is duplicated all over the place. Implement
> a global dummy_cpu_kill method and convert all SMP (but shmobile)
> to use it. Hopefully the "dummy" prefix will be an incentive
> for people to do the right thing.
>
> Cc: Arnd Bergmann <arnd at arndb.de>
> Cc: Colin Cross <ccross at android.com>
> Cc: David Brown <davidb at codeaurora.org>
> Cc: Kukjin Kim <kgene.kim at samsung.com>
> Cc: Linus Walleij <linus.walleij at stericsson.com>
> Cc: Magnus Damm <magnus.damm at gmail.com>
> Cc: Nicolas Pitre <nico at fluxnic.net>
> Cc: Paul Mundt <lethal at linux-sh.org>
> Cc: Santosh Shilimkar <santosh.shilimkar at ti.com>
> Cc: Stephen Warren <swarren at nvidia.com>
> Cc: Shawn Guo <shawn.guo at linaro.org>
> Cc: Rob Herring <rob.herring at calxeda.com>
> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
What avout this instead:
int __weak __cpuinit platform_cpu_kill(unsigned int cpu)
{
if (!soc_smp_ops)
return 0;
if (!soc_smp_ops->cpu_kill)
return 1;
return soc_smp_ops->cpu_kill(cpu);
}
and get rid of the dummy handler entirely?
> ---
> arch/arm/include/asm/smp_plat.h | 3 +++
> arch/arm/kernel/smp.c | 5 +++++
> arch/arm/mach-exynos/common.h | 1 -
> arch/arm/mach-exynos/hotplug.c | 5 -----
> arch/arm/mach-exynos/platsmp.c | 2 +-
> arch/arm/mach-highbank/core.h | 1 -
> arch/arm/mach-highbank/hotplug.c | 5 -----
> arch/arm/mach-highbank/platsmp.c | 3 ++-
> arch/arm/mach-imx/hotplug.c | 5 -----
> arch/arm/mach-imx/platsmp.c | 3 ++-
> arch/arm/mach-msm/core.h | 1 -
> arch/arm/mach-msm/hotplug.c | 5 -----
> arch/arm/mach-msm/platsmp.c | 2 +-
> arch/arm/mach-omap2/common.h | 1 -
> arch/arm/mach-omap2/omap-hotplug.c | 5 -----
> arch/arm/mach-omap2/omap-smp.c | 3 ++-
> arch/arm/mach-realview/core.h | 1 -
> arch/arm/mach-realview/hotplug.c | 5 -----
> arch/arm/mach-realview/platsmp.c | 3 ++-
> arch/arm/mach-tegra/common.h | 1 -
> arch/arm/mach-tegra/hotplug.c | 5 -----
> arch/arm/mach-tegra/platsmp.c | 3 ++-
> arch/arm/mach-ux500/hotplug.c | 5 -----
> arch/arm/mach-ux500/include/mach/setup.h | 1 -
> arch/arm/mach-ux500/platsmp.c | 2 +-
> arch/arm/mach-vexpress/core.h | 1 -
> arch/arm/mach-vexpress/hotplug.c | 5 -----
> arch/arm/mach-vexpress/platsmp.c | 3 ++-
> arch/arm/plat-mxc/include/mach/common.h | 1 -
> 29 files changed, 23 insertions(+), 63 deletions(-)
>
> diff --git a/arch/arm/include/asm/smp_plat.h b/arch/arm/include/asm/smp_plat.h
> index 558d6c8..8b2ffe2 100644
> --- a/arch/arm/include/asm/smp_plat.h
> +++ b/arch/arm/include/asm/smp_plat.h
> @@ -49,4 +49,7 @@ static inline int cache_ops_need_broadcast(void)
> extern int __cpu_logical_map[];
> #define cpu_logical_map(cpu) __cpu_logical_map[cpu]
>
> +/* Only use this if your platform doesn't have any CPU PM */
> +extern int dummy_cpu_kill(unsigned int cpu);
> +
> #endif
> diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
> index 5321909..eabd6b8 100644
> --- a/arch/arm/kernel/smp.c
> +++ b/arch/arm/kernel/smp.c
> @@ -179,6 +179,11 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
> #ifdef CONFIG_HOTPLUG_CPU
> static void percpu_timer_stop(void);
>
> +int dummy_cpu_kill(unsigned int cpu)
> +{
> + return 1;
> +}
> +
> static int __cpuinit platform_cpu_kill(unsigned int cpu)
> {
> if (soc_smp_ops && soc_smp_ops->cpu_kill)
> diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
> index cd37455..9046df8 100644
> --- a/arch/arm/mach-exynos/common.h
> +++ b/arch/arm/mach-exynos/common.h
> @@ -31,7 +31,6 @@ extern struct arm_soc_smp_init_ops exynos4_soc_smp_init_ops;
> extern struct arm_soc_smp_ops exynos4_soc_smp_ops;
> extern struct arm_soc_desc exynos4_soc_desc;
>
> -extern int exynos4_cpu_kill(unsigned int cpu);
> extern void exynos4_cpu_die(unsigned int cpu);
> extern int exynos4_cpu_disable(unsigned int cpu);
>
> diff --git a/arch/arm/mach-exynos/hotplug.c b/arch/arm/mach-exynos/hotplug.c
> index 66e202d..1235df1 100644
> --- a/arch/arm/mach-exynos/hotplug.c
> +++ b/arch/arm/mach-exynos/hotplug.c
> @@ -96,11 +96,6 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
> }
> }
>
> -int exynos4_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
> index 9c6e322..b263e63 100644
> --- a/arch/arm/mach-exynos/platsmp.c
> +++ b/arch/arm/mach-exynos/platsmp.c
> @@ -207,7 +207,7 @@ struct arm_soc_smp_ops exynos4_soc_smp_ops __initdata = {
> .smp_secondary_init = exynos4_secondary_init,
> .smp_boot_secondary = exynos4_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = exynos4_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = exynos4_cpu_die,
> .cpu_disable = exynos4_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-highbank/core.h b/arch/arm/mach-highbank/core.h
> index d1fd356..115793e 100644
> --- a/arch/arm/mach-highbank/core.h
> +++ b/arch/arm/mach-highbank/core.h
> @@ -10,7 +10,6 @@ extern void highbank_lluart_map_io(void);
> static inline void highbank_lluart_map_io(void) {}
> #endif
>
> -extern int highbank_cpu_kill(unsigned int cpu);
> extern void highbank_cpu_die(unsigned int cpu);
> extern int highbank_cpu_disable(unsigned int cpu);
>
> diff --git a/arch/arm/mach-highbank/hotplug.c b/arch/arm/mach-highbank/hotplug.c
> index 7c25d49..6fda597 100644
> --- a/arch/arm/mach-highbank/hotplug.c
> +++ b/arch/arm/mach-highbank/hotplug.c
> @@ -24,11 +24,6 @@
>
> extern void secondary_startup(void);
>
> -int highbank_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-highbank/platsmp.c b/arch/arm/mach-highbank/platsmp.c
> index 24162a7..b90ad83 100644
> --- a/arch/arm/mach-highbank/platsmp.c
> +++ b/arch/arm/mach-highbank/platsmp.c
> @@ -18,6 +18,7 @@
> #include <linux/smp.h>
> #include <linux/io.h>
>
> +#include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
> #include <asm/hardware/gic.h>
>
> @@ -86,7 +87,7 @@ struct arm_soc_smp_ops highbank_soc_smp_ops __initdata = {
> .smp_secondary_init = highbank_secondary_init,
> .smp_boot_secondary = highbank_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = highbank_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = highbank_cpu_die,
> .cpu_disable = highbank_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c
> index 474b11d..7e75f8e 100644
> --- a/arch/arm/mach-imx/hotplug.c
> +++ b/arch/arm/mach-imx/hotplug.c
> @@ -14,11 +14,6 @@
> #include <asm/cacheflush.h>
> #include <mach/common.h>
>
> -int imx_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c
> index ae55931..64d9c9e 100644
> --- a/arch/arm/mach-imx/platsmp.c
> +++ b/arch/arm/mach-imx/platsmp.c
> @@ -13,6 +13,7 @@
> #include <linux/init.h>
> #include <linux/smp.h>
> #include <asm/page.h>
> +#include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
> #include <asm/soc.h>
> #include <asm/hardware/gic.h>
> @@ -94,7 +95,7 @@ struct arm_soc_smp_ops imx_soc_smp_ops __initdata = {
> .smp_secondary_init = imx_secondary_init,
> .smp_boot_secondary = imx_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = imx_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = imx_cpu_die,
> .cpu_disable = imx_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-msm/core.h b/arch/arm/mach-msm/core.h
> index e8394dd..533130d 100644
> --- a/arch/arm/mach-msm/core.h
> +++ b/arch/arm/mach-msm/core.h
> @@ -4,6 +4,5 @@ extern struct arm_soc_smp_init_ops msm_soc_smp_init_ops;
> extern struct arm_soc_smp_ops msm_soc_smp_ops;
> extern struct arm_soc_desc msm_soc_desc;
>
> -extern int msm_cpu_kill(unsigned int cpu);
> extern void msm_cpu_die(unsigned int cpu);
> extern int msm_cpu_disable(unsigned int cpu);
> diff --git a/arch/arm/mach-msm/hotplug.c b/arch/arm/mach-msm/hotplug.c
> index 6ba3602..5f09e5a1 100644
> --- a/arch/arm/mach-msm/hotplug.c
> +++ b/arch/arm/mach-msm/hotplug.c
> @@ -59,11 +59,6 @@ static inline void platform_do_lowpower(unsigned int cpu)
> }
> }
>
> -int msm_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
> index 8b56ae1..0664a91 100644
> --- a/arch/arm/mach-msm/platsmp.c
> +++ b/arch/arm/mach-msm/platsmp.c
> @@ -183,7 +183,7 @@ struct arm_soc_smp_ops msm_soc_smp_ops __initdata = {
> .smp_secondary_init = msm_secondary_init,
> .smp_boot_secondary = msm_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = msm_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = msm_cpu_die,
> .cpu_disable = msm_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
> index 961b79a..e0ae233 100644
> --- a/arch/arm/mach-omap2/common.h
> +++ b/arch/arm/mach-omap2/common.h
> @@ -195,7 +195,6 @@ extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
> extern void omap_auxcoreboot_addr(u32 cpu_addr);
> extern u32 omap_read_auxcoreboot0(void);
>
> -extern int omap4_cpu_kill(unsigned int cpu);
> extern void omap4_cpu_die(unsigned int cpu);
> extern int omap4_cpu_disable(unsigned int cpu);
>
> diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c
> index e794f4b..d3d01fe 100644
> --- a/arch/arm/mach-omap2/omap-hotplug.c
> +++ b/arch/arm/mach-omap2/omap-hotplug.c
> @@ -24,11 +24,6 @@
>
> #include "powerdomain.h"
>
> -int omap4_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> * Called with IRQs disabled
> diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
> index 4d39fd0..2c97b14 100644
> --- a/arch/arm/mach-omap2/omap-smp.c
> +++ b/arch/arm/mach-omap2/omap-smp.c
> @@ -22,6 +22,7 @@
>
> #include <asm/cacheflush.h>
> #include <asm/hardware/gic.h>
> +#include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
> #include <asm/soc.h>
> #include <mach/hardware.h>
> @@ -191,7 +192,7 @@ struct arm_soc_smp_ops omap4_soc_smp_ops __initdata = {
> .smp_secondary_init = omap4_secondary_init,
> .smp_boot_secondary = omap4_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = omap4_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = omap4_cpu_die,
> .cpu_disable = omap4_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h
> index a23caa3..6cdfdf9 100644
> --- a/arch/arm/mach-realview/core.h
> +++ b/arch/arm/mach-realview/core.h
> @@ -71,7 +71,6 @@ extern struct arm_soc_desc realview_soc_desc;
> extern struct arm_soc_smp_init_ops realview_soc_smp_init_ops;
> extern struct arm_soc_smp_ops realview_soc_smp_ops;
>
> -extern int realview_cpu_kill(unsigned int cpu);
> extern void realview_cpu_die(unsigned int cpu);
> extern int realview_cpu_disable(unsigned int cpu);
>
> diff --git a/arch/arm/mach-realview/hotplug.c b/arch/arm/mach-realview/hotplug.c
> index ba4e2a86..7f28a56 100644
> --- a/arch/arm/mach-realview/hotplug.c
> +++ b/arch/arm/mach-realview/hotplug.c
> @@ -88,11 +88,6 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
> }
> }
>
> -int realview_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c
> index 8e4a865..ebe975e 100644
> --- a/arch/arm/mach-realview/platsmp.c
> +++ b/arch/arm/mach-realview/platsmp.c
> @@ -16,6 +16,7 @@
> #include <mach/hardware.h>
> #include <asm/hardware/gic.h>
> #include <asm/mach-types.h>
> +#include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
> #include <asm/soc.h>
>
> @@ -88,7 +89,7 @@ struct arm_soc_smp_ops realview_soc_smp_ops __initdata = {
> .smp_secondary_init = versatile_secondary_init,
> .smp_boot_secondary = versatile_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = realview_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = realview_cpu_die,
> .cpu_disable = realview_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-tegra/common.h b/arch/arm/mach-tegra/common.h
> index e4c214d..c135700 100644
> --- a/arch/arm/mach-tegra/common.h
> +++ b/arch/arm/mach-tegra/common.h
> @@ -6,6 +6,5 @@ struct arm_soc_smp_ops;
> extern struct arm_soc_smp_init_ops tegra_soc_smp_init_ops;
> extern struct arm_soc_smp_ops tegra_soc_smp_ops;
>
> -extern int tegra_cpu_kill(unsigned int cpu);
> extern void tegra_cpu_die(unsigned int cpu);
> extern int tegra_cpu_disable(unsigned int cpu);
> diff --git a/arch/arm/mach-tegra/hotplug.c b/arch/arm/mach-tegra/hotplug.c
> index 7319f5f..51e8690 100644
> --- a/arch/arm/mach-tegra/hotplug.c
> +++ b/arch/arm/mach-tegra/hotplug.c
> @@ -86,11 +86,6 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
> }
> }
>
> -int tegra_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
> index 519b110..c31018e 100644
> --- a/arch/arm/mach-tegra/platsmp.c
> +++ b/arch/arm/mach-tegra/platsmp.c
> @@ -22,6 +22,7 @@
> #include <asm/cacheflush.h>
> #include <asm/hardware/gic.h>
> #include <asm/mach-types.h>
> +#include <asm/smp_plat.h>
> #include <asm/smp_scu.h>
> #include <asm/soc.h>
>
> @@ -144,7 +145,7 @@ struct arm_soc_smp_ops tegra_soc_smp_ops __initdata = {
> .smp_secondary_init = tegra_secondary_init,
> .smp_boot_secondary = tegra_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = tegra_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = tegra_cpu_die,
> .cpu_disable = tegra_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-ux500/hotplug.c b/arch/arm/mach-ux500/hotplug.c
> index ae1a8eb..1e86d5a 100644
> --- a/arch/arm/mach-ux500/hotplug.c
> +++ b/arch/arm/mach-ux500/hotplug.c
> @@ -36,11 +36,6 @@ static inline void platform_do_lowpower(unsigned int cpu)
> }
> }
>
> -int ux500_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h
> index e764530..72ba37d 100644
> --- a/arch/arm/mach-ux500/include/mach/setup.h
> +++ b/arch/arm/mach-ux500/include/mach/setup.h
> @@ -55,7 +55,6 @@ extern struct arm_soc_smp_init_ops ux500_soc_smp_init_ops;
> extern struct arm_soc_smp_ops ux500_soc_smp_ops;
> extern struct arm_soc_desc ux500_soc_desc;
>
> -extern int ux500_cpu_kill(unsigned int cpu);
> extern void ux500_cpu_die(unsigned int cpu);
> extern int ux500_cpu_disable(unsigned int cpu);
>
> diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c
> index fc72ce1..f105192 100644
> --- a/arch/arm/mach-ux500/platsmp.c
> +++ b/arch/arm/mach-ux500/platsmp.c
> @@ -185,7 +185,7 @@ struct arm_soc_smp_ops ux500_soc_smp_ops __initdata = {
> .smp_secondary_init = ux500_secondary_init,
> .smp_boot_secondary = ux500_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = ux500_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = ux500_cpu_die,
> .cpu_disable = ux500_cpu_disable,
> #endif
> diff --git a/arch/arm/mach-vexpress/core.h b/arch/arm/mach-vexpress/core.h
> index bd9065a..f072682 100644
> --- a/arch/arm/mach-vexpress/core.h
> +++ b/arch/arm/mach-vexpress/core.h
> @@ -24,6 +24,5 @@ struct arm_soc_smp_ops;
> extern struct arm_soc_smp_init_ops vexpress_soc_smp_init_ops;
> extern struct arm_soc_smp_ops vexpress_soc_smp_ops;
>
> -extern int vexpress_cpu_kill(unsigned int cpu);
> extern void vexpress_cpu_die(unsigned int cpu);
> extern int vexpress_cpu_disable(unsigned int cpu);
> diff --git a/arch/arm/mach-vexpress/hotplug.c b/arch/arm/mach-vexpress/hotplug.c
> index ac6d034..11d2c77 100644
> --- a/arch/arm/mach-vexpress/hotplug.c
> +++ b/arch/arm/mach-vexpress/hotplug.c
> @@ -84,11 +84,6 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
> }
> }
>
> -int vexpress_cpu_kill(unsigned int cpu)
> -{
> - return 1;
> -}
> -
> /*
> * platform-specific code to shutdown a CPU
> *
> diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c
> index aba765b..80ab030 100644
> --- a/arch/arm/mach-vexpress/platsmp.c
> +++ b/arch/arm/mach-vexpress/platsmp.c
> @@ -13,6 +13,7 @@
> #include <linux/smp.h>
> #include <linux/io.h>
>
> +#include <asm/smp_plat.h>
> #include <asm/soc.h>
>
> #include <mach/motherboard.h>
> @@ -59,7 +60,7 @@ struct arm_soc_smp_ops vexpress_soc_smp_ops __initdata = {
> .smp_secondary_init = versatile_secondary_init,
> .smp_boot_secondary = versatile_boot_secondary,
> #ifdef CONFIG_HOTPLUG_CPU
> - .cpu_kill = vexpress_cpu_kill,
> + .cpu_kill = dummy_cpu_kill,
> .cpu_die = vexpress_cpu_die,
> .cpu_disable = vexpress_cpu_disable,
> #endif
> diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h
> index 99c7978..08b241c 100644
> --- a/arch/arm/plat-mxc/include/mach/common.h
> +++ b/arch/arm/plat-mxc/include/mach/common.h
> @@ -133,7 +133,6 @@ extern void imx53_smd_common_init(void);
> extern int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode);
> extern void imx6q_clock_map_io(void);
>
> -extern int imx_cpu_kill(unsigned int cpu);
> extern void imx_cpu_die(unsigned int cpu);
> extern int imx_cpu_disable(unsigned int cpu);
>
> --
> 1.7.3.4
>
More information about the linux-arm-kernel
mailing list