diff options
Diffstat (limited to 'rust/macros')
| -rw-r--r-- | rust/macros/kunit.rs | 13 | ||||
| -rw-r--r-- | rust/macros/module.rs | 39 | ||||
| -rw-r--r-- | rust/macros/paste.rs | 2 | 
3 files changed, 22 insertions, 32 deletions
| diff --git a/rust/macros/kunit.rs b/rust/macros/kunit.rs index 4f553ecf40c0..99ccac82edde 100644 --- a/rust/macros/kunit.rs +++ b/rust/macros/kunit.rs @@ -15,10 +15,7 @@ pub(crate) fn kunit_tests(attr: TokenStream, ts: TokenStream) -> TokenStream {      }      if attr.len() > 255 { -        panic!( -            "The test suite name `{}` exceeds the maximum length of 255 bytes", -            attr -        ) +        panic!("The test suite name `{attr}` exceeds the maximum length of 255 bytes")      }      let mut tokens: Vec<_> = ts.into_iter().collect(); @@ -102,16 +99,14 @@ pub(crate) fn kunit_tests(attr: TokenStream, ts: TokenStream) -> TokenStream {      let mut kunit_macros = "".to_owned();      let mut test_cases = "".to_owned();      for test in &tests { -        let kunit_wrapper_fn_name = format!("kunit_rust_wrapper_{}", test); +        let kunit_wrapper_fn_name = format!("kunit_rust_wrapper_{test}");          let kunit_wrapper = format!( -            "unsafe extern \"C\" fn {}(_test: *mut kernel::bindings::kunit) {{ {}(); }}", -            kunit_wrapper_fn_name, test +            "unsafe extern \"C\" fn {kunit_wrapper_fn_name}(_test: *mut kernel::bindings::kunit) {{ {test}(); }}"          );          writeln!(kunit_macros, "{kunit_wrapper}").unwrap();          writeln!(              test_cases, -            "    kernel::kunit::kunit_case(kernel::c_str!(\"{}\"), {}),", -            test, kunit_wrapper_fn_name +            "    kernel::kunit::kunit_case(kernel::c_str!(\"{test}\"), {kunit_wrapper_fn_name}),"          )          .unwrap();      } diff --git a/rust/macros/module.rs b/rust/macros/module.rs index a9418fbc9b44..c4afdd69e490 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -48,7 +48,7 @@ impl<'a> ModInfoBuilder<'a> {              )          } else {              // Loadable modules' modinfo strings go as-is. -            format!("{field}={content}\0", field = field, content = content) +            format!("{field}={content}\0")          };          write!( @@ -126,10 +126,7 @@ impl ModuleInfo {              };              if seen_keys.contains(&key) { -                panic!( -                    "Duplicated key \"{}\". Keys can only be specified once.", -                    key -                ); +                panic!("Duplicated key \"{key}\". Keys can only be specified once.");              }              assert_eq!(expect_punct(it), ':'); @@ -143,10 +140,7 @@ impl ModuleInfo {                  "license" => info.license = expect_string_ascii(it),                  "alias" => info.alias = Some(expect_string_array(it)),                  "firmware" => info.firmware = Some(expect_string_array(it)), -                _ => panic!( -                    "Unknown key \"{}\". Valid keys are: {:?}.", -                    key, EXPECTED_KEYS -                ), +                _ => panic!("Unknown key \"{key}\". Valid keys are: {EXPECTED_KEYS:?}."),              }              assert_eq!(expect_punct(it), ','); @@ -158,7 +152,7 @@ impl ModuleInfo {          for key in REQUIRED_KEYS {              if !seen_keys.iter().any(|e| e == key) { -                panic!("Missing required key \"{}\".", key); +                panic!("Missing required key \"{key}\".");              }          } @@ -170,10 +164,7 @@ impl ModuleInfo {          }          if seen_keys != ordered_keys { -            panic!( -                "Keys are not ordered as expected. Order them like: {:?}.", -                ordered_keys -            ); +            panic!("Keys are not ordered as expected. Order them like: {ordered_keys:?}.");          }          info @@ -185,7 +176,9 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {      let info = ModuleInfo::parse(&mut it); -    let mut modinfo = ModInfoBuilder::new(info.name.as_ref()); +    // Rust does not allow hyphens in identifiers, use underscore instead. +    let ident = info.name.replace('-', "_"); +    let mut modinfo = ModInfoBuilder::new(ident.as_ref());      if let Some(author) = info.author {          modinfo.emit("author", &author);      } @@ -310,14 +303,15 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {                      #[doc(hidden)]                      #[link_section = \"{initcall_section}\"]                      #[used] -                    pub static __{name}_initcall: extern \"C\" fn() -> kernel::ffi::c_int = __{name}_init; +                    pub static __{ident}_initcall: extern \"C\" fn() -> +                        kernel::ffi::c_int = __{ident}_init;                      #[cfg(not(MODULE))]                      #[cfg(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS)]                      core::arch::global_asm!(                          r#\".section \"{initcall_section}\", \"a\" -                        __{name}_initcall: -                            .long   __{name}_init - . +                        __{ident}_initcall: +                            .long   __{ident}_init - .                              .previous                          \"#                      ); @@ -325,7 +319,7 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {                      #[cfg(not(MODULE))]                      #[doc(hidden)]                      #[no_mangle] -                    pub extern \"C\" fn __{name}_init() -> kernel::ffi::c_int {{ +                    pub extern \"C\" fn __{ident}_init() -> kernel::ffi::c_int {{                          // SAFETY: This function is inaccessible to the outside due to the double                          // module wrapping it. It is called exactly once by the C side via its                          // placement above in the initcall section. @@ -335,13 +329,13 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {                      #[cfg(not(MODULE))]                      #[doc(hidden)]                      #[no_mangle] -                    pub extern \"C\" fn __{name}_exit() {{ +                    pub extern \"C\" fn __{ident}_exit() {{                          // SAFETY:                          // - This function is inaccessible to the outside due to the double                          //   module wrapping it. It is called exactly once by the C side via its                          //   unique name, -                        // - furthermore it is only called after `__{name}_init` has returned `0` -                        //   (which delegates to `__init`). +                        // - furthermore it is only called after `__{ident}_init` has +                        //   returned `0` (which delegates to `__init`).                          unsafe {{ __exit() }}                      }} @@ -381,6 +375,7 @@ pub(crate) fn module(ts: TokenStream) -> TokenStream {          ",          type_ = info.type_,          name = info.name, +        ident = ident,          modinfo = modinfo.buffer,          initcall_section = ".initcall6.init"      ) diff --git a/rust/macros/paste.rs b/rust/macros/paste.rs index 6529a387673f..cce712d19855 100644 --- a/rust/macros/paste.rs +++ b/rust/macros/paste.rs @@ -50,7 +50,7 @@ fn concat_helper(tokens: &[TokenTree]) -> Vec<(String, Span)> {                  let tokens = group.stream().into_iter().collect::<Vec<TokenTree>>();                  segments.append(&mut concat_helper(tokens.as_slice()));              } -            token => panic!("unexpected token in paste segments: {:?}", token), +            token => panic!("unexpected token in paste segments: {token:?}"),          };      } | 
