Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[SPARC64]: Fix section error in sparcspkr

With a sparc64 defconfig modified to set CONFIG_HOTPLUG=n
the following error happened during link of vmlinux:

local symbol 0: discarded in section `.devexit.text' from drivers/built-in.o
local symbol 1: discarded in section `.devexit.text' from drivers/built-in.o

(The error message above is from kbuild.git but it happens in mainline too)

The error happens becase there is a reference from .text/.data to a
function marked __devexit. With CONFIG_HOTPLUG=n all code marked
__devexit are discarded and the linker complains.

It was tracked down to sparcspkr.c which were missing __devexit_p()
around the function pointers.

Unfortunately modpost did not catch this since modpost do not warn
about references from .data to .devexit from variables named *_driver.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sam Ravnborg and committed by
David S. Miller
2ad913ba a1f35ba3

+2 -2
+2 -2
drivers/input/misc/sparcspkr.c
··· 195 195 .name = "beep", 196 196 .match_table = ebus_beep_match, 197 197 .probe = ebus_beep_probe, 198 - .remove = sparcspkr_remove, 198 + .remove = __devexit_p(sparcspkr_remove), 199 199 .shutdown = sparcspkr_shutdown, 200 200 }; 201 201 ··· 236 236 .name = "beep", 237 237 .match_table = isa_beep_match, 238 238 .probe = isa_beep_probe, 239 - .remove = sparcspkr_remove, 239 + .remove = __devexit_p(sparcspkr_remove), 240 240 .shutdown = sparcspkr_shutdown, 241 241 }; 242 242