* Exposing semaphores @ 2021-04-27 0:02 Carlos 2021-04-27 0:08 ` Alex Gaynor ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Carlos @ 2021-04-27 0:02 UTC (permalink / raw) To: rust-for-linux Hello to all, I recently began assessing what functionality from the kernel is missing for implementing a basic scull driver. Semaphores are the first missing primitive that caught my attention, and being such an important part of the kernel itself, I will make exposing this functionality my first priority instead. It should be pretty straightforward, following the stablished convention of leveraging the kernel API. Any comments before I dig in? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 0:02 Exposing semaphores Carlos @ 2021-04-27 0:08 ` Alex Gaynor 2021-04-27 0:12 ` Wedson Almeida Filho 2021-04-27 10:18 ` Sven Van Asbroeck 2 siblings, 0 replies; 7+ messages in thread From: Alex Gaynor @ 2021-04-27 0:08 UTC (permalink / raw) To: Carlos; +Cc: rust-for-linux It sounds like you already identified it, but yup, that'd be my major piece of advice, follow the conventions and traits use in the other sync/ locking types: https://github.com/Rust-for-Linux/linux/tree/rust/rust/kernel/sync Glad to hear you're already diving into scull! Cheers, Alex On Mon, Apr 26, 2021 at 8:02 PM Carlos <carloscarral13@gmail.com> wrote: > > Hello to all, > > I recently began assessing what functionality from the kernel is missing > for implementing a basic scull driver. > > Semaphores are the first missing primitive that caught my attention, and > being such an important part of the kernel itself, I will make exposing > this functionality my first priority instead. > > It should be pretty straightforward, following the stablished convention of > leveraging the kernel API. > > Any comments before I dig in? > > > -- All that is necessary for evil to succeed is for good people to do nothing. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 0:02 Exposing semaphores Carlos 2021-04-27 0:08 ` Alex Gaynor @ 2021-04-27 0:12 ` Wedson Almeida Filho 2021-04-27 1:43 ` Samantha Miller 2021-04-27 11:00 ` Sven Van Asbroeck 2021-04-27 10:18 ` Sven Van Asbroeck 2 siblings, 2 replies; 7+ messages in thread From: Wedson Almeida Filho @ 2021-04-27 0:12 UTC (permalink / raw) To: Carlos; +Cc: rust-for-linux On Mon, Apr 26, 2021 at 07:02:07PM -0500, Carlos wrote: > Semaphores are the first missing primitive that caught my attention, and > being such an important part of the kernel itself, I will make exposing > this functionality my first priority instead. If the semaphores are used only for mutual exclusion, then you may want to just use a mutex or spinlock that are already there. But that's only if you're primarily interested in getting a rust scull to work first. If you actually want to implement semaphores, go for it! ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 0:12 ` Wedson Almeida Filho @ 2021-04-27 1:43 ` Samantha Miller 2021-04-27 11:00 ` Sven Van Asbroeck 1 sibling, 0 replies; 7+ messages in thread From: Samantha Miller @ 2021-04-27 1:43 UTC (permalink / raw) Cc: rust-for-linux I don't think this sent last time, but sorry for the spam if it did For my research project writing a safe Rust file system in the kernel, I implemented RwLock as a wrapper around the kernel semaphore. I'm not sure if it'll be exactly what you want, but feel free to use it as a reference or more. The RwLock is here: https://gitlab.cs.washington.edu/sm237/bento/-/blob/master/bento/rust/src/std/sync/rwlock.rs. You can do a similar thing for a spinlock wrapper around the kernel spinlock, I believe. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 0:12 ` Wedson Almeida Filho 2021-04-27 1:43 ` Samantha Miller @ 2021-04-27 11:00 ` Sven Van Asbroeck 1 sibling, 0 replies; 7+ messages in thread From: Sven Van Asbroeck @ 2021-04-27 11:00 UTC (permalink / raw) To: Wedson Almeida Filho; +Cc: Carlos, rust-for-linux On Mon, Apr 26, 2021 at 8:13 PM Wedson Almeida Filho <wedsonaf@google.com> wrote: > > If the semaphores are used only for mutual exclusion, then you may want to just > use a mutex or spinlock that are already there. But that's only if you're > primarily interested in getting a rust scull to work first. (My apologies for not reading Wedson's message before hitting Reply) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 0:02 Exposing semaphores Carlos 2021-04-27 0:08 ` Alex Gaynor 2021-04-27 0:12 ` Wedson Almeida Filho @ 2021-04-27 10:18 ` Sven Van Asbroeck 2021-04-27 10:58 ` Greg KH 2 siblings, 1 reply; 7+ messages in thread From: Sven Van Asbroeck @ 2021-04-27 10:18 UTC (permalink / raw) To: Carlos; +Cc: rust-for-linux Hi Carlos, On Mon, Apr 26, 2021 at 8:02 PM Carlos <carloscarral13@gmail.com> wrote: > > I recently began assessing what functionality from the kernel is missing > for implementing a basic scull driver. > > Semaphores are the first missing primitive that caught my attention, and > being such an important part of the kernel itself, I will make exposing > this functionality my first priority instead. Isn't scull's semaphore used exclusively in mutex mode, i.e. initialized using init_MUTEX? If so, prefer "struct mutex" instead. At the time scull was written (over 15 years ago) it did not yet exist. A Rust-for-Linux abstraction is already available: https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/sync/mutex.rs This is before my time, but I believe that the use of "bare" struct semaphores in drivers used to be a common anti-pattern, often resulting in buggy code and/or performance issues - most semaphores have been replaced by conceptually safer, higher-level primitives, and today one needs a valid excuse to use them in new or even refactored driver code. But I do not know the full story. Sven ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Exposing semaphores 2021-04-27 10:18 ` Sven Van Asbroeck @ 2021-04-27 10:58 ` Greg KH 0 siblings, 0 replies; 7+ messages in thread From: Greg KH @ 2021-04-27 10:58 UTC (permalink / raw) To: Sven Van Asbroeck; +Cc: Carlos, rust-for-linux On Tue, Apr 27, 2021 at 06:18:52AM -0400, Sven Van Asbroeck wrote: > Hi Carlos, > > On Mon, Apr 26, 2021 at 8:02 PM Carlos <carloscarral13@gmail.com> wrote: > > > > I recently began assessing what functionality from the kernel is missing > > for implementing a basic scull driver. > > > > Semaphores are the first missing primitive that caught my attention, and > > being such an important part of the kernel itself, I will make exposing > > this functionality my first priority instead. > > Isn't scull's semaphore used exclusively in mutex mode, i.e. > initialized using init_MUTEX? > > If so, prefer "struct mutex" instead. At the time scull was written > (over 15 years ago) it did not yet exist. > A Rust-for-Linux abstraction is already available: > https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/sync/mutex.rs > > This is before my time, but I believe that the use of "bare" struct > semaphores in drivers used to be a common anti-pattern, often > resulting in buggy code and/or performance issues - most semaphores > have been replaced by conceptually safer, higher-level primitives, and > today one needs a valid excuse to use them in new or even refactored > driver code. But I do not know the full story. I agree, never try to ab-use a semaphore in the way we did it in the book, that is not a good "pattern" to follow for the majority of kernel drivers. A simple mutex should be all that is necessary. But also, while the CUSE driver has a lot of history, it really was only created as an example to show how things could work, it isn't all that useful in the real world :) thanks, greg k-h ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-04-27 11:00 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-27 0:02 Exposing semaphores Carlos 2021-04-27 0:08 ` Alex Gaynor 2021-04-27 0:12 ` Wedson Almeida Filho 2021-04-27 1:43 ` Samantha Miller 2021-04-27 11:00 ` Sven Van Asbroeck 2021-04-27 10:18 ` Sven Van Asbroeck 2021-04-27 10:58 ` Greg KH
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).