linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] Input: amikbd - Fix build if !CONFIG_HW_CONSOLE
@ 2014-11-30  9:30 Geert Uytterhoeven
  2014-11-30  9:30 ` [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack Geert Uytterhoeven
  0 siblings, 1 reply; 4+ messages in thread
From: Geert Uytterhoeven @ 2014-11-30  9:30 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-m68k, Geert Uytterhoeven

If CONFIG_HW_CONSOLE is not set:

drivers/built-in.o: In function `amikbd_probe':
amikbd.c:(.init.text+0x3e4e): undefined reference to `key_maps'
amikbd.c:(.init.text+0x3dd4): undefined reference to `key_maps'

To fix this, extract the initialization of the console keyboard maps
into amikbd_init_console_keymaps(), protected by #ifdef
CONFIG_HW_CONSOLE.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
Discovered during randconfig builds.

v2:
  - No changes
---
 drivers/input/keyboard/amikbd.c | 46 ++++++++++++++++++++++++++---------------
 1 file changed, 29 insertions(+), 17 deletions(-)

diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c
index 096d6067ae1f890f..4f81e65d9e35cb7d 100644
--- a/drivers/input/keyboard/amikbd.c
+++ b/drivers/input/keyboard/amikbd.c
@@ -45,6 +45,7 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
 MODULE_DESCRIPTION("Amiga keyboard driver");
 MODULE_LICENSE("GPL");
 
