* Help needed to fix section mismatch warnings @ 2008-01-06 14:07 Sam Ravnborg 2008-01-10 6:25 ` Randy Dunlap 2008-01-19 19:52 ` Randy Dunlap 0 siblings, 2 replies; 8+ messages in thread From: Sam Ravnborg @ 2008-01-06 14:07 UTC (permalink / raw) To: LKML kbuild emit section mismatch warnings when it detects that someone does a call from a non-init section to a init section. The rationale here is that the init section are discarded at runtime and if this call happens after the init section has gone we have an oops. This check is planned to be turned into an error soon but we still see a bit too many warnings. To see the list below build a kernel like this: make allyesconfig Set CONFIG_HOTPLUG to n (In General Setup | Configure standard kernel features | Support for hot-plugable devices) Then build the kernel like this: make KCFLAGS=-fno-unit-at-a-time The flag "-fno-unit-at-a-time" tell gcc to avoid additional inlining which otherwise would hide several section mismatch warnings. With latest kernel I got 113 warnings and most should fixable. Try to look at how other section mismatch warnings has been fixed for inspiration. Patches can be cc:ed to me but always send it to the maintainer and lkml. Sam This is the current list of warnings WARNING: vmlinux.o(.text+0x738a): Section mismatch: reference to .init.data:ebda_addr (between 'discover_ebda' and 'get_model_name') WARNING: vmlinux.o(.text+0x73c4): Section mismatch: reference to .init.data:ebda_size (between 'discover_ebda' and 'get_model_name') WARNING: vmlinux.o(.text+0x76e2): Section mismatch: reference to .init.text: (between 'init_amd' and 'detect_ht') WARNING: vmlinux.o(.text+0x1872b): Section mismatch: reference to .init.text:calibrate_delay (between 'smp_callin' and 'cpu_coregroup_map') WARNING: vmlinux.o(.text+0x1f8b7): Section mismatch: reference to .init.text: (between 'calgary_handle_quirks' and 'tce_build') WARNING: vmlinux.o(.text+0x1ffd0): Section mismatch: reference to .init.text:register_cpu (between 'arch_register_cpu' and 'arch_unregister_cpu') WARNING: vmlinux.o(.text+0x21a39): Section mismatch: reference to .init.text:absent_pages_in_range (between 'reserve_hotadd' and 'unparse_node') WARNING: vmlinux.o(.text+0x21ae9): Section mismatch: reference to .init.data: (between 'unparse_node' and 'null_slit_node_compare') WARNING: vmlinux.o(.text+0x38b43): Section mismatch: reference to .init.text:idle_regs (between 'fork_idle' and 'fork_traceflag') WARNING: vmlinux.o(.text+0x43524): Section mismatch: reference to .init.text: (between 'timer_cpu_notify' and 'msleep') WARNING: vmlinux.o(.text+0x4c6f6): Section mismatch: reference to .init.text: (between 'rcu_cpu_notify' and 'wakeme_after_rcu') WARNING: vmlinux.o(.text+0x51cbe): Section mismatch: reference to .init.text: (between 'hrtimer_cpu_notify' and 'down_read_trylock') WARNING: vmlinux.o(.text+0x89520): Section mismatch: reference to .init.text: (between 'process_zones' and 'pageset_cpuup_callback') WARNING: vmlinux.o(.text+0x453c6f): Section mismatch: reference to .init.text: (between 'pci_add_new_bus' and 'pci_fixup_parent_subordinate_busnr') WARNING: vmlinux.o(.text+0x4545f6): Section mismatch: reference to .init.text: (between 'pci_scan_single_device' and 'pci_scan_slot') WARNING: vmlinux.o(.text+0x4546e9): Section mismatch: reference to .init.text:pcibios_fixup_bus (between 'pci_scan_child_bus' and 'pci_create_bus') WARNING: vmlinux.o(.text+0x460039): Section mismatch: reference to .init.text: (between 'pci_bus_size_bridges' and 'pci_bus_assign_resources') WARNING: vmlinux.o(.text+0x46011b): Section mismatch: reference to .init.text: (between 'pci_bus_assign_resources' and 'acpi_query_osc') WARNING: vmlinux.o(.text+0x47e419): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e42b): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e45d): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e464): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e488): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e48f): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e5a0): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x47e5a7): Section mismatch: reference to .init.data: (between 'pm3fb_size_memory' and 'update_crtc2') WARNING: vmlinux.o(.text+0x4d2888): Section mismatch: reference to .init.data:mode_option (between 'tdfxfb_setup' and 'getclkMHz') WARNING: vmlinux.o(.text+0x4d2895): Section mismatch: reference to .init.data: (between 'tdfxfb_setup' and 'getclkMHz') WARNING: vmlinux.o(.text+0x4e279c): Section mismatch: reference to .init.data: (between 'uvesafb_init_mtrr' and 'uvesafb_show_vbe_ver') WARNING: vmlinux.o(.text+0x4e2b62): Section mismatch: reference to .init.data:mtrr (between 'param_set_scroll' and 'vesa_setpalette') WARNING: vmlinux.o(.text+0x4e2b88): Section mismatch: reference to .init.data:mtrr (between 'param_set_scroll' and 'vesa_setpalette') WARNING: vmlinux.o(.text+0x4e2bab): Section mismatch: reference to .init.data:blank (between 'param_set_scroll' and 'vesa_setpalette') WARNING: vmlinux.o(.text+0x4e2bb1): Section mismatch: reference to .init.data:blank (between 'param_set_scroll' and 'vesa_setpalette') WARNING: vmlinux.o(.text+0x50e2ca): Section mismatch: reference to .init.text:pci_acpi_scan_root (between 'acpi_pci_root_add' and 'acpi_pci_root_start') WARNING: vmlinux.o(.text+0x5eb413): Section mismatch: reference to .init.text: (between 'parport_pc_probe_port' and 'parport_pc_unregister_port') WARNING: vmlinux.o(.text+0x605e14): Section mismatch: reference to .init.text: (between 'cciss_pci_init' and 'cciss_getgeometry') WARNING: vmlinux.o(.text+0x6a6a97): Section mismatch: reference to .init.text: (between 'sis190_get_mac_addr' and 'sis190_set_speed_auto') WARNING: vmlinux.o(.text+0x6a6aa4): Section mismatch: reference to .init.text: (between 'sis190_get_mac_addr' and 'sis190_set_speed_auto') WARNING: vmlinux.o(.text+0x6f9823): Section mismatch: reference to .init.text: (between 'rhine_hw_init' and 'alloc_ring') WARNING: vmlinux.o(.text+0x7527bb): Section mismatch: reference to .init.text: (between 'mlx4_init_icm' and 'mlx4_free_icms') WARNING: vmlinux.o(.text+0x752e91): Section mismatch: reference to .init.text: (between 'mlx4_init_hca' and 'mlx4_setup_hca') WARNING: vmlinux.o(.text+0x753737): Section mismatch: reference to .init.text: (between '__mlx4_init_one' and 'mlx4_remove_one') WARNING: vmlinux.o(.text+0x7549da): Section mismatch: reference to .init.text: (between 'mlx4_init_mr_table' and 'mlx4_cleanup_mr_table') WARNING: vmlinux.o(.text+0x756616): Section mismatch: reference to .init.text: (between 'olympic_open' and 'olympic_rx') WARNING: vmlinux.o(.text+0xbc61d2): Section mismatch: reference to .init.text: (between 'piix_init_one' and 'pdc_common_port_start') WARNING: vmlinux.o(.text+0xbc61e9): Section mismatch: reference to .init.text: (between 'piix_init_one' and 'pdc_common_port_start') WARNING: vmlinux.o(.text+0xbc620f): Section mismatch: reference to .init.text: (between 'piix_init_one' and 'pdc_common_port_start') WARNING: vmlinux.o(.text+0xe7fdcd): Section mismatch: reference to .init.text:setup_teles3 (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fdd7): Section mismatch: reference to .init.text:setup_s0box (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fde1): Section mismatch: reference to .init.text:setup_telespci (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fdf2): Section mismatch: reference to .init.text:setup_avm_pcipnp (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fdf9): Section mismatch: reference to .init.text:setup_elsa (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe00): Section mismatch: reference to .init.text:setup_diva (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe07): Section mismatch: reference to .init.text:setup_sedlbauer (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe0e): Section mismatch: reference to .init.text:setup_netjet_s (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe15): Section mismatch: reference to .init.text:setup_hfcpci (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe1c): Section mismatch: reference to .init.text:setup_hfcsx (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe23): Section mismatch: reference to .init.text:setup_niccy (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe2a): Section mismatch: reference to .init.text:setup_bkm_a4t (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe31): Section mismatch: reference to .init.text:setup_sct_quadro (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe38): Section mismatch: reference to .init.text:setup_gazel (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe3f): Section mismatch: reference to .init.text:setup_w6692 (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe46): Section mismatch: reference to .init.text:setup_netjet_u (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe7fe4d): Section mismatch: reference to .init.text:setup_enternow_pci (between 'hisax_cs_setup_card' and 'hisax_cs_new') WARNING: vmlinux.o(.text+0xe98f63): Section mismatch: reference to .init.data:ISACVer (between 'ISACVersion' and 'ph_command') WARNING: vmlinux.o(.text+0xe9afbc): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'inithscxisac' and 'write_fifo_isac') WARNING: vmlinux.o(.text+0xe9afcc): Section mismatch: reference to .init.text:initisac (between 'inithscxisac' and 'write_fifo_isac') WARNING: vmlinux.o(.text+0xe9ec44): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'AVM_card_msg' and 'setup_avm_a1_pcmcia') WARNING: vmlinux.o(.text+0xe9ed94): Section mismatch: reference to .init.text:setup_isac (between 'setup_avm_a1_pcmcia' and 'WriteHSCX') WARNING: vmlinux.o(.text+0xea033e): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'AVM_card_msg' and 'hdlc_fill_fifo') WARNING: vmlinux.o(.text+0xea0346): Section mismatch: reference to .init.text:initisac (between 'AVM_card_msg' and 'hdlc_fill_fifo') WARNING: vmlinux.o(.text+0xea866c): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'Sedl_card_msg' and 'WriteISACfifo') WARNING: vmlinux.o(.text+0xea8684): Section mismatch: reference to .init.text:initisac (between 'Sedl_card_msg' and 'WriteISACfifo') WARNING: vmlinux.o(.text+0xea868c): Section mismatch: reference to .init.text:initisar (between 'Sedl_card_msg' and 'WriteISACfifo') WARNING: vmlinux.o(.text+0xeacf79): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'NETjet_S_card_msg' and 'dummywr') WARNING: vmlinux.o(.text+0xeacf81): Section mismatch: reference to .init.text:initisac (between 'NETjet_S_card_msg' and 'dummywr') WARNING: vmlinux.o(.text+0xeb4a11): Section mismatch: reference to .init.text: (between 'hfcsx_card_msg' and 'hfcsx_Timer') WARNING: vmlinux.o(.text+0xeb6b57): Section mismatch: reference to .init.text:clear_pending_isac_ints (between 'BKM_card_msg' and 'JadeVersion') WARNING: vmlinux.o(.text+0xeb6b67): Section mismatch: reference to .init.text:initisac (between 'BKM_card_msg' and 'JadeVersion') WARNING: vmlinux.o(.text+0xebbc7d): Section mismatch: reference to .init.text:Amd7930_init (between 'enpci_card_msg' and 'enpci_interrupt') WARNING: vmlinux.o(.text+0xebbcb2): Section mismatch: reference to .init.text:Amd7930_init (between 'enpci_card_msg' and 'enpci_interrupt') WARNING: vmlinux.o(.text+0xfe90b6): Section mismatch: reference to .init.data:atiixp_quirks (between 'ac97_probing_bugs' and 'snd_atiixp_codec_detect') WARNING: vmlinux.o(.text+0x109a166): Section mismatch: reference to .init.text: (between 'snd_hdsp_create_alsa_devices' and 'snd_hdsp_free') WARNING: vmlinux.o(.text+0x10b9600): Section mismatch: reference to .init.text:snd_usb_caiaq_audio_init (between 'setup_card' and 'create_card') WARNING: vmlinux.o(.text+0x10b9628): Section mismatch: reference to .init.text:snd_usb_caiaq_midi_init (between 'setup_card' and 'create_card') WARNING: vmlinux.o(.exit.text+0xc64d): Section mismatch: reference to .init.data:_asc_def_iop_base (between 'advansys_isa_remove' and 'advansys_eisa_remove') WARNING: vmlinux.o(__ksymtab+0xa7a0): Section mismatch: reference to .init.text:suni_init (between '__ksymtab_suni_init' and '__ksymtab_ide_hwifs') WARNING: vmlinux.o(.data+0x8500): Section mismatch: reference to .init.text:profile_cpu_callback (between 'profile_cpu_callback_nb.22048' and 'lowest_to_date.35229') WARNING: vmlinux.o(.data+0xb760): Section mismatch: reference to .init.text:workqueue_cpu_callback (between 'workqueue_cpu_callback_nb.15466' and 'init_struct_pid') WARNING: vmlinux.o(.data+0x167d0): Section mismatch: reference to .init.text:cpu_callback (between 'cpu_callback_nb.29884' and 'sysctl_min_unmapped_ratio') WARNING: vmlinux.o(.data+0x7e9b8): Section mismatch: reference to .init.text:tpm_inf_pnp_probe (between 'tpm_inf_pnp' and 'cn_idx') WARNING: vmlinux.o(.data+0xd44d8): Section mismatch: reference to .init.data:prism2_plx_id_table (between 'prism2_plx_drv_id' and 'dev_info') WARNING: vmlinux.o(.data+0x149908): Section mismatch: reference to .init.text:av7110_attach (between 'av7110_extension' and 'ir_protocol') WARNING: vmlinux.o(.data+0x170b20): Section mismatch: reference to .init.data:hpt370 (between 'hpt37x_info.32549' and 'driver') WARNING: vmlinux.o(.data+0x170b28): Section mismatch: reference to .init.data:hpt370a (between 'hpt37x_info.32549' and 'driver') WARNING: vmlinux.o(.data+0x170b30): Section mismatch: reference to .init.data:hpt372 (between 'hpt37x_info.32549' and 'driver') WARNING: vmlinux.o(.data+0x170b38): Section mismatch: reference to .init.data:hpt372n (between 'hpt37x_info.32549' and 'driver') WARNING: vmlinux.o(.data+0x193288): Section mismatch: reference to .init.text:asd_aic9410_setup (between 'asd_pcidev_data' and 'driver_attr_version') WARNING: vmlinux.o(.data+0x193298): Section mismatch: reference to .init.text:asd_aic9410_setup (between 'asd_pcidev_data' and 'driver_attr_version') WARNING: vmlinux.o(.data+0x1932a8): Section mismatch: reference to .init.text:asd_aic9405_setup (between 'asd_pcidev_data' and 'driver_attr_version') WARNING: vmlinux.o(.data+0x1b3ce0): Section mismatch: reference to .init.text:megaraid_probe_one (between 'megaraid_pci_driver_g' and 'class_device_attr_megaraid_mbox_app_hndl') WARNING: vmlinux.o(.data+0x2fdc40): Section mismatch: reference to .init.data:mts64_ctl_smpte_switch (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x2fdc48): Section mismatch: reference to .init.data:mts64_ctl_smpte_time_hours (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x2fdc50): Section mismatch: reference to .init.data:mts64_ctl_smpte_time_minutes (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x2fdc58): Section mismatch: reference to .init.data:mts64_ctl_smpte_time_seconds (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x2fdc60): Section mismatch: reference to .init.data:mts64_ctl_smpte_time_frames (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x2fdc68): Section mismatch: reference to .init.data:mts64_ctl_smpte_fps (between 'control.19255' and 'snd_mts64_rawmidi_output_ops') WARNING: vmlinux.o(.data+0x300ae0): Section mismatch: reference to .init.text:snd_ad1889_probe (between 'ad1889_pci' and 'index') WARNING: vmlinux.o(.text+0xb0c71d): Section mismatch: reference to .exit.text: (between 'qla2xxx_pci_error_detected' and 'qla2xxx_pci_mmio_enabled') WARNING: vmlinux.o(.text+0xb4ff4b): Section mismatch: reference to .exit.text: (between 'sym2_io_error_detected' and 'sym2_io_slot_dump') WARNING: vmlinux.o(.init.text+0x47783): Section mismatch: reference to .exit.text:tpm_nsc_remove (between 'init_nsc' and 'init_atmel') WARNING: vmlinux.o(.init.text+0xa73ed): Section mismatch: reference to .exit.text: (between 'asd_pci_probe' and 'aic94xx_init') ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-06 14:07 Help needed to fix section mismatch warnings Sam Ravnborg @ 2008-01-10 6:25 ` Randy Dunlap 2008-01-10 19:19 ` Randy Dunlap 2008-01-10 19:38 ` Sam Ravnborg 2008-01-19 19:52 ` Randy Dunlap 1 sibling, 2 replies; 8+ messages in thread From: Randy Dunlap @ 2008-01-10 6:25 UTC (permalink / raw) To: Sam Ravnborg; +Cc: LKML On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > This is the current list of warnings Sam, Several of these are due to driver variable names not matching the whitelisted names in modpost. I have patches for the ones that I have identified so far. And I have patches for a few of the others that are true section mismatch problems (total of 8 patches ready for now). The whitelisted names will always be a (small) problem. Can __init_refok be used in these cases.. or some other new attribute, instead of forever adding to the whitelist or modifying variable names? > WARNING: vmlinux.o(.text+0x738a): Section mismatch: reference to .init.data:ebda_addr (between 'discover_ebda' and 'get_model_name') > WARNING: vmlinux.o(.text+0x73c4): Section mismatch: reference to .init.data:ebda_size (between 'discover_ebda' and 'get_model_name') patch ready. > WARNING: vmlinux.o(.text+0x605e14): Section mismatch: reference to .init.text: (between 'cciss_pci_init' and 'cciss_getgeometry') patch ready. > WARNING: vmlinux.o(.exit.text+0xc64d): Section mismatch: reference to .init.data:_asc_def_iop_base (between 'advansys_isa_remove' and 'advansys_eisa_remove') patch ready. > WARNING: vmlinux.o(.data+0x7e9b8): Section mismatch: reference to .init.text:tpm_inf_pnp_probe (between 'tpm_inf_pnp' and 'cn_idx') patch ready. > WARNING: vmlinux.o(.data+0xd44d8): Section mismatch: reference to .init.data:prism2_plx_id_table (between 'prism2_plx_drv_id' and 'dev_info') patch ready. > WARNING: vmlinux.o(.data+0x149908): Section mismatch: reference to .init.text:av7110_attach (between 'av7110_extension' and 'ir_protocol') patch ready. > WARNING: vmlinux.o(.data+0x1b3ce0): Section mismatch: reference to .init.text:megaraid_probe_one (between 'megaraid_pci_driver_g' and 'class_device_attr_megaraid_mbox_app_hndl') patch ready. > WARNING: vmlinux.o(.text+0xb0c71d): Section mismatch: reference to .exit.text: (between 'qla2xxx_pci_error_detected' and 'qla2xxx_pci_mmio_enabled') patch ready. > WARNING: vmlinux.o(.text+0xb4ff4b): Section mismatch: reference to .exit.text: (between 'sym2_io_error_detected' and 'sym2_io_slot_dump') Patch sent by /me on 2007.OCT.29 to linux-scsi & akpm. I will send the ready patches sometime on THU 2008.JAN.10. --- ~Randy ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-10 6:25 ` Randy Dunlap @ 2008-01-10 19:19 ` Randy Dunlap 2008-01-11 18:59 ` Sam Ravnborg 2008-01-10 19:38 ` Sam Ravnborg 1 sibling, 1 reply; 8+ messages in thread From: Randy Dunlap @ 2008-01-10 19:19 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg On Wed, 9 Jan 2008 22:25:42 -0800 Randy Dunlap wrote: > On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > > > > This is the current list of warnings > > Sam, > > Several of these are due to driver variable names not matching > the whitelisted names in modpost. I have patches for the ones > that I have identified so far. And I have patches for a few of > the others that are true section mismatch problems (total of 8 > patches ready for now). > > The whitelisted names will always be a (small) problem. > Can __init_refok be used in these cases.. or some other new > attribute, instead of forever adding to the whitelist or > modifying variable names? Sam (or anyone :), I guess that I'm a little confused. Instead of changing variable names to match the modpost whitelist, I tested adding __init_refok or __initdata_refok to these (driver) structs that generated the modpost warnings. Example: drivers/char/tpm/tpm_infineon.c --- linux-2.6.24-rc7-git1.orig/drivers/char/tpm/tpm_infineon.c +++ linux-2.6.24-rc7-git1/drivers/char/tpm/tpm_infineon.c @@ -611,7 +611,7 @@ static __devexit void tpm_inf_pnp_remove } } -static struct pnp_driver tpm_inf_pnp = { +static struct pnp_driver __init_refok tpm_inf_pnp = { .name = "tpm_inf_pnp", .driver = { .owner = THIS_MODULE, This has a build warning with my toolchain: CC drivers/char/tpm/tpm_infineon.o linux-2.6.24-rc7-git1/drivers/char/tpm/tpm_infineon.c:614: warning: 'noinline' attribute ignored {standard input}: Assembler messages: {standard input}:2315: Warning: setting incorrect section attributes for .text.init.refok but otherwise no section mismatch warning. OTOH, using __initdata_refok has no build warning and no section mismatch warning... but it (__initdata_refok) doesn't make sense to me. Should it (make sense/be used)? Is there a __refok that should be used here, instead of having to modify variable names? > > WARNING: vmlinux.o(.data+0x7e9b8): Section mismatch: reference to .init.text:tpm_inf_pnp_probe (between 'tpm_inf_pnp' and 'cn_idx') Thanks, --- ~Randy ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-10 19:19 ` Randy Dunlap @ 2008-01-11 18:59 ` Sam Ravnborg 0 siblings, 0 replies; 8+ messages in thread From: Sam Ravnborg @ 2008-01-11 18:59 UTC (permalink / raw) To: Randy Dunlap; +Cc: lkml On Thu, Jan 10, 2008 at 11:19:18AM -0800, Randy Dunlap wrote: > On Wed, 9 Jan 2008 22:25:42 -0800 Randy Dunlap wrote: > > > On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > > > > > > > This is the current list of warnings > > > > Sam, > > > > Several of these are due to driver variable names not matching > > the whitelisted names in modpost. I have patches for the ones > > that I have identified so far. And I have patches for a few of > > the others that are true section mismatch problems (total of 8 > > patches ready for now). > > > > The whitelisted names will always be a (small) problem. > > Can __init_refok be used in these cases.. or some other new > > attribute, instead of forever adding to the whitelist or > > modifying variable names? > > Sam (or anyone :), > > I guess that I'm a little confused. Instead of changing > variable names to match the modpost whitelist, I tested adding > __init_refok or __initdata_refok to these (driver) structs that > generated the modpost warnings. > > Example: drivers/char/tpm/tpm_infineon.c > > --- linux-2.6.24-rc7-git1.orig/drivers/char/tpm/tpm_infineon.c > +++ linux-2.6.24-rc7-git1/drivers/char/tpm/tpm_infineon.c > @@ -611,7 +611,7 @@ static __devexit void tpm_inf_pnp_remove > } > } > > -static struct pnp_driver tpm_inf_pnp = { > +static struct pnp_driver __init_refok tpm_inf_pnp = { > .name = "tpm_inf_pnp", > .driver = { > .owner = THIS_MODULE, > > This has a build warning with my toolchain: > > CC drivers/char/tpm/tpm_infineon.o > linux-2.6.24-rc7-git1/drivers/char/tpm/tpm_infineon.c:614: warning: 'noinline' attribute ignored > {standard input}: Assembler messages: > {standard input}:2315: Warning: setting incorrect section attributes for .text.init.refok > > but otherwise no section mismatch warning. > > OTOH, using __initdata_refok has no build warning and no section > mismatch warning... but it (__initdata_refok) doesn't make sense > to me. Should it (make sense/be used)? What we try to do is to tell modpost that from this particular spot in the code it is not a bug when a __init/__exit function is called. The whitelisting uses the name of the variable to determine is this is a bug and not. But traditionally we have in the kernel used annotation for this. The __initdata_refok wer invented as a tag that could be used to tell modpost that this variable may call an __init function. What happens is that the variable is placed in a section named: .data.init.refok and when modpost encounter a variable in this section then it does not warn. Likewise __init_refok teach gcc to locate the function in a section named .text.init.refok and modpost uses this to know that __init referneces are not a bug when they happens in this section. In addition __init_refok contains noinline to avoid agressive gcc inlining which gcc does across different sections. > Is there a __refok that should be used here, instead of having > to modify variable names? So far I have favoured consistent variable namings but I could be persuaded to use annotation as the preferred method. If for no other reason then because the annotation is a nice way to document that in this spot the reference is OK. But better named annothation is then needed... Sam ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-10 6:25 ` Randy Dunlap 2008-01-10 19:19 ` Randy Dunlap @ 2008-01-10 19:38 ` Sam Ravnborg 1 sibling, 0 replies; 8+ messages in thread From: Sam Ravnborg @ 2008-01-10 19:38 UTC (permalink / raw) To: Randy Dunlap; +Cc: LKML On Wed, Jan 09, 2008 at 10:25:42PM -0800, Randy Dunlap wrote: > On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > > > > This is the current list of warnings > > Sam, > > Several of these are due to driver variable names not matching > the whitelisted names in modpost. I have patches for the ones > that I have identified so far. And I have patches for a few of > the others that are true section mismatch problems (total of 8 > patches ready for now). > > The whitelisted names will always be a (small) problem. > Can __init_refok be used in these cases.. or some other new > attribute, instead of forever adding to the whitelist or > modifying variable names? We had 112 warnings with the modified allyesconfig build and many of these from the same module. So in these cases I greatly prefer to rename variables to match what other drivers use and thus enabling the current whitelist to supress the warnings. The remaining bits to address is the const / non-const issue. Here we most likely need to invent a parallel set of section names (yrk). init_refok is for me the last resort and if we need many more of these something else needs to be invented. > > > > WARNING: vmlinux.o(.text+0x738a): Section mismatch: reference to .init.data:ebda_addr (between 'discover_ebda' and 'get_model_name') > > WARNING: vmlinux.o(.text+0x73c4): Section mismatch: reference to .init.data:ebda_size (between 'discover_ebda' and 'get_model_name') > > patch ready. > > > WARNING: vmlinux.o(.text+0x605e14): Section mismatch: reference to .init.text: (between 'cciss_pci_init' and 'cciss_getgeometry') > > patch ready. > > > WARNING: vmlinux.o(.exit.text+0xc64d): Section mismatch: reference to .init.data:_asc_def_iop_base (between 'advansys_isa_remove' and 'advansys_eisa_remove') > > patch ready. > > > WARNING: vmlinux.o(.data+0x7e9b8): Section mismatch: reference to .init.text:tpm_inf_pnp_probe (between 'tpm_inf_pnp' and 'cn_idx') > > patch ready. > > > WARNING: vmlinux.o(.data+0xd44d8): Section mismatch: reference to .init.data:prism2_plx_id_table (between 'prism2_plx_drv_id' and 'dev_info') > > patch ready. > > > WARNING: vmlinux.o(.data+0x149908): Section mismatch: reference to .init.text:av7110_attach (between 'av7110_extension' and 'ir_protocol') > > patch ready. > > > WARNING: vmlinux.o(.data+0x1b3ce0): Section mismatch: reference to .init.text:megaraid_probe_one (between 'megaraid_pci_driver_g' and 'class_device_attr_megaraid_mbox_app_hndl') > > patch ready. > > > WARNING: vmlinux.o(.text+0xb0c71d): Section mismatch: reference to .exit.text: (between 'qla2xxx_pci_error_detected' and 'qla2xxx_pci_mmio_enabled') > > patch ready. > > > WARNING: vmlinux.o(.text+0xb4ff4b): Section mismatch: reference to .exit.text: (between 'sym2_io_error_detected' and 'sym2_io_slot_dump') > > Patch sent by /me on 2007.OCT.29 to linux-scsi & akpm. > > I will send the ready patches sometime on THU 2008.JAN.10. Great! Sam ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-06 14:07 Help needed to fix section mismatch warnings Sam Ravnborg 2008-01-10 6:25 ` Randy Dunlap @ 2008-01-19 19:52 ` Randy Dunlap 2008-01-19 21:22 ` Sam Ravnborg 1 sibling, 1 reply; 8+ messages in thread From: Randy Dunlap @ 2008-01-19 19:52 UTC (permalink / raw) To: Sam Ravnborg; +Cc: LKML, akpm On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > kbuild emit section mismatch warnings when it detects that someone does a > call from a non-init section to a init section. > The rationale here is that the init section are discarded at runtime and > if this call happens after the init section has gone we have an oops. > > This check is planned to be turned into an error soon but we still > see a bit too many warnings. > > To see the list below build a kernel like this: > > make allyesconfig > Set CONFIG_HOTPLUG to n > (In General Setup | Configure standard kernel features | Support for hot-plugable devices) > > Then build the kernel like this: > make KCFLAGS=-fno-unit-at-a-time > > The flag "-fno-unit-at-a-time" tell gcc to avoid additional inlining which > otherwise would hide several section mismatch warnings. > > With latest kernel I got 113 warnings and most should fixable. > Try to look at how other section mismatch warnings has been fixed for inspiration. > > Patches can be cc:ed to me but always send it to the maintainer and lkml. > > Sam > > This is the current list of warnings > > WARNING: vmlinux.o(.text+0x1ffd0): Section mismatch: reference to .init.text:register_cpu (between 'arch_register_cpu' and 'arch_unregister_cpu') > WARNING: vmlinux.o(.text+0x21a39): Section mismatch: reference to .init.text:absent_pages_in_range (between 'reserve_hotadd' and 'unparse_node') > WARNING: vmlinux.o(.text+0x21ae9): Section mismatch: reference to .init.data: (between 'unparse_node' and 'null_slit_node_compare') > WARNING: vmlinux.o(.text+0x38b43): Section mismatch: reference to .init.text:idle_regs (between 'fork_idle' and 'fork_traceflag') Above 4 seem to be mostly fixed in -mm. I made patches for them and then checked -mm, so I won't post the patches... > WARNING: vmlinux.o(.text+0x43524): Section mismatch: reference to .init.text: (between 'timer_cpu_notify' and 'msleep') > WARNING: vmlinux.o(.text+0x4c6f6): Section mismatch: reference to .init.text: (between 'rcu_cpu_notify' and 'wakeme_after_rcu') > WARNING: vmlinux.o(.text+0x51cbe): Section mismatch: reference to .init.text: (between 'hrtimer_cpu_notify' and 'down_read_trylock') I'll post patches for the 3 above. However, the rcu code in -mm is quite different, so the rcu patch may have a short life. --- ~Randy ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-19 19:52 ` Randy Dunlap @ 2008-01-19 21:22 ` Sam Ravnborg 2008-01-19 21:45 ` Sam Ravnborg 0 siblings, 1 reply; 8+ messages in thread From: Sam Ravnborg @ 2008-01-19 21:22 UTC (permalink / raw) To: Randy Dunlap; +Cc: LKML, akpm On Sat, Jan 19, 2008 at 11:52:55AM -0800, Randy Dunlap wrote: > On Sun, 6 Jan 2008 15:07:28 +0100 Sam Ravnborg wrote: > > > kbuild emit section mismatch warnings when it detects that someone does a > > call from a non-init section to a init section. > > The rationale here is that the init section are discarded at runtime and > > if this call happens after the init section has gone we have an oops. > > > > This check is planned to be turned into an error soon but we still > > see a bit too many warnings. > > > > To see the list below build a kernel like this: > > > > make allyesconfig > > Set CONFIG_HOTPLUG to n > > (In General Setup | Configure standard kernel features | Support for hot-plugable devices) > > > > Then build the kernel like this: > > make KCFLAGS=-fno-unit-at-a-time > > > > The flag "-fno-unit-at-a-time" tell gcc to avoid additional inlining which > > otherwise would hide several section mismatch warnings. > > > > With latest kernel I got 113 warnings and most should fixable. > > Try to look at how other section mismatch warnings has been fixed for inspiration. > > > > Patches can be cc:ed to me but always send it to the maintainer and lkml. > > > > Sam > > > > This is the current list of warnings > > > > WARNING: vmlinux.o(.text+0x1ffd0): Section mismatch: reference to .init.text:register_cpu (between 'arch_register_cpu' and 'arch_unregister_cpu') > > > WARNING: vmlinux.o(.text+0x21a39): Section mismatch: reference to .init.text:absent_pages_in_range (between 'reserve_hotadd' and 'unparse_node') > > WARNING: vmlinux.o(.text+0x21ae9): Section mismatch: reference to .init.data: (between 'unparse_node' and 'null_slit_node_compare') > > > WARNING: vmlinux.o(.text+0x38b43): Section mismatch: reference to .init.text:idle_regs (between 'fork_idle' and 'fork_traceflag') > > Above 4 seem to be mostly fixed in -mm. I made patches for them > and then checked -mm, so I won't post the patches... > > > > WARNING: vmlinux.o(.text+0x43524): Section mismatch: reference to .init.text: (between 'timer_cpu_notify' and 'msleep') > > WARNING: vmlinux.o(.text+0x4c6f6): Section mismatch: reference to .init.text: (between 'rcu_cpu_notify' and 'wakeme_after_rcu') > > WARNING: vmlinux.o(.text+0x51cbe): Section mismatch: reference to .init.text: (between 'hrtimer_cpu_notify' and 'down_read_trylock') > > I'll post patches for the 3 above. However, the rcu code in -mm > is quite different, so the rcu patch may have a short life. Hi Randy. Thanks for your efforts! Sam ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Help needed to fix section mismatch warnings 2008-01-19 21:22 ` Sam Ravnborg @ 2008-01-19 21:45 ` Sam Ravnborg 0 siblings, 0 replies; 8+ messages in thread From: Sam Ravnborg @ 2008-01-19 21:45 UTC (permalink / raw) To: Randy Dunlap; +Cc: LKML, akpm > > > > > > > WARNING: vmlinux.o(.text+0x43524): Section mismatch: reference to .init.text: (between 'timer_cpu_notify' and 'msleep') > > > WARNING: vmlinux.o(.text+0x4c6f6): Section mismatch: reference to .init.text: (between 'rcu_cpu_notify' and 'wakeme_after_rcu') > > > WARNING: vmlinux.o(.text+0x51cbe): Section mismatch: reference to .init.text: (between 'hrtimer_cpu_notify' and 'down_read_trylock') > > > > I'll post patches for the 3 above. However, the rcu code in -mm > > is quite different, so the rcu patch may have a short life. > > Hi Randy. > > Thanks for your efforts! And I just reviewd the three patches. All oops triggers under special conditions. It is stuff like this that makes me wonder why some people still say that the Section mismatch warnings are not worth fixing?!?!? Sam ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-01-19 21:45 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-01-06 14:07 Help needed to fix section mismatch warnings Sam Ravnborg 2008-01-10 6:25 ` Randy Dunlap 2008-01-10 19:19 ` Randy Dunlap 2008-01-11 18:59 ` Sam Ravnborg 2008-01-10 19:38 ` Sam Ravnborg 2008-01-19 19:52 ` Randy Dunlap 2008-01-19 21:22 ` Sam Ravnborg 2008-01-19 21:45 ` Sam Ravnborg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox