From nobody Sat Feb 7 17:08:51 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 35C3E1E0B62 for ; Mon, 20 Jan 2025 13:13:15 +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=1737378800; cv=none; b=EqMlHlvQvJsGqsMmR59MS6TkN9/kqd95MDCBAY1Fb+ajZCBEUBq6Eng3b280oDQqP9T877bgp69XV47HFFyYTcT6xCzQkB/JafMzzfecTH9fP6kuz0T912q1cDtw3WqSQ+l4TgZ0doGOGoGojHo/VbXtRA8jarO4epLw40NIxKE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737378800; c=relaxed/simple; bh=tf1a/WdmOhqZh4jxqkqQi8tUOCPdEYhjuPj7AuNPMAk=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=slxVzclld7vWc8kuHcNcQAyhfxR7RkA4MY9BlYJPJz7Zr7lDvOXlPTZD3sXz+7dtwb19lp3PruhfFaba4GTgqmr8PoqvBsD07RDnSaixWSqXMh3BmPCgjtWnimTJJBNy2/B8NShq5/yBBKPBXdhXOdBVlrUDunXPVfbjkI/cRn8= 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=Gzkjk9i4; 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="Gzkjk9i4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=diehl.com; i=@diehl.com; q=dns/txt; s=default; t=1737378797; x=1768914797; h=from:to:cc:subject:date:message-id: content-transfer-encoding:mime-version; bh=tf1a/WdmOhqZh4jxqkqQi8tUOCPdEYhjuPj7AuNPMAk=; b=Gzkjk9i4ZiVEDQxX4fneuoTd/IfsdoOhgXXP7A+jMzhVrhlu1H0kaEow xeV5111jnPu62Gs/9+gAdBT1ppHEV7UgB3KWVk4XphTMnbBDzBQa8GNGp dzkJ37cvV+gxaJvZ9UmCbC0sqvhaXupK8gRSQ+Ns8QSWzvUip9TBdics8 6ZjmYP8ERdcZKYg43Nn4110Wibk91pOz20Y09/Y5o1eOpCUpBns5vimUf 8bVGU1DxatNtpKIpw3fPSW2p+Jzl4KVkXYaPkv7zouPv0kqOtMEdJOBS7 zLV0H2R7kp7XE3iMCElvELqg6GOgxgaqbuz6mK92ETTOOeOozXfgwe+Du Q==; X-CSE-ConnectionGUID: aY0s01kzQE6HML4JZ0ydDQ== X-CSE-MsgGUID: tcDiPQFPRzGA6fsXZyNsuw== X-ThreatScanner-Verdict: Negative IronPort-Data: A9a23:hSoRqqDbTyiJORVW/0Piw5YqxClBgxIJ4kV8jS/XYbTApDtx0jUFy DROX2GBPfeJMTbzL4h+at638BgF6MPWn95qTANkpHpgcSlH+JHPbTi7wuUcHAvPdJGZHBI/h yk6QoOdRCzhZiaE/n9BCpC48z8kk/nOHuekYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArlV ena+qUzA3f7nWcvWo4ow/jb8k435a6q4GpwUmEWPpingnePzhH5M7pPfcldH1OgKqFIE+izQ fr0zb3R1gvx4xc3B9q5pa3we0sMT6S6FVDmZq1+AvXKbrBq/0Te445jXBYuQR4/Zwahxrid/ O5wWamYEm/FCEFudNM1CHG0GwkmVUFPFSSuzXKX6aR/xGWeG5fgLmkH4Ojb8uT0984uaVyi+ 8D0JxgEX0iY37u10ouWFMlJopgBHpH6MK8m7yQIITHxVZ7KQLj5aInhoPpR3TNq3oZFGuzGI cYYZDprKh/HZnWjOH9OUNRnwbzu3T+mKWUwRFG9/MLb50DfwQpwy/7qK8bYYNiDQ8l9kkeVp maA9GP8av0fHIXGkWfZrSn814cjmwvnU64TLISWzsR4r3TNyHcjOgwwTkak9KzRZkmWHog3x 1Yv0iUvqq0/6FCqZtT7WRC1pniJ+BUbXrJ4F+w89RHIyafO5QudLnYLQyQHa9E8ssIyAzsw2 Te0c8jBXGQp6eDODynbr+3Mxd+vBRUowaY5TXdsZWM4DxPL+tlbYs7nJjq7LJOIsw== IronPort-HdrOrdr: A9a23:BY81j6oIUs/2urSGyTxhxEoaV5rFeYIsimQD101hICG9Kvbo8/ xHnJwguyMc+wxhP03I/urwRZVoIEmsj6KdjrNhX4tKMDOLhILKFvAf0WKB+UyEJ8SWzIc0vs 0MT0EXMqyOMbEQt6fHCXyDYrUdKa68kJxA692w815dCS9AUeVY1CFSYzzrbHFedU1pLqB8La G7zOlgjFObCAUqh4+Adx84tqD41qT2vYOjbB4dDRsu6A2Dliqy7rT3CQKV034lIkhyKJkZgB D4rzA= X-Talos-CUID: 9a23:0vtWXGPMDfKMhu5DURg/7xZNGdIcXyP96VOMAX3gGGpFcejA X-Talos-MUID: =?us-ascii?q?9a23=3AiYE87w16XmGCyDH9kneNbN+zHTUj/6+CCXg0v60?= =?us-ascii?q?8qeatayJrCwWMqi+qXdpy?= X-IronPort-AV: E=Sophos;i="6.13,219,1732575600"; d="scan'208";a="110547389" From: Denis OSTERLAND-HEIM To: Rodolfo Giometti CC: "linux-kernel@vger.kernel.org" Subject: [PATCH] pps: add epoll support Thread-Topic: [PATCH] pps: add epoll support Thread-Index: AdtrPJ8dFss+cQ6wRo6ib2qwaOFO/w== Date: Mon, 20 Jan 2025 13:10:44 +0000 Message-ID: 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: AvLZyVEBsXnffHjQqcUo3BPXdOuOcHbxCZQABZoXoyExvZGSvBMvlyh/42DP84iEAOlzWowXMviF9GOCXKPHBSu0vYG/Mq+N5mQ3tiyFNGw= X-GBS-PROCJOB: /tb2F1aQeagfT8s5Qcwf1yuTyJAvSt1Jc2F2ZOzNLCeQwCmFabQdMJyiJPD6ABsC This patch adds pps_context to store the per file read counter. Signed-off-by: Denis Osterland-Heim --- drivers/pps/pps.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c index 25d47907db17..b5834c592e2a 100644 --- a/drivers/pps/pps.c +++ b/drivers/pps/pps.c @@ -21,6 +21,12 @@ #include "kc.h" +struct pps_context { +struct pps_device *pps; +unsigned int ev; +}; + + /* * Local variables */ @@ -37,17 +43,19 @@ static DEFINE_IDR(pps_idr); static __poll_t pps_cdev_poll(struct file *file, poll_table *wait) { -struct pps_device *pps =3D file->private_data; +struct pps_context *ctx =3D file->private_data; +struct pps_device *pps =3D ctx->pps; poll_wait(file, &pps->queue, wait); -return EPOLLIN | EPOLLRDNORM; +return (ctx->ev !=3D pps->last_ev) ? (EPOLLIN | EPOLLRDNORM) : 0; } static int pps_cdev_fasync(int fd, struct file *file, int on) { -struct pps_device *pps =3D file->private_data; -return fasync_helper(fd, file, on, &pps->async_queue); +struct pps_context *ctx =3D file->private_data; + +return fasync_helper(fd, file, on, &ctx->pps->async_queue); } static int pps_cdev_pps_fetch(struct pps_device *pps, struct pps_fdata *fd= ata) @@ -90,7 +98,8 @@ static int pps_cdev_pps_fetch(struct pps_device *pps, str= uct pps_fdata *fdata) static long pps_cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { -struct pps_device *pps =3D file->private_data; +struct pps_context *ctx =3D file->private_data; +struct pps_device *pps =3D ctx->pps; struct pps_kparams params; void __user *uarg =3D (void __user *) arg; int __user *iuarg =3D (int __user *) arg; @@ -189,6 +198,7 @@ static long pps_cdev_ioctl(struct file *file, /* Return the fetched timestamp */ spin_lock_irq(&pps->lock); +ctx->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; @@ -249,7 +259,8 @@ static long pps_cdev_ioctl(struct file *file, static long pps_cdev_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { -struct pps_device *pps =3D file->private_data; +struct pps_context *ctx =3D file->private_data; +struct pps_device *pps =3D ctx->pps; void __user *uarg =3D (void __user *) arg; cmd =3D _IOC(_IOC_DIR(cmd), _IOC_TYPE(cmd), _IOC_NR(cmd), sizeof(void *)); @@ -275,6 +286,7 @@ static long pps_cdev_compat_ioctl(struct file *file, /* Return the fetched timestamp */ spin_lock_irq(&pps->lock); +ctx->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; @@ -300,7 +312,13 @@ static int pps_cdev_open(struct inode *inode, struct f= ile *file) { struct pps_device *pps =3D container_of(inode->i_cdev, struct pps_device, cdev); -file->private_data =3D pps; +struct pps_context *ctx =3D kzalloc(sizeof(struct pps_context), GFP_KERNEL= ); + +if (unlikely(ZERO_OR_NULL_PTR(ctx))) +return -ENOMEM; +file->private_data =3D ctx; +ctx->pps =3D pps; +ctx->ev =3D pps->last_ev; kobject_get(&pps->dev->kobj); return 0; } @@ -309,6 +327,7 @@ static int pps_cdev_release(struct inode *inode, struct= file *file) { struct pps_device *pps =3D container_of(inode->i_cdev, struct pps_device, cdev); +kfree(file->private_data); kobject_put(&pps->dev->kobj); return 0; } -- 2.45.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.