+#ifdef CONFIG_HW_CONSOLE
 static unsigned char amikbd_keycode[0x78] __initdata = {
 	[0]	 = KEY_GRAVE,
 	[1]	 = KEY_1,
@@ -144,6 +145,31 @@ static unsigned char amikbd_keycode[0x78] __initdata = {
 	[103]	 = KEY_RIGHTMETA
 };
 
+static void __init amikbd_init_console_keymaps(void)
+{
+	int i, j;
+
+	for (i = 0; i < MAX_NR_KEYMAPS; i++) {
+		static u_short temp_map[NR_KEYS] __initdata;
+		if (!key_maps[i])
+			continue;
+		memset(temp_map, 0, sizeof(temp_map));
+		for (j = 0; j < 0x78; j++) {
+			if (!amikbd_keycode[j])
+				continue;
+			temp_map[j] = key_maps[i][amikbd_keycode[j]];
+		}
+		for (j = 0; j < NR_KEYS; j++) {
+			if (!temp_map[j])
+				temp_map[j] = 0xf200;
+		}
+		memcpy(key_maps[i], temp_map, sizeof(temp_map));
+	}
+}
+#else /* !CONFIG_HW_CONSOLE */
+static inline void amikbd_init_console_keymaps(void) {}
+#endif /* !CONFIG_HW_CONSOLE */
+
 static const char *amikbd_messages[8] = {
 	[0] = KERN_ALERT "amikbd: Ctrl-Amiga-Amiga reset warning!!\n",
 	[1] = KERN_WARNING "amikbd: keyboard lost sync\n",
@@ -186,7 +212,7 @@ static irqreturn_t amikbd_interrupt(int irq, void *data)
 static int __init amikbd_probe(struct platform_device *pdev)
 {
 	struct input_dev *dev;
-	int i, j, err;
+	int i, err;
 
 	dev = input_allocate_device();
 	if (!dev) {
@@ -207,22 +233,8 @@ static int __init amikbd_probe(struct platform_device *pdev)
 	for (i = 0; i < 0x78; i++)
 		set_bit(i, dev->keybit);
 
-	for (i = 0; i < MAX_NR_KEYMAPS; i++) {
-		static u_short temp_map[NR_KEYS] __initdata;
-		if (!key_maps[i])
-			continue;
-		memset(temp_map, 0, sizeof(temp_map));
-		for (j = 0; j < 0x78; j++) {
-			if (!amikbd_keycode[j])
-				continue;
-			temp_map[j] = key_maps[i][amikbd_keycode[j]];
-		}
-		for (j = 0; j < NR_KEYS; j++) {
-			if (!temp_map[j])
-				temp_map[j] = 0xf200;
-		}
-		memcpy(key_maps[i], temp_map, sizeof(temp_map));
-	}
+	amikbd_init_console_keymaps();
+
 	ciaa.cra &= ~0x41;	 /* serial data in, turn off TA */
 	err = request_irq(IRQ_AMIGA_CIAA_SP, amikbd_interrupt, 0, "amikbd",
 			  dev);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack
  2014-11-30  9:30 [PATCH v2 1/2] Input: amikbd - Fix build if !CONFIG_HW_CONSOLE Geert Uytterhoeven
@ 2014-11-30  9:30 ` Geert Uytterhoeven
  2014-12-03 22:59   ` Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Geert Uytterhoeven @ 2014-11-30  9:30 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-m68k, Geert Uytterhoeven

Allocate the temporary buffer needed for initialization of the console
keyboard maps (512 bytes, as NR_KEYS = 256) on the stack instead of
statically, to reduce kernel size.

add/remove: 0/1 grow/shrink: 0/0 up/down: 0/-512 (-512)
function                                     old     new   delta
temp_map                                     512       -    -512

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
v2:
  - Allocate temp_map[] on the stack instead of using kmalloc().
---
 drivers/input/keyboard/amikbd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c
index 4f81e65d9e35cb7d..60580d8104b9f970 100644
--- a/drivers/input/keyboard/amikbd.c
+++ b/drivers/input/keyboard/amikbd.c
@@ -147,10 +147,10 @@ static unsigned char amikbd_keycode[0x78] __initdata = {
 
 static void __init amikbd_init_console_keymaps(void)
 {
+	unsigned short temp_map[NR_KEYS];
 	int i, j;
 
 	for (i = 0; i < MAX_NR_KEYMAPS; i++) {
-		static u_short temp_map[NR_KEYS] __initdata;
 		if (!key_maps[i])
 			continue;
 		memset(temp_map, 0, sizeof(temp_map));
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack
  2014-11-30  9:30 ` [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack Geert Uytterhoeven
@ 2014-12-03 22:59   ` Dmitry Torokhov
  2014-12-04  9:00     ` Geert Uytterhoeven
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2014-12-03 22:59 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: linux-input, linux-m68k

On Sun, Nov 30, 2014 at 10:30:20AM +0100, Geert Uytterhoeven wrote:
> Allocate the temporary buffer needed for initialization of the console
> keyboard maps (512 bytes, as NR_KEYS = 256) on the stack instead of
> statically, to reduce kernel size.
> 
> add/remove: 0/1 grow/shrink: 0/0 up/down: 0/-512 (-512)
> function                                     old     new   delta
> temp_map                                     512       -    -512

So because it is marked __initdata and is placed into a separate
section we have to allocate the space in the image?

Anyway, applied both, thank you.

> 
> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
> ---
> v2:
>   - Allocate temp_map[] on the stack instead of using kmalloc().
> ---
>  drivers/input/keyboard/amikbd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c
> index 4f81e65d9e35cb7d..60580d8104b9f970 100644
> --- a/drivers/input/keyboard/amikbd.c
> +++ b/drivers/input/keyboard/amikbd.c
> @@ -147,10 +147,10 @@ static unsigned char amikbd_keycode[0x78] __initdata = {
>  
>  static void __init amikbd_init_console_keymaps(void)
>  {
> +	unsigned short temp_map[NR_KEYS];
>  	int i, j;
>  
>  	for (i = 0; i < MAX_NR_KEYMAPS; i++) {
> -		static u_short temp_map[NR_KEYS] __initdata;
>  		if (!key_maps[i])
>  			continue;
>  		memset(temp_map, 0, sizeof(temp_map));
> -- 
> 1.9.1
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack
  2014-12-03 22:59   ` Dmitry Torokhov
@ 2014-12-04  9:00     ` Geert Uytterhoeven
  0 siblings, 0 replies; 4+ messages in thread
From: Geert Uytterhoeven @ 2014-12-04  9:00 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input@vger.kernel.org, Linux/m68k

Hi Dmitry,

On Wed, Dec 3, 2014 at 11:59 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Sun, Nov 30, 2014 at 10:30:20AM +0100, Geert Uytterhoeven wrote:
>> Allocate the temporary buffer needed for initialization of the console
>> keyboard maps (512 bytes, as NR_KEYS = 256) on the stack instead of
>> statically, to reduce kernel size.
>>
>> add/remove: 0/1 grow/shrink: 0/0 up/down: 0/-512 (-512)
>> function                                     old     new   delta
>> temp_map                                     512       -    -512
>
> So because it is marked __initdata and is placed into a separate
> section we have to allocate the space in the image?

Indeed. __initdata consumes space in both the vmlinux image and in
memory.
Note that we don't have __initbss for uninitialized data, which would
obviously still consume space in memory.

> Anyway, applied both, thank you.

Thanks!

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-12-04  9:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-30  9:30 [PATCH v2 1/2] Input: amikbd - Fix build if !CONFIG_HW_CONSOLE Geert Uytterhoeven
2014-11-30  9:30 ` [PATCH v2 2/2] Input: amikbd - Allocate temporary keymap buffer on the stack Geert Uytterhoeven
2014-12-03 22:59   ` Dmitry Torokhov
2014-12-04  9:00     ` Geert Uytterhoeven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).