From: Denis OSTERLAND-HEIM <denis.osterland@diehl.com>
To: Rodolfo Giometti <giometti@enneenne.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: RE: Re: [PATCH] pps: fix poll support
Date: Thu, 3 Apr 2025 08:06:11 +0200 (CEST) [thread overview]
Message-ID: <0231dfc22dd34a5aaee09a6a19074de1@diehl.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3991 bytes --]
Hi Rodolfo,
Do you think that there is a chance that this patch make it in the current merge window?
Regards Denis
-----Original Message-----
From: Rodolfo Giometti <giometti@enneenne.com>
Sent: Monday, March 3, 2025 12:54 PM
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>; Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org; Denis OSTERLAND-HEIM <denis.osterland@diehl.com>; stable@vger.kernel.org
Subject: [EXT] Re: [PATCH] pps: fix poll support
[EXTERNAL EMAIL]
On 03/03/25 09:02, Denis OSTERLAND-HEIM wrote:
> [BUG]
> A user space program that calls select/poll get always an immediate data
> ready-to-read response. As a result the intended use to wait until next
> data becomes ready does not work.
>
> User space snippet:
>
> struct pollfd pollfd = {
> .fd = open("/dev/pps0", O_RDONLY),
> .events = POLLIN|POLLERR,
> .revents = 0 };
> while(1) {
> poll(&pollfd, 1, 2000/*ms*/); // returns immediate, but should wait
> if(revents & EPOLLIN) { // always true
> struct pps_fdata fdata;
> memset(&fdata, 0, sizeof(memdata));
> ioctl(PPS_FETCH, &fdata); // currently fetches data at max speed
> }
> }
>
> [CAUSE]
> pps_cdev_poll() returns unconditionally EPOLLIN.
>
> [FIX]
> Remember the last fetch event counter and compare this value in
> pps_cdev_poll() with most recent event counter
> and return 0 if they are equal.
>
> Signed-off-by: Denis OSTERLAND-HEIM <denis.osterland@diehl.com>
> Co-developed-by: Rodolfo Giometti <giometti@enneenne.com>
> Signed-off-by: Rodolfo Giometti <giometti@enneenne.com>
Acked-by: Rodolfo Giometti <giometti@enneenne.com>
If needed. :)
> Fixes: eae9d2ba0cfc ("LinuxPPS: core support")
> CC: stable@vger.linux.org # 5.4+
> ---
> drivers/pps/pps.c | 11 +++++++++--
> include/linux/pps_kernel.h | 1 +
> 2 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
> index 6a02245ea35f..9463232af8d2 100644
> --- a/drivers/pps/pps.c
> +++ b/drivers/pps/pps.c
> @@ -41,6 +41,9 @@ static __poll_t pps_cdev_poll(struct file *file, poll_table *wait)
>
> poll_wait(file, &pps->queue, wait);
>
> + if (pps->last_fetched_ev == pps->last_ev)
> + return 0;
> +
> return EPOLLIN | EPOLLRDNORM;
> }
>
> @@ -186,9 +189,11 @@ static long pps_cdev_ioctl(struct file *file,
> if (err)
> return err;
>
> - /* Return the fetched timestamp */
> + /* Return the fetched timestamp and save last fetched event */
> spin_lock_irq(&pps->lock);
>
> + pps->last_fetched_ev = pps->last_ev;
> +
> fdata.info.assert_sequence = pps->assert_sequence;
> fdata.info.clear_sequence = pps->clear_sequence;
> fdata.info.assert_tu = pps->assert_tu;
> @@ -272,9 +277,11 @@ static long pps_cdev_compat_ioctl(struct file *file,
> if (err)
> return err;
>
> - /* Return the fetched timestamp */
> + /* Return the fetched timestamp and save last fetched event */
> spin_lock_irq(&pps->lock);
>
> + pps->last_fetched_ev = pps->last_ev;
> +
> compat.info.assert_sequence = pps->assert_sequence;
> compat.info.clear_sequence = pps->clear_sequence;
> compat.info.current_mode = pps->current_mode;
> diff --git a/include/linux/pps_kernel.h b/include/linux/pps_kernel.h
> index c7abce28ed29..aab0aebb529e 100644
> --- a/include/linux/pps_kernel.h
> +++ b/include/linux/pps_kernel.h
> @@ -52,6 +52,7 @@ struct pps_device {
> int current_mode; /* PPS mode at event time */
>
> unsigned int last_ev; /* last PPS event id */
> + unsigned int last_fetched_ev; /* last fetched PPS event id */
> wait_queue_head_t queue; /* PPS event queue */
>
> unsigned int id; /* PPS source unique ID */
--
GNU/Linux Solutions e-mail: giometti@enneenne.com
Linux Device Driver giometti@linux.it
Embedded Systems phone: +39 349 2432127
UNIX programming
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 6038 bytes --]
next reply other threads:[~2025-04-03 6:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-03 6:06 Denis OSTERLAND-HEIM [this message]
2025-04-03 7:49 ` [PATCH] pps: fix poll support Rodolfo Giometti
2025-04-10 7:42 ` Denis OSTERLAND-HEIM
2025-04-10 7:57 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0231dfc22dd34a5aaee09a6a19074de1@diehl.com \
--to=denis.osterland@diehl.com \
--cc=giometti@enneenne.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox