From: Andrew Morton <akpm@osdl.org>

s1d13xxxfb_remove() is referenced from s1d13xxxfb_probe(), which is marked
__devinit().  So s1d13xxxfb_remove() cannot be marked __devexit.

Does this all make sense?  Clearly the __devexit section will still be in
core when the __devinit code is run, if the driver was loaded as a module. 

But I suppose that if the driver is statically linked, the __devexit section
might be dropped early in boot.  Still, we wouldn't drop __devexit prior to
initcall completion, at which point the __devinit code has all been run
anyway.

verdict: this code was legal and made sense.  Is this a generic problem, or an
arm-specific problem?

  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
`.exit.text' referenced in section `.init.text' of drivers/built-in.o: defined in discarded section `.exit.text' of drivers/built-in.o

Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/video/s1d13xxxfb.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/video/s1d13xxxfb.c~s1d13xxxfb-linkage-fix drivers/video/s1d13xxxfb.c
--- 25-arm/drivers/video/s1d13xxxfb.c~s1d13xxxfb-linkage-fix	2005-05-09 23:11:59.000000000 -0700
+++ 25-arm-akpm/drivers/video/s1d13xxxfb.c	2005-05-09 23:11:59.000000000 -0700
@@ -493,7 +493,7 @@ s1d13xxxfb_fetch_hw_state(struct fb_info
 }
 
 
-static int __devexit
+static int
 s1d13xxxfb_remove(struct device *dev)
 {
 	struct fb_info *info = dev_get_drvdata(dev);
_