* [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 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
* 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 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
* [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 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 threadend 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