Message ID | 20240514041223.800811-1-foxhoundsk.tw@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | docs: gpio: prefer pread(2) for interrupt reading | expand |
On Mon, May 27, 2024 at 9:05 AM Huichun Feng <foxhoundsk.tw@gmail.com> wrote: > > Kindly ping. > > Sorry that the last ping wasn't sent in plain text. > > Please don't ping me on the morning of the day after the merge window closes. I don't pick up patches for the next release during the merge window (like most maintainers) and I need some time to catch up on my queue during rc1. Bart
On Tue, May 14, 2024 at 6:12 AM Huichun Feng <foxhoundsk.tw@gmail.com> wrote: > > In legacy sysfs GPIO, when using poll(2) on the sysfs GPIO value for > state change awaiting, a subsequent read(2) is required for consuming > the event, which the doc recommends the use of lseek(2) or > close-and-reopen to reset the file offset afterwards. > > The recommendations however, require at least 2 syscalls to consume > the event. Gladly, use of pread(2) require only 1 syscall for the > consumption. Let's advertise this usage by prioritizing its placement. > > Signed-off-by: Huichun Feng <foxhoundsk.tw@gmail.com> > --- This doesn't apply on top of gpio/for-next, please rebase and resend. Bart
diff --git a/Documentation/driver-api/gpio/legacy.rst b/Documentation/driver-api/gpio/legacy.rst index b6505914791c..c1a083444b0c 100644 --- a/Documentation/driver-api/gpio/legacy.rst +++ b/Documentation/driver-api/gpio/legacy.rst @@ -648,8 +648,10 @@ and have the following read/write attributes: poll(2) will return whenever the interrupt was triggered. If you use poll(2), set the events POLLPRI. If you use select(2), set the file descriptor in exceptfds. After poll(2) returns, - either lseek(2) to the beginning of the sysfs file and read the - new value or close the file and re-open it to read the value. + use pread(2) to read the value at offset zero. Alternatively, + either lseek(2) to the beginning of the sysfs file and read + the new value or close the file and re-open it to read the + value. "edge" ... reads as either "none", "rising", "falling", or "both". Write these strings to select the signal edge(s) diff --git a/Documentation/userspace-api/gpio/sysfs.rst b/Documentation/userspace-api/gpio/sysfs.rst index 116921048b18..bd64896de91a 100644 --- a/Documentation/userspace-api/gpio/sysfs.rst +++ b/Documentation/userspace-api/gpio/sysfs.rst @@ -97,9 +97,10 @@ and have the following read/write attributes: poll(2) will return whenever the interrupt was triggered. If you use poll(2), set the events POLLPRI and POLLERR. If you use select(2), set the file descriptor in exceptfds. After - poll(2) returns, either lseek(2) to the beginning of the sysfs - file and read the new value or close the file and re-open it - to read the value. + poll(2) returns, use pread(2) to read the value at offset + zero. Alternatively, either lseek(2) to the beginning of the + sysfs file and read the new value or close the file and + re-open it to read the value. "edge" ... reads as either "none", "rising", "falling", or
In legacy sysfs GPIO, when using poll(2) on the sysfs GPIO value for state change awaiting, a subsequent read(2) is required for consuming the event, which the doc recommends the use of lseek(2) or close-and-reopen to reset the file offset afterwards. The recommendations however, require at least 2 syscalls to consume the event. Gladly, use of pread(2) require only 1 syscall for the consumption. Let's advertise this usage by prioritizing its placement. Signed-off-by: Huichun Feng <foxhoundsk.tw@gmail.com> --- Documentation/driver-api/gpio/legacy.rst | 6 ++++-- Documentation/userspace-api/gpio/sysfs.rst | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-)