tricky one: hisax sections
authorAl Viro <viro@ftp.linux.org.uk>
Sat, 22 Nov 2008 17:36:54 +0000 (17:36 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 30 Nov 2008 18:03:37 +0000 (10:03 -0800)
commit56d74dd5f7ad8b6b0979ce915d51cf03bcc57267
tree1696aadcb0113e01bc9f8508bae00a3ba7922789
parent8419641450edc838a6ce7cdf0f99d262bf0af2d5
tricky one: hisax sections

a) hisax_init_pcmcia() needs to be defined only if we have
   CONFIG_HOTPLUG (no PCMCIA support otherwise) and can be declared
   __devinit.

b) HiSax_inithardware() can go __init

c) hisax_register() is passing to checkcard() full-blown hisax_cs_setup_card():
checkcard(i, id, NULL, hisax_d_if->owner, hisax_cs_setup_card);
   The problem with it is that
* hisax_cs_setup_card() is __devinit
* hisax_register() is not
* hisax_cs_setup_card() is a switch from hell, calling a lot of
  setup_some_weirdcard() depending on card->typ.  _These_ are also
  __devinit.

   However, in hisax_register() we have card->typ equal to
   ISDN_CTYPE_DYNAMIC, which reduces hisax_cs_setup_card() to "nevermind
   all that crap, just do nothing and return 2".  So we add a
   trimmed-down callback doing just that and passed to checkcard() by
   hisax_register().  _This_ is non-init (we can stand the impact on
   .text size).

Voila - no section warnings from drivers/isdn

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/isdn/hisax/config.c