While reviewing the bindings for thread-safety, I realized that the bindings did not properly model the lifetimes of non-owned line_info instances. This fixes that. It might be a bit mind bending. I tried to provide lengthy comments to clarify what happens. To: Linux-GPIO <linux-gpio@xxxxxxxxxxxxxxx> Cc: Viresh Kumar <viresh.kumar@xxxxxxxxxx> Cc: Manos Pitsidianakis <manos.pitsidianakis@xxxxxxxxxx> Cc: Kent Gibson <warthog618@xxxxxxxxx> Signed-off-by: Erik Schilling <erik.schilling@xxxxxxxxxx> --- Changes in v3: - Renamed from_raw_{owned,non_owning}() -> from_raw() - Link to v2: https://lore.kernel.org/r/20230929-rust-line-info-soundness-v2-0-9782b7f20f26@xxxxxxxxxx Changes in v2: - Removed unneeded temporary variables - Added missing SAFETY comment - Renamed owning wrapper to `Event`, non-owning to `EventRef` - Renamed existing clone methods to try_clone() - Slightly tweaked try_clone() documentation - Dropped version bump commit - Added Fixes tag - CC'd Kent - suggested by vireshk since he reviewed his commits - Link to v1: https://lore.kernel.org/r/20230927-rust-line-info-soundness-v1-0-990dce6f18ab@xxxxxxxxxx --- Erik Schilling (3): bindings: rust: fix soundness of line_info modeling bindings: rust: rename {event,settings}_clone to try_clone bindings: rust: allow cloning line::InfoRef -> line::Info .../libgpiod/examples/buffered_event_lifetimes.rs | 2 +- bindings/rust/libgpiod/src/chip.rs | 8 +- bindings/rust/libgpiod/src/edge_event.rs | 3 +- bindings/rust/libgpiod/src/info_event.rs | 8 +- bindings/rust/libgpiod/src/lib.rs | 1 + bindings/rust/libgpiod/src/line_info.rs | 140 +++++++++++++++------ bindings/rust/libgpiod/src/line_settings.rs | 4 +- bindings/rust/libgpiod/tests/line_info.rs | 53 ++++++++ bindings/rust/libgpiod/tests/line_request.rs | 2 +- 9 files changed, 173 insertions(+), 48 deletions(-) --- base-commit: 0a570b6d5ea32dbd771092c52ee427ee5be6ad22 change-id: 20230927-rust-line-info-soundness-14c08e0d26e9 Best regards, -- Erik Schilling <erik.schilling@xxxxxxxxxx>