• Thomas Bertschinger's avatar
    rust: module: place generated init_module() function in .init.text · 1b6170ff
    Thomas Bertschinger authored
    Currently Rust kernel modules have their init code placed in the `.text`
    section of the .ko file. I don't think this causes any real problems
    for Rust modules as long as all code called during initialization lives
    in `.text`.
    
    However, if a Rust `init_module()` function (that lives in `.text`)
    calls a function marked with `__init` (in C) or
    `#[link_section = ".init.text"]` (in Rust), then a warning is
    generated by modpost because that function lives in `.init.text`.
    For example:
    
    WARNING: modpost: fs/bcachefs/bcachefs: section mismatch in reference: init_module+0x6 (section: .text) -> _RNvXCsj7d3tFpT5JS_15bcachefs_moduleNtB2_8BcachefsNtCsjDtqRIL3JAG_6kernel6Module4init (section: .init.text)
    
    I ran into this while experimenting with converting the bcachefs kernel
    module from C to Rust. The module's `init()`, written in Rust, calls C
    functions like `bch2_vfs_init()` which are placed in `.init.text`.
    
    This patch places the macro-generated `init_module()` Rust function in
    the `.init.text` section. It also marks `init_module()` as unsafe--now
    it may not be called after module initialization completes because it
    may be freed already.
    
    Note that this is not enough on its own to actually get all the module
    initialization code in that section. The module author must still add
    the `#[link_section = ".init.text"]` attribute to the Rust `init()` in
    the `impl kernel::Module` block in order to then call `__init`
    functions. However, this patch enables module authors do so, when
    previously it would not be possible (without warnings).
    Signed-off-by: default avatarThomas Bertschinger <tahbertschinger@gmail.com>
    Reviewed-by: default avatarMartin Rodriguez Reboredo <yakoyoku@gmail.com>
    Reviewed-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240206153806.567055-1-tahbertschinger@gmail.com
    [ Reworded title to add prefix. ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    1b6170ff
module.rs 9.36 KB