* [CHECKER] 2.4.5-ac4 non-init functions calling init functions
@ 2001-05-30 20:08 Dawson Engler
2001-05-30 21:33 ` David Woodhouse
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Dawson Engler @ 2001-05-30 20:08 UTC (permalink / raw)
To: linux-kernel; +Cc: mc
Here are *uninspected* 2.4.5-ac4 results of a checker that warns when a
non-__init function calls an __init function (suggested by
jlundell@lobitos.net). There seem to be two cases:
1. The best case: the caller should actually be an __init function
as well. This is a performance bug since it won't be freed.
2. The worst case: some random post-initialization routine
calls an __init routine which can cause the kernel to go into
hyperspace if the __init routine's code has been deleted.
The current messages do not differentiate between these two cases. If these
results are generally useful, I can fix up the checker, but as it now stands
there shouldn't be that many false positives.
Dawson
MC linux bug database: http://hands.stanford.edu/linux
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:757:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/es1371.c:2898:es1371_probe: ERROR:INIT: non-init fn 'es1371_probe' calling init fn 'src_init'
/u2/engler/mc/oses/linux/2.4.5-ac4/arch/i386/kernel/apm.c:1475:apm: ERROR:INIT: non-init fn 'apm' calling init fn 'apm_driver_version'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/avm_pci.c:746:AVM_card_msg: ERROR:INIT: non-init fn 'AVM_card_msg' calling init fn 'inithdlc'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17836:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:722:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17942:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/tokenring/ibmtr.c:635:ibmtr_probe1: ERROR:INIT: non-init fn 'ibmtr_probe1' using init data 'ibmtr_mem_base'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/arlan.c:1276:arlan_open: ERROR:INIT: non-init fn 'arlan_open' calling init fn 'arlan_probe_everywhere'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:565:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sonicvibes.c:2491:sv_probe: ERROR:INIT: non-init fn 'sv_probe' using init data 'sv_ddma_name'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/pcwd.c:530:get_firmware: ERROR:INIT: non-init fn 'get_firmware' calling init fn 'send_command'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/istallion.c:4784:stli_initbrds: ERROR:INIT: non-init fn 'stli_initbrds' calling init fn 'stli_brdinit'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:782:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17833:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/ide/hd.c:915:parse_hd_setup: ERROR:INIT: non-init fn 'parse_hd_setup' calling init fn 'hd_setup'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/stallion.c:2681:stl_initech: ERROR:INIT: non-init fn 'stl_initech' calling init fn 'stl_mapirq'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/acenic.c:542:acenic_probe: ERROR:INIT: non-init fn 'acenic_probe' using init data 'probed'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/cs4281/cs4281m.c:4421:cs4281_probe: ERROR:INIT: non-init fn 'cs4281_probe' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17904:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sscape.c:1504:cleanup_sscape: ERROR:INIT: non-init fn 'cleanup_sscape' using init data 'mss'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/cyber2000fb.c:1548:cyberpro_probe: ERROR:INIT: non-init fn 'cyberpro_probe' calling init fn 'fb_find_mode'
/u2/engler/mc/oses/linux/2.4.5-ac4/arch/i386/kernel/setup.c:744:parse_mem_cmdline: ERROR:INIT: non-init fn 'parse_mem_cmdline' calling init fn 'add_memory_region'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/mpu401.c:1772:cleanup_mpu401: ERROR:INIT: non-init fn 'cleanup_mpu401' using init data 'irq'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/BusLogic.c:2395:BusLogic_InitializeHostAdapter: ERROR:INIT: non-init fn 'BusLogic_InitializeHostAdapter' calling init fn 'BusLogic_Failure'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17806:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/pcwd.c:529:get_firmware: ERROR:INIT: non-init fn 'get_firmware' calling init fn 'send_command'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/pnp/quirks.c:139:isapnp_fixup_device: ERROR:INIT: non-init fn 'isapnp_fixup_device' using init data 'isapnp_fixups'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/media/video/cpia_pp.c:654:cpia_pp_init: ERROR:INIT: non-init fn 'cpia_pp_init' using init data 'parport_nr'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:568:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/media/video/cpia_pp.c:618:cpia_pp_attach: ERROR:INIT: non-init fn 'cpia_pp_attach' using init data 'parport_nr'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/istallion.c:4618:stli_findeisabrds: ERROR:INIT: non-init fn 'stli_findeisabrds' calling init fn 'stli_brdinit'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1949:rivafb_init_one: ERROR:INIT: non-init fn 'rivafb_init_one' using init data 'nohwcursor'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/radeonfb.c:830:radeon_init_disp_var: ERROR:INIT: non-init fn 'radeon_init_disp_var' calling init fn 'fb_find_mode'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/tdfxfb.c:2085:tdfxfb_setup: ERROR:INIT: non-init fn 'tdfxfb_setup' using init data 'mode_option'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:733:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/g_NCR5380.c:250:generic_DTC3181E_setup: ERROR:INIT: non-init fn 'generic_DTC3181E_setup' calling init fn 'internal_setup'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/avm_pci.c:745:AVM_card_msg: ERROR:INIT: non-init fn 'AVM_card_msg' calling init fn 'clear_pending_hdlc_ints'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/radeonfb.c:834:radeon_init_disp_var: ERROR:INIT: non-init fn 'radeon_init_disp_var' calling init fn 'fb_find_mode'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17883:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17969:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/esssolo1.c:2259:setup_solo1: ERROR:INIT: non-init fn 'setup_solo1' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17901:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/es1370.c:2652:es1370_probe: ERROR:INIT: non-init fn 'es1370_probe' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/arch/i386/kernel/setup.c:754:parse_mem_cmdline: ERROR:INIT: non-init fn 'parse_mem_cmdline' calling init fn 'add_memory_region'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:756:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/hfc_pci.c:1665:hfcpci_card_msg: ERROR:INIT: non-init fn 'hfcpci_card_msg' calling init fn 'inithfcpci'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17788:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1778:riva_init_disp: ERROR:INIT: non-init fn 'riva_init_disp' using init data 'noaccel'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17815:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/arch/i386/kernel/apic.c:773:setup_APIC_timer: ERROR:INIT: non-init fn 'setup_APIC_timer' calling init fn 'wait_8254_wraparound'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:723:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sonicvibes.c:2638:sv_probe: ERROR:INIT: non-init fn 'sv_probe' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17920:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' using init data 'ADVEEP_38C1600_Config_Field_IsChar'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17972:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/nm256_audio.c:1265:nm256_probe: ERROR:INIT: non-init fn 'nm256_probe' calling init fn 'nm256_install'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/aedsp16.c:1356:cleanup_aedsp16: ERROR:INIT: non-init fn 'cleanup_aedsp16' calling init fn 'uninit_aedsp16'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:783:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1757:riva_init_disp_var: ERROR:INIT: non-init fn 'riva_init_disp_var' using init data 'mode_option'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:721:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/BusLogic.c:2369:BusLogic_InitializeHostAdapter: ERROR:INIT: non-init fn 'BusLogic_InitializeHostAdapter' calling init fn 'BusLogic_Failure'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:570:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/BusLogic.c:1410:BusLogic_HardwareResetHostAdapter: ERROR:INIT: non-init fn 'BusLogic_HardwareResetHostAdapter' calling init fn 'BusLogic_Failure'
/u2/engler/mc/oses/linux/2.4.5-ac4/init/main.c:855:init: ERROR:INIT: non-init fn 'init' calling init fn 'do_basic_setup'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/radeonfb.c:828:radeon_init_disp_var: ERROR:INIT: non-init fn 'radeon_init_disp_var' using init data 'mode_option'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:781:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17951:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/sb_card.c:777:sb_init: ERROR:INIT: non-init fn 'sb_init' using init data 'sb_isapnp_list'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1949:rivafb_init_one: ERROR:INIT: non-init fn 'rivafb_init_one' calling init fn 'rivafb_init_cursor'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/pcwd.c:531:get_firmware: ERROR:INIT: non-init fn 'get_firmware' calling init fn 'send_command'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/istallion.c:4688:stli_initpcibrd: ERROR:INIT: non-init fn 'stli_initpcibrd' calling init fn 'stli_brdinit'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/cmpci.c:3178:initialize_chip: ERROR:INIT: non-init fn 'initialize_chip' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1894:rivafb_init_one: ERROR:INIT: non-init fn 'rivafb_init_one' using init data 'nomtrr'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/tokenring/ibmtr.c:645:ibmtr_probe1: ERROR:INIT: non-init fn 'ibmtr_probe1' using init data 'ibmtr_mem_base'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17856:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/pcwd.c:528:get_firmware: ERROR:INIT: non-init fn 'get_firmware' calling init fn 'send_command'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:569:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/pnp/quirks.c:141:isapnp_fixup_device: ERROR:INIT: non-init fn 'isapnp_fixup_device' using init data 'isapnp_fixups'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/acenic.c:540:acenic_probe: ERROR:INIT: non-init fn 'acenic_probe' using init data 'probed'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/lance.c:357:lance_probe: ERROR:INIT: non-init fn 'lance_probe' using init data 'lance_portlist'
/u2/engler/mc/oses/linux/2.4.5-ac4/net/ipv4/netfilter/ip_nat_standalone.c:278:init_or_cleanup: ERROR:INIT: non-init fn 'init_or_cleanup' calling init fn 'ip_nat_rule_init'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/mpu401.c:1772:cleanup_mpu401: ERROR:INIT: non-init fn 'cleanup_mpu401' using init data 'io'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/nm256_audio.c:1263:nm256_probe: ERROR:INIT: non-init fn 'nm256_probe' calling init fn 'nm256_install'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/stallion.c:2908:stl_initbrds: ERROR:INIT: non-init fn 'stl_initbrds' calling init fn 'stl_brdinit'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/g_NCR5380.c:237:generic_NCR53C400A_setup: ERROR:INIT: non-init fn 'generic_NCR53C400A_setup' calling init fn 'internal_setup'
/u2/engler/mc/oses/linux/2.4.5-ac4/arch/i386/kernel/setup.c:768:parse_mem_cmdline: ERROR:INIT: non-init fn 'parse_mem_cmdline' calling init fn 'print_memory_map'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/cs46xx.c:5074:cs_hardware_init: ERROR:INIT: non-init fn 'cs_hardware_init' calling init fn 'cs_ac97_init'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17784:AdvSet3550EEPConfig: ERROR:INIT: non-init fn 'AdvSet3550EEPConfig' using init data 'ADVEEP_3550_Config_Field_IsChar'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/sound/es1371.c:2911:es1371_probe: ERROR:INIT: non-init fn 'es1371_probe' using init data 'initvol'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/plip.c:1335:plip_attach: ERROR:INIT: non-init fn 'plip_attach' calling init fn 'plip_init_dev'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17852:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' using init data 'ADVEEP_38C0800_Config_Field_IsChar'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/w6692.c:950:w6692_card_msg: ERROR:INIT: non-init fn 'w6692_card_msg' calling init fn 'initW6692'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/stallion.c:2821:stl_initpcibrd: ERROR:INIT: non-init fn 'stl_initpcibrd' calling init fn 'stl_brdinit'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/BusLogic.c:2383:BusLogic_InitializeHostAdapter: ERROR:INIT: non-init fn 'BusLogic_InitializeHostAdapter' calling init fn 'BusLogic_Failure'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/riva/fbdev.c:1759:riva_init_disp_var: ERROR:INIT: non-init fn 'riva_init_disp_var' calling init fn 'fb_find_mode'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/matrox/matroxfb_base.c:1785:initMatrox2: ERROR:INIT: non-init fn 'initMatrox2' calling init fn 'fb_find_mode'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/wan/sdla.c:1344:sdla_set_config: ERROR:INIT: non-init fn 'sdla_set_config' using init data 'valid_port'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17874:AdvSet38C0800EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C0800EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/char/stallion.c:2481:stl_initeio: ERROR:INIT: non-init fn 'stl_initeio' calling init fn 'stl_mapirq'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/scsi/advansys.c:17924:AdvSet38C1600EEPConfig: ERROR:INIT: non-init fn 'AdvSet38C1600EEPConfig' calling init fn 'AdvWaitEEPCmd'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/media/video/cpia_pp.c:633:cpia_pp_attach: ERROR:INIT: non-init fn 'cpia_pp_attach' using init data 'parport_nr'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/net/tokenring/ibmtr.c:637:ibmtr_probe1: ERROR:INIT: non-init fn 'ibmtr_probe1' using init data 'ibmtr_mem_base'
/u2/engler/mc/oses/linux/2.4.5-ac4/drivers/mtd/docprobe.c:195:DoC_Probe: ERROR:INIT: non-init fn 'DoC_Probe' calling init fn 'doccheck'
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
@ 2001-05-30 21:33 ` David Woodhouse
2001-05-30 22:00 ` Oliver Xymoron
2001-05-30 23:01 ` Dawson Engler
2001-05-30 21:40 ` Harald Welte
` (3 subsequent siblings)
4 siblings, 2 replies; 11+ messages in thread
From: David Woodhouse @ 2001-05-30 21:33 UTC (permalink / raw)
To: Dawson Engler; +Cc: linux-kernel, mc
engler@csl.Stanford.EDU said:
> drivers/mtd/docprobe.c:195:DoC_Probe: ERROR:INIT: non-init fn
> 'DoC_Probe' calling init fn 'doccheck'
Strictly speaking, not actually a bug. DoC_Probe() itself is only ever
called from __init code. But it's probably not worth trying to make the
checker notice that situation - I've fixed it anyway by making DoC_Probe()
__init too, which saves a bit more memory. Thanks.
parse_mem_cmdline() in arch/i386/kernel/setup.c is a similar false (or at
least questionable) positive. Note that it's an inline function, only used
inside setup_arch(), which _is_ marked __init.
--
dwmw2
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
2001-05-30 21:33 ` David Woodhouse
@ 2001-05-30 21:40 ` Harald Welte
2001-05-30 23:08 ` [PATCH] " Petr Vandrovec
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Harald Welte @ 2001-05-30 21:40 UTC (permalink / raw)
To: Dawson Engler; +Cc: linux-kernel, mc
On Wed, May 30, 2001 at 01:08:40PM -0700, Dawson Engler wrote:
> Here are *uninspected* 2.4.5-ac4 results of a checker that warns when a
> non-__init function calls an __init function (suggested by
> jlundell@lobitos.net). There seem to be two cases:
>
> 1. The best case: the caller should actually be an __init function
> as well. This is a performance bug since it won't be freed.
>
> 2. The worst case: some random post-initialization routine
> calls an __init routine which can cause the kernel to go into
> hyperspace if the __init routine's code has been deleted.
>
> The current messages do not differentiate between these two cases. If these
> results are generally useful, I can fix up the checker, but as it now stands
> there shouldn't be that many false positives.
>
> Dawson
> MC linux bug database: http://hands.stanford.edu/linux
>
> /u2/engler/mc/oses/linux/2.4.5-ac4/net/ipv4/netfilter/ip_nat_standalone.c:278:init_or_cleanup: ERROR:INIT: non-init fn 'init_or_cleanup' calling init fn 'ip_nat_rule_init'
This is not a bug. init_or_cleanup is only called from one place with
an argument of 1: from the init() function. If the argument is 0,
as called by the exit() function, the code for calling the ip_nat_rule_setup
is never reached.
So it is definitely not a bug.
Anyway, one should maybe make this a little bit cleaner. Will look into that.
--
Live long and prosper
- Harald Welte / laforge@gnumonks.org http://www.gnumonks.org/
============================================================================
GCS/E/IT d- s-: a-- C+++ UL++++$ P+++ L++++$ E--- W- N++ o? K- w--- O- M-
V-- PS+ PE-- Y+ PGP++ t++ 5-- !X !R tv-- b+++ DI? !D G+ e* h+ r% y+(*)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 21:33 ` David Woodhouse
@ 2001-05-30 22:00 ` Oliver Xymoron
2001-05-30 23:01 ` Dawson Engler
1 sibling, 0 replies; 11+ messages in thread
From: Oliver Xymoron @ 2001-05-30 22:00 UTC (permalink / raw)
To: David Woodhouse; +Cc: Dawson Engler, linux-kernel, mc
On Wed, 30 May 2001, David Woodhouse wrote:
>
> engler@csl.Stanford.EDU said:
> > drivers/mtd/docprobe.c:195:DoC_Probe: ERROR:INIT: non-init fn
> > 'DoC_Probe' calling init fn 'doccheck'
>
> Strictly speaking, not actually a bug. DoC_Probe() itself is only ever
> called from __init code. But it's probably not worth trying to make the
> checker notice that situation - I've fixed it anyway by making DoC_Probe()
> __init too, which saves a bit more memory. Thanks.
Anything that's only called or used by functions marked init is a
candidate for being marked init. I suspect there's still quite a bit out
there that meets this description.
--
"Love the dolphins," she advised him. "Write by W.A.S.T.E.."
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 21:33 ` David Woodhouse
2001-05-30 22:00 ` Oliver Xymoron
@ 2001-05-30 23:01 ` Dawson Engler
2001-05-31 7:09 ` David Woodhouse
1 sibling, 1 reply; 11+ messages in thread
From: Dawson Engler @ 2001-05-30 23:01 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-kernel, mc
> > drivers/mtd/docprobe.c:195:DoC_Probe: ERROR:INIT: non-init fn
> > 'DoC_Probe' calling init fn 'doccheck'
>
> Strictly speaking, not actually a bug. DoC_Probe() itself is only ever
> called from __init code. But it's probably not worth trying to make the
> checker notice that situation - I've fixed it anyway by making DoC_Probe()
> __init too, which saves a bit more memory. Thanks.
It's a space/performance bug, though, right? From the original mail:
1. The best case: the caller should actually be an __init function
as well. This is a performance bug since it won't be freed.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
2001-05-30 21:33 ` David Woodhouse
2001-05-30 21:40 ` Harald Welte
@ 2001-05-30 23:08 ` Petr Vandrovec
2001-05-31 21:38 ` Kai Germaschewski
2001-06-01 7:48 ` Geert Uytterhoeven
4 siblings, 0 replies; 11+ messages in thread
From: Petr Vandrovec @ 2001-05-30 23:08 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, mc, engler
On Wed, May 30, 2001 at 01:08:40PM -0700, Dawson Engler wrote:
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/matrox/matroxfb_base.c
> :1785:initMatrox2: ERROR:INIT: non-init fn 'initMatrox2' calling init
> fn 'fb_find_mode'
Thanks for pointing this out. Code checks for init/noninit phase, but I somehow
forgot to set hotplug variable:
#ifndef MODULE
/* mode database is marked __init!!! */
if (!hotplug) {
fb_find_mode(&vesafb_defined, &ACCESS_FBINFO(fbcon), videomode[0]?videomode:NULL,
NULL, 0, &defaultmode, vesafb_defined.bits_per_pixel);
}
#endif /* !MODULE */
Alan, please apply following patch, it fixes this. It is for 2.4.5-ac5,
but should apply to any 2.4.x.
Thanks,
Petr Vandrovec
vandrove@vc.cvut.cz
diff -urdN linux/drivers/video/matrox/matroxfb_base.c linux/drivers/video/matrox/matroxfb_base.c
--- linux/drivers/video/matrox/matroxfb_base.c Wed May 30 20:27:28 2001
+++ linux/drivers/video/matrox/matroxfb_base.c Wed May 30 20:31:42 2001
@@ -2495,6 +2495,7 @@
initialized = 1;
matrox_init();
}
+ hotplug = 1;
/* never return failure, user can hotplug matrox later... */
return 0;
}
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 23:01 ` Dawson Engler
@ 2001-05-31 7:09 ` David Woodhouse
0 siblings, 0 replies; 11+ messages in thread
From: David Woodhouse @ 2001-05-31 7:09 UTC (permalink / raw)
To: Dawson Engler; +Cc: linux-kernel, mc
engler@csl.Stanford.EDU said:
> It's a space/performance bug, though, right? From the original mail:
> 1. The best case: the caller should actually be an __init function
> as well. This is a performance bug since it won't be freed.
Yes, sorry. I hadn't properly read the beginning or your mail - I'd skipped
straight to checking whether anything I own had been listed. :)
--
dwmw2
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
` (2 preceding siblings ...)
2001-05-30 23:08 ` [PATCH] " Petr Vandrovec
@ 2001-05-31 21:38 ` Kai Germaschewski
2001-05-31 22:06 ` Dawson Engler
2001-06-01 7:48 ` Geert Uytterhoeven
4 siblings, 1 reply; 11+ messages in thread
From: Kai Germaschewski @ 2001-05-31 21:38 UTC (permalink / raw)
To: Dawson Engler; +Cc: linux-kernel, mc, Alan Cox
On Wed, 30 May 2001, Dawson Engler wrote:
> Here are *uninspected* 2.4.5-ac4 results of a checker that warns when a
> non-__init function calls an __init function (suggested by
> jlundell@lobitos.net). There seem to be two cases:
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/avm_pci.c:746:AVM_card_msg: ERROR:INIT: non-init fn 'AVM_card_msg' calling init fn 'inithdlc'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/avm_pci.c:745:AVM_card_msg: ERROR:INIT: non-init fn 'AVM_card_msg' calling init fn 'clear_pending_hdlc_ints'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/hfc_pci.c:1665:hfcpci_card_msg: ERROR:INIT: non-init fn 'hfcpci_card_msg' calling init fn 'inithfcpci'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/w6692.c:950:w6692_card_msg: ERROR:INIT: non-init fn 'w6692_card_msg' calling init fn 'initW6692'
These are actually false positives. The offending __init functions are
only called, when the _card_msg function is called with "CARD_INIT". This
only happens from __devinit code in config.c.
Now, calling __init from __devinit would a bug, too. However, the driver
doesn't support hotplug PCI, but the affected cards are PCI, so no problem
there, either.
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:565:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:568:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:570:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/isdn/hisax/gazel.c:569:setup_gazelpci: ERROR:INIT: non-init fn 'setup_gazelpci' using init data 'dev_tel'
These are actual (performance) bugs.
Patch is appended.
BTW: I don't if you did so already, but if you extended the checker to
find functions which are only called from __init functions, but not
marked __init themselves, you'd most likely find lots more performance
bugs of this kind.
Thank you,
--Kai
Index: linux_2_4/drivers/isdn/hisax//gazel.c
===================================================================
RCS file: /scratch/kai/cvsroot/linux_2_4/drivers/isdn/hisax/gazel.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 gazel.c
--- linux_2_4/drivers/isdn/hisax//gazel.c 2001/04/23 22:51:01 1.1.1.2
+++ linux_2_4/drivers/isdn/hisax//gazel.c 2001/05/31 21:35:39
@@ -1,4 +1,4 @@
-/* $Id: gazel.c,v 2.11.6.4 2001/02/16 16:43:26 kai Exp $
+/* $Id: gazel.c,v 2.11.6.5 2001/05/31 21:34:36 kai Exp $
*
* gazel.c low level stuff for Gazel isdn cards
*
@@ -19,7 +19,7 @@
#include <linux/pci.h>
extern const char *CardType[];
-const char *gazel_revision = "$Revision: 2.11.6.4 $";
+const char *gazel_revision = "$Revision: 2.11.6.5 $";
#define R647 1
#define R685 2
@@ -497,7 +497,7 @@
return 1;
}
-static int
+static int __init
setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs)
{
printk(KERN_INFO "Gazel: ISA PnP card automatic recognition\n");
@@ -546,7 +546,7 @@
static struct pci_dev *dev_tel __initdata = NULL;
-static int
+static int __init
setup_gazelpci(struct IsdnCardState *cs)
{
u_int pci_ioaddr0 = 0, pci_ioaddr1 = 0;
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-31 21:38 ` Kai Germaschewski
@ 2001-05-31 22:06 ` Dawson Engler
0 siblings, 0 replies; 11+ messages in thread
From: Dawson Engler @ 2001-05-31 22:06 UTC (permalink / raw)
To: Kai Germaschewski; +Cc: linux-kernel
> These are actual (performance) bugs.
> Patch is appended.
Thanks for the quick feedback!
> BTW: I don't if you did so already, but if you extended the checker to
> find functions which are only called from __init functions, but not
> marked __init themselves, you'd most likely find lots more performance
> bugs of this kind.
I haven't hacked this in --- I was waiting to get a feel for how
important the checker was before spending too much time on it. I agree
with your intuition that there would be a lot of these cases ;-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
` (3 preceding siblings ...)
2001-05-31 21:38 ` Kai Germaschewski
@ 2001-06-01 7:48 ` Geert Uytterhoeven
4 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2001-06-01 7:48 UTC (permalink / raw)
To: Dawson Engler; +Cc: Linux Kernel Development, mc, Russell King
On Wed, 30 May 2001, Dawson Engler wrote:
> Here are *uninspected* 2.4.5-ac4 results of a checker that warns when a
> non-__init function calls an __init function (suggested by
> jlundell@lobitos.net). There seem to be two cases:
>
> 1. The best case: the caller should actually be an __init function
> as well. This is a performance bug since it won't be freed.
>
> 2. The worst case: some random post-initialization routine
> calls an __init routine which can cause the kernel to go into
> hyperspace if the __init routine's code has been deleted.
>
> The current messages do not differentiate between these two cases. If these
> results are generally useful, I can fix up the checker, but as it now stands
> there shouldn't be that many false positives.
>
> Dawson
> MC linux bug database: http://hands.stanford.edu/linux
>
> /u2/engler/mc/oses/linux/2.4.5-ac4/drivers/video/cyber2000fb.c:1548:cyberpro_probe: ERROR:INIT: non-init fn 'cyberpro_probe' calling init fn 'fb_find_mode'
[ I'm responding to this one only, woken up by Russell ]
But cyberpro_probe() is marked __devinit, so it's used during driver
initialization only.
And fb_find_mode() is special: it's indeed an __init function, but there's also
a special inline variant in <linux/fb.h>, protected by #ifdef MODULE. So this
doesn't harm.
For clarification, fb_find_mode() finds a suitable video mode in the video mode
database (drivers/video/modedb.c). Since we don't want to waste memory, this
database is __initdata. To make life easier for the driver writers, they
can still use fb_find_mode() through the inline function, which knows only
about 640x480@60 Hz.
I guess the correct fix is to (re)implement __init for modules, then we can
link the whole modedb with every frame buffer device driver module...
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] 11+ messages in thread
* RE: [CHECKER] 2.4.5-ac4 non-init functions calling init functions
@ 2001-06-01 18:09 Khachaturov, Vassilii
0 siblings, 0 replies; 11+ messages in thread
From: Khachaturov, Vassilii @ 2001-06-01 18:09 UTC (permalink / raw)
To: 'Dawson Engler', kai; +Cc: linux-kernel
If you do implement such a thing, make sure that you don't mistakenly spot
smth that gets exported to a non-kernel-tree driver, or smth that gets
called by a non-__init, --- but not in the current kernel config!
V.
> -----Original Message-----
> From: Dawson Engler [mailto:engler@csl.Stanford.EDU]
> checker to
> > find functions which are only called from __init functions, but not
> > marked __init themselves, you'd most likely find lots more
> performance
> > bugs of this kind.
>
> I haven't hacked this in --- I was waiting to get a feel for how
> important the checker was before spending too much time on
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2001-06-01 18:14 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-05-30 20:08 [CHECKER] 2.4.5-ac4 non-init functions calling init functions Dawson Engler
2001-05-30 21:33 ` David Woodhouse
2001-05-30 22:00 ` Oliver Xymoron
2001-05-30 23:01 ` Dawson Engler
2001-05-31 7:09 ` David Woodhouse
2001-05-30 21:40 ` Harald Welte
2001-05-30 23:08 ` [PATCH] " Petr Vandrovec
2001-05-31 21:38 ` Kai Germaschewski
2001-05-31 22:06 ` Dawson Engler
2001-06-01 7:48 ` Geert Uytterhoeven
-- strict thread matches above, loose matches on Subject: below --
2001-06-01 18:09 Khachaturov, Vassilii
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox