From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Richard Cochran <richardcochran@gmail.com>,
netdev@vger.kernel.org,
Vadim Fedorenko <vadim.fedorenko@linux.dev>,
Paolo Abeni <pabeni@redhat.com>, Jakub Kicinski <kuba@kernel.org>
Subject: [patch V2 13/13] ptp: Simplify ptp_read()
Date: Wed, 25 Jun 2025 13:52:39 +0200 (CEST) [thread overview]
Message-ID: <20250625115133.486953538@linutronix.de> (raw)
In-Reply-To: <20250625114404.102196103@linutronix.de>
The mixture of gotos and direct return codes is inconsistent and just makes
the code harder to read. Let it consistently return error codes directly and
tidy the code flow up accordingly.
No functional change intended.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
V2: Fix the return value - Paolo
Drop the __free() part - Jakub
---
drivers/ptp/ptp_chardev.c | 54 +++++++++++++---------------------------------
1 file changed, 16 insertions(+), 38 deletions(-)
--- a/drivers/ptp/ptp_chardev.c
+++ b/drivers/ptp/ptp_chardev.c
@@ -106,8 +106,7 @@ int ptp_set_pinfunc(struct ptp_clock *pt
int ptp_open(struct posix_clock_context *pccontext, fmode_t fmode)
{
- struct ptp_clock *ptp =
- container_of(pccontext->clk, struct ptp_clock, clock);
+ struct ptp_clock *ptp = container_of(pccontext->clk, struct ptp_clock, clock);
struct timestamp_event_queue *queue;
char debugfsname[32];
@@ -536,67 +535,46 @@ long ptp_ioctl(struct posix_clock_contex
ssize_t ptp_read(struct posix_clock_context *pccontext, uint rdflags,
char __user *buf, size_t cnt)
{
- struct ptp_clock *ptp =
- container_of(pccontext->clk, struct ptp_clock, clock);
+ struct ptp_clock *ptp = container_of(pccontext->clk, struct ptp_clock, clock);
struct timestamp_event_queue *queue;
struct ptp_extts_event *event;
- int result;
+ ssize_t result;
queue = pccontext->private_clkdata;
- if (!queue) {
- result = -EINVAL;
- goto exit;
- }
+ if (!queue)
+ return -EINVAL;
- if (cnt % sizeof(struct ptp_extts_event) != 0) {
- result = -EINVAL;
- goto exit;
- }
+ if (cnt % sizeof(*event) != 0)
+ return -EINVAL;
if (cnt > EXTTS_BUFSIZE)
cnt = EXTTS_BUFSIZE;
- cnt = cnt / sizeof(struct ptp_extts_event);
-
- if (wait_event_interruptible(ptp->tsev_wq,
- ptp->defunct || queue_cnt(queue))) {
+ if (wait_event_interruptible(ptp->tsev_wq, ptp->defunct || queue_cnt(queue)))
return -ERESTARTSYS;
- }
- if (ptp->defunct) {
- result = -ENODEV;
- goto exit;
- }
+ if (ptp->defunct)
+ return -ENODEV;
event = kmalloc(EXTTS_BUFSIZE, GFP_KERNEL);
- if (!event) {
- result = -ENOMEM;
- goto exit;
- }
+ if (!event)
+ return -ENOMEM;
scoped_guard(spinlock_irq, &queue->lock) {
- size_t qcnt = queue_cnt(queue);
-
- if (cnt > qcnt)
- cnt = qcnt;
+ size_t qcnt = min((size_t)queue_cnt(queue), cnt / sizeof(*event));
- for (size_t i = 0; i < cnt; i++) {
+ for (size_t i = 0; i < qcnt; i++) {
event[i] = queue->buf[queue->head];
/* Paired with READ_ONCE() in queue_cnt() */
WRITE_ONCE(queue->head, (queue->head + 1) % PTP_MAX_TIMESTAMPS);
}
+ cnt = qcnt * sizeof(*event);
}
- cnt = cnt * sizeof(struct ptp_extts_event);
-
result = cnt;
- if (copy_to_user(buf, event, cnt)) {
+ if (copy_to_user(buf, event, cnt))
result = -EFAULT;
- goto free_event;
- }
-free_event:
kfree(event);
-exit:
return result;
}
next prev parent reply other threads:[~2025-06-25 11:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-25 11:52 [patch V2 00/13] ptp: Belated spring cleaning of the chardev driver Thomas Gleixner
2025-06-25 11:52 ` [patch V2 01/13] ptp: Split out PTP_CLOCK_GETCAPS ioctl code Thomas Gleixner
2025-06-25 11:52 ` [patch V2 02/13] ptp: Split out PTP_EXTTS_REQUEST " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 03/13] ptp: Split out PTP_PEROUT_REQUEST " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 04/13] ptp: Split out PTP_ENABLE_PPS " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 05/13] ptp: Split out PTP_SYS_OFFSET_PRECISE " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 06/13] ptp: Split out PTP_SYS_OFFSET_EXTENDED " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 07/13] ptp: Split out PTP_SYS_OFFSET " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 08/13] ptp: Split out PTP_PIN_GETFUNC " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 09/13] ptp: Split out PTP_PIN_SETFUNC " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 10/13] ptp: Split out PTP_MASK_CLEAR_ALL " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 11/13] ptp: Split out PTP_MASK_EN_SINGLE " Thomas Gleixner
2025-06-25 11:52 ` [patch V2 12/13] ptp: Convert chardev code to lock guards Thomas Gleixner
2025-06-25 11:52 ` Thomas Gleixner [this message]
2025-06-25 14:40 ` [patch V2 00/13] ptp: Belated spring cleaning of the chardev driver Richard Cochran
2025-06-25 16:05 ` Thomas Gleixner
2025-06-25 16:11 ` Richard Cochran
2025-06-27 1:00 ` patchwork-bot+netdevbpf
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=20250625115133.486953538@linutronix.de \
--to=tglx@linutronix.de \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=vadim.fedorenko@linux.dev \
/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
all inboxes | Powered by JetHome®