From nobody Wed Apr 1 21:31:43 2026 Received: from enterprise01.smtp.diehl.com (enterprise01.smtp.diehl.com [193.201.238.219]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A39DF1E9B3C; Mon, 3 Mar 2025 08:05:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.201.238.219 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740989121; cv=none; b=G1kRiymyb075BWsd9nT7y7sFqWvkg4obUpyQCiTak9QDzTAFJJj4O6tJEjDYV6YRWZzTBYwklCnQ4/huD3mKxJa1KzHQOW4twuOFhtm3eZIJiWmjG6KlEdYUhtVTZUn7JSVQTYKOprRnpDHjVynMLMMplJYPrjyVxezxencijEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740989121; c=relaxed/simple; bh=UK/tA22zmyaxSkT4eckr4JBqqqNE2ElQdzBIYYiXgYM=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=jJIYpfe/q9Epg6+Xp9kH1fDFLaboXCl/l6hPtyXCeiBjbZJlKlQUucaS2OB4xCAYkPUOiXjUsh5QHSLsaXw9GTaSrJf1X0sBjJy2qYxOfowBSexKqoB7bD8NAcQRF0OKMlbs/JBe1Iz7dJtBXjaJTajEnpkYXyVW95nLBiRMvjw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=diehl.com; spf=pass smtp.mailfrom=diehl.com; dkim=pass (2048-bit key) header.d=diehl.com header.i=@diehl.com header.b=q6wpYuBZ; arc=none smtp.client-ip=193.201.238.219 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=diehl.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=diehl.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=diehl.com header.i=@diehl.com header.b="q6wpYuBZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=diehl.com; i=@diehl.com; q=dns/txt; s=default; t=1740989119; x=1772525119; h=from:to:cc:subject:date:message-id: content-transfer-encoding:mime-version; bh=UK/tA22zmyaxSkT4eckr4JBqqqNE2ElQdzBIYYiXgYM=; b=q6wpYuBZwCP176LD8Nf1d8/9xU5Dud6sEMPBCofG7j7bLGka1ilNJI+D vMl9QtBYxmvnlPcpMR5NJ3Hys4ePtXwudyYnyVg5dBisv2EqRf7ewwEWh muRJ12G6V3i2Nu4sZ0gKCBhjL6I3WaLipS4MQHm8/2NE6M42O/Kd06jOL hSG71fZzrPNE3D6ZWIxbN0qC5cfs8lz5Q0ZgYE/jacJDI2pdN1uNwbQLM 6UfxOwFRut9yz9K7KlzUVrXpJwvguS+KmlbLdZb4mBBpZlg6wwduvAnHd 9a5XRskF/MEZ+ARDIFa7KLWB/yoSYElSrlzxG5tFjTHMaiYxsjgPveO6g g==; X-CSE-ConnectionGUID: 9bLDDy9JSmilP2KQQCS5Cw== X-CSE-MsgGUID: DCldqlNpSfKkBLJ6Fxr7zw== X-ThreatScanner-Verdict: Negative IronPort-Data: A9a23:3Ici+a9nbHVqbu7qVlsbDrUDg3+TJUtcMsCJ2f8bNWPcYEJGY0x3z GoXCG3XOfqKZzb3ed8jO4XjoR5TsMDdm9djS1FuqisxFiIbosf7XtnIdU2Y0wF+jCHgZB89s 59OOoGowOQcFCK0SsKFa+C5xZVE/fjWAOK6UKicZ3wZqTZMEE8JkQhkl/MynrlmiN24BxLlk d7pqqUzAnf8s9JPGjxSsvnrRC9H5qyo5WtD5gdmPJingXeF/5UrJMNGTU2OByugKmVkNrbSb /rOyri/4lTY838FYvu5kqz2e1E9WbXbOw6DkBJ+A8BOVTAb+0Teeo5iXBYtQR8/Zwehxrid+ /0U3XCEcjrFC4WX8Agrv7u0JAklVUFO0OevzXFSKqV/xWWeG5fn660G4E3boeT0Uwu4aI1D3 aVwFdwDUvyMr7O85J6XW7hOvcEiKPGxH7omkUo95i6MWJ7KQbibK0nLzeVz8Bx1o+lvOa2GI cEecyIpYBXNYxkJMVASYH48tL7wwCCiKHsD7gvO/cLb4ECKpOB1+LTgNtvOPNuRWchPmk+eq krK/mn5BlcRM9n3JT+tqyvw17GXxnqlMG4UPJGT8vJzhHuL/WIwCzcydwWVsePmmFHrDrqzL GRRoELCt5Ma+02sS9ThQxyQrXiCsxMaXdcWGOo/gCmJy6zJ80OaC3ICQzppdtMrrok1SCYs2 1vPmMnmbRR0rLSfTX+16LiZt3WxNDITIGtEYjULJTbp+PG6+Mdq00mJFZA6S/bdYsDJJAwcC gui9EAW74j/R+ZRv0ln1TgrWw6Rm6U= IronPort-HdrOrdr: A9a23:9tqQW6O3I1ERDcBcTjejsMiBIKoaSvp037By7TEVdfRUGvb2qy ncpoV+6faSskdqZJhAo6H6BEDuewK+yXcY2+Qs1NSZLXTbUQmTXeNfBOLZqlWKcREWndQy6U 4USchD4arLbGSS4/yX3CCIV/gK+p2/y4aD7N2us0tFfEVFQJsl1jxeICW8OSRNNXZ77NECZf 2hD4J81lydUGVSY8SgDHwMX+zOvMTRkpjrewQLCnccmXGzZB2TmcfHLyQ= X-Talos-CUID: 9a23:FMK4PGyOOQxYopXpLCnUBgVFEOQJXmyM7kzVIkuAU0VQcZauFHSPrfY= X-Talos-MUID: =?us-ascii?q?9a23=3AzMAKFw96bZxEDlk81xz5s+uQf+tD56i3DGYVqps?= =?us-ascii?q?luOOgF3JeKy3CniviFw=3D=3D?= X-IronPort-AV: E=Sophos;i="6.13,329,1732575600"; d="scan'208";a="114960316" From: Denis OSTERLAND-HEIM To: Rodolfo Giometti CC: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" Subject: [PATCH] pps: fix poll support Thread-Topic: [PATCH] pps: fix poll support Thread-Index: AduMEuWWjZq5gVT8TFeQQ5VVonTADA== Date: Mon, 3 Mar 2025 08:05:16 +0000 Message-ID: <1685f34c60384aadab4f87ffb3303755@diehl.com> Accept-Language: de-DE, en-US Content-Language: de-DE X-MS-Has-Attach: X-MS-TNEF-Correlator: x-disclaimerprocessed: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GBS-PROC: JH31JkgOAVpzNaKNEwNMTZD10pQpBCF/FwmdsWj+MxeMaScRc3cd0m42Vjc9X9Nt X-GBS-PROCJOB: V0DzXfKTxAGyax/Zn/Lb7c/WcXd6SeP58GoaHo6Kh3wB/dxpQyMKb+Zx2kQ3+2Wq [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 =3D { .fd =3D open("/dev/pps0", O_RDONLY), .events =3D POLLIN|POLLERR, .revents =3D 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 Co-developed-by: Rodolfo Giometti Signed-off-by: Rodolfo Giometti Fixes: eae9d2ba0cfc ("LinuxPPS: core support") CC: stable@vger.kernel.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_tab= le *wait) poll_wait(file, &pps->queue, wait); +if (pps->last_fetched_ev =3D=3D 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 =3D pps->last_ev; + fdata.info.assert_sequence =3D pps->assert_sequence; fdata.info.clear_sequence =3D pps->clear_sequence; fdata.info.assert_tu =3D 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 =3D pps->last_ev; + compat.info.assert_sequence =3D pps->assert_sequence; compat.info.clear_sequence =3D pps->clear_sequence; compat.info.current_mode =3D 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 */ -- 2.47.2 Diehl Metering GmbH, Donaustrasse 120, 90451 Nuernberg Sitz der Gesellschaft: Ansbach, Registergericht: Ansbach HRB 69 Geschaeftsfuehrer: Dr. Christof Bosbach (Sprecher), Dipl.-Dolm. Annette Geu= ther, Dipl.-Kfm. Reiner Edel, Jean-Claude Luttringer Bitte denken Sie an die Umwelt, bevor Sie diese E-Mail drucken. Diese E-Mai= l kann vertrauliche Informationen enthalten. Sollten die in dieser E-Mail e= nthaltenen Informationen nicht f=C3=BCr Sie bestimmt sein, informieren Sie = bitte unverzueglich den Absender per E-Mail und loeschen Sie diese E-Mail i= n Ihrem System. Jede unberechtigte Form der Reproduktion, Bekanntgabe, Aend= erung, Verteilung und/oder Publikation dieser E-Mail ist strengstens unters= agt. Informationen zum Datenschutz finden Sie auf unserer Homepage. Before printing, think about environmental responsibility.This message may = contain confidential information. If you are not authorized to receive this= information please advise the sender immediately by reply e-mail and delet= e this message without making any copies. Any form of unauthorized use, pub= lication, reproduction, copying or disclosure of the e-mail is not permitte= d. Information about data protection can be found on our homepage.