From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BBF525D54E; Wed, 25 Jun 2025 11:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852348; cv=none; b=foprUL2CCHUYU1pyxyBWFSClVePFjQlL/miNtOVMQd6s2qbXDd5aqDom3h5fLdwfM1H4MOoiRPHlGbTWUF37QfLhaEDcpjiY4pxkpXTVnE3fEI2lkg/LBWH3EeS6o88tz47192PpT1O2vyiyRgatsOPjAvVXpoC+w7TSoxrh43g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852348; c=relaxed/simple; bh=lEHlAvuwHbk61hVLfiINRcEUtVc65saw7z56pWvonJw=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=jMl1uC1gi0KcwD02v8pigUMGbmP6N9+hL05bTTjtXcLOBhy3eCq83e/j4187XZo2lI1HAGIqga3tGyh7lzSGzn8WqK7zyYJjhVtla/NSGHO2yquJkk+UR5C1ol92eHliqjFRTtgDk54yEm3pOVgKZeA6Lk7qbGB9YubOvtcOt0c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=lAgR/B8k; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=465TyfdJ; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="lAgR/B8k"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="465TyfdJ" Message-ID: <20250625115132.733409073@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852344; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=1hJNkfKuEr8uIdjN/w9vrjuqj1MLwRZ4soPhuqfiZj4=; b=lAgR/B8kThwn29SezeroF9JCmMsz+7VZ8OVtQaFk4NJv/Pm6Zc36fOzZd1AKIfpi7ztU1s pLGyHxbP9mqFqaMbLbDJppNAO4YZahjfGCWs32TcgSF681R3AvoJFoqOc7rvLCEiG4Yj18 Rg2FfoFpKkpLylAxnKbimU43vGanK549Fjga82zMyFPsdorYgWTIZbymVMokkdA3sT4BNq l5fQ2VgZmxU8pQOg/z6NbqhSyGc4pRzO0L1ywg772dzN79i4RwpX9zAFA2O0jRnokTE0+W gPdYVC4T0+3ZwS0mp6XSnqJYUITPuTKyRhOlIQ9GvlMK4nlWy9yaPoxkNGCLGA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852344; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=1hJNkfKuEr8uIdjN/w9vrjuqj1MLwRZ4soPhuqfiZj4=; b=465TyfdJSEJjCKYBPhrnvV2OzzFD1Q4z5NXk9t9AEcuWHy8Dp6VnOpM1QEaD2Y0ZtfTPwd 0u59mWS0Pn51WBDA== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 01/13] ptp: Split out PTP_CLOCK_GETCAPS ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:24 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ptp_ioctl() is an inpenetrable letter soup with a gazillion of case (scope) specific variables defined at the top of the function and pointless breaks and gotos. Start cleaning it up by splitting out the PTP_CLOCK_GETCAPS ioctl code into a helper function. Use a argument pointer with a single sparse compliant type cast instead of proliferating the type cast all over the place. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -157,6 +157,26 @@ int ptp_release(struct posix_clock_conte return 0; } =20 +static long ptp_clock_getcaps(struct ptp_clock *ptp, void __user *arg) +{ + struct ptp_clock_caps caps =3D { + .max_adj =3D ptp->info->max_adj, + .n_alarm =3D ptp->info->n_alarm, + .n_ext_ts =3D ptp->info->n_ext_ts, + .n_per_out =3D ptp->info->n_per_out, + .pps =3D ptp->info->pps, + .n_pins =3D ptp->info->n_pins, + .cross_timestamping =3D ptp->info->getcrosststamp !=3D NULL, + .adjust_phase =3D ptp->info->adjphase !=3D NULL && + ptp->info->getmaxphase !=3D NULL, + }; + + if (caps.adjust_phase) + caps.max_phase_adj =3D ptp->info->getmaxphase(ptp->info); + + return copy_to_user(arg, &caps, sizeof(caps)) ? -EFAULT : 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { @@ -171,37 +191,22 @@ long ptp_ioctl(struct posix_clock_contex struct timestamp_event_queue *tsevq; struct ptp_system_timestamp sts; struct ptp_clock_request req; - struct ptp_clock_caps caps; struct ptp_clock_time *pct; struct ptp_pin_desc pd; struct timespec64 ts; int enable, err =3D 0; + void __user *argptr; =20 if (in_compat_syscall() && cmd !=3D PTP_ENABLE_PPS && cmd !=3D PTP_ENABLE= _PPS2) arg =3D (unsigned long)compat_ptr(arg); + argptr =3D (void __force __user *)arg; =20 tsevq =3D pccontext->private_clkdata; =20 switch (cmd) { - case PTP_CLOCK_GETCAPS: case PTP_CLOCK_GETCAPS2: - memset(&caps, 0, sizeof(caps)); - - caps.max_adj =3D ptp->info->max_adj; - caps.n_alarm =3D ptp->info->n_alarm; - caps.n_ext_ts =3D ptp->info->n_ext_ts; - caps.n_per_out =3D ptp->info->n_per_out; - caps.pps =3D ptp->info->pps; - caps.n_pins =3D ptp->info->n_pins; - caps.cross_timestamping =3D ptp->info->getcrosststamp !=3D NULL; - caps.adjust_phase =3D ptp->info->adjphase !=3D NULL && - ptp->info->getmaxphase !=3D NULL; - if (caps.adjust_phase) - caps.max_phase_adj =3D ptp->info->getmaxphase(ptp->info); - if (copy_to_user((void __user *)arg, &caps, sizeof(caps))) - err =3D -EFAULT; - break; + return ptp_clock_getcaps(ptp, argptr); =20 case PTP_EXTTS_REQUEST: case PTP_EXTTS_REQUEST2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C537525D902; Wed, 25 Jun 2025 11:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852349; cv=none; b=uxJh4rxNSCYZJ9/c/+whwnm5AiyJptOZ7EmZVSODz+st4UkP5iLp4Fde3uDbqagDzbAMpmxbmUquwkrf3Tk6IW1oUZ7a6Y14MPr1g3PBf41cDge8dTMbtWzfYEYV2sCaaYENWBNszcmcfURo+bj0ezScTNRiDmFHvxIymLGkHls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852349; c=relaxed/simple; bh=Te8cBqBsLOX1CkL+Gcy/TPvGIvYXMYXsc1BBUgejKjQ=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=HM520ZfotXhX+04kwbyFHKDx2UYg/0l2agX1S+EPRj8Tqw9k0/ovVI2pLZYwf8hVtOXnkHuOKVGaz989FQlrkDJtYPlvxNaLQL7KaUfN9m0FLitvZw/OYYn2PxJ1sehhIZJusGMZ9B8uxoVRtWUPRnZG5UOK08GQUsewVoeXJl4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=xLiw7BZc; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Gd146kWW; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="xLiw7BZc"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Gd146kWW" Message-ID: <20250625115132.797588258@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852346; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=7ub7JXZ6WXRrKpJ8/+zHbcxpTgNDpFInfmDaA4xYFEg=; b=xLiw7BZcMPHWIWwlHsOWh5v4aE+MONUF0v8dddL8LcA+le8c2/JIRj1VRx+5Idg/AvE9go vpDZ2sbhDLrkAnU34/ELT3j0tVXw0cruxPoWq2510t2zu9mx3MZftm0BkeDisYs3KTIlnn MetatVhX9jK0nUelpY6gicnibnWPvtILXdJKS+4x8q80tDNoypZi58MgYMkCuY/VPuMnXc Q9wRcZQWuA6kg/TgTKeGEQ90JB3O1zqnGkPYhX2pVHsNNwjbWJ2GcGiAvu1HiuLSKTaGV3 +VnFYNIC7BjJJ4VOMIoBeHRXnZ0YhHydx8bV+ySy2AOSoGuNdsHbIn4nhgU9iA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852346; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=7ub7JXZ6WXRrKpJ8/+zHbcxpTgNDpFInfmDaA4xYFEg=; b=Gd146kWW3QgxNRtVxU5w3m56pE7BonyLLIbS/3qFer+FntRFQSgy9cBcHEJgaY8LfmM7Aa azoFAo6o7K0WVcDQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 02/13] ptp: Split out PTP_EXTTS_REQUEST ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:25 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_EXTTS_REQUEST ioctl code into a helper function. Convert to a lock guard while at it. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 105 +++++++++++++++++++++--------------------= ----- 1 file changed, 50 insertions(+), 55 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -177,12 +177,57 @@ static long ptp_clock_getcaps(struct ptp return copy_to_user(arg, &caps, sizeof(caps)) ? -EFAULT : 0; } =20 +static long ptp_extts_request(struct ptp_clock *ptp, unsigned int cmd, voi= d __user *arg) +{ + struct ptp_clock_request req =3D { .type =3D PTP_CLK_REQ_EXTTS }; + struct ptp_clock_info *ops =3D ptp->info; + unsigned int supported_extts_flags; + + if (copy_from_user(&req.extts, arg, sizeof(req.extts))) + return -EFAULT; + + if (cmd =3D=3D PTP_EXTTS_REQUEST2) { + /* Tell the drivers to check the flags carefully. */ + req.extts.flags |=3D PTP_STRICT_FLAGS; + /* Make sure no reserved bit is set. */ + if ((req.extts.flags & ~PTP_EXTTS_VALID_FLAGS) || + req.extts.rsv[0] || req.extts.rsv[1]) + return -EINVAL; + + /* Ensure one of the rising/falling edge bits is set. */ + if ((req.extts.flags & PTP_ENABLE_FEATURE) && + (req.extts.flags & PTP_EXTTS_EDGES) =3D=3D 0) + return -EINVAL; + } else { + req.extts.flags &=3D PTP_EXTTS_V1_VALID_FLAGS; + memset(req.extts.rsv, 0, sizeof(req.extts.rsv)); + } + + if (req.extts.index >=3D ops->n_ext_ts) + return -EINVAL; + + supported_extts_flags =3D ptp->info->supported_extts_flags; + /* The PTP_ENABLE_FEATURE flag is always supported. */ + supported_extts_flags |=3D PTP_ENABLE_FEATURE; + /* If the driver does not support strictly checking flags, the + * PTP_RISING_EDGE and PTP_FALLING_EDGE flags are merely hints + * which are not enforced. + */ + if (!(supported_extts_flags & PTP_STRICT_FLAGS)) + supported_extts_flags |=3D PTP_EXTTS_EDGES; + /* Reject unsupported flags */ + if (req.extts.flags & ~supported_extts_flags) + return -EOPNOTSUPP; + + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &ptp->pincfg_mux) + return ops->enable(ops, &req, req.extts.flags & PTP_ENABLE_FEATURE ? 1 := 0); +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); - unsigned int i, pin_index, supported_extts_flags; struct ptp_sys_offset_extended *extoff =3D NULL; struct ptp_sys_offset_precise precise_offset; struct system_device_crosststamp xtstamp; @@ -192,6 +237,7 @@ long ptp_ioctl(struct posix_clock_contex struct ptp_system_timestamp sts; struct ptp_clock_request req; struct ptp_clock_time *pct; + unsigned int i, pin_index; struct ptp_pin_desc pd; struct timespec64 ts; int enable, err =3D 0; @@ -210,60 +256,9 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_EXTTS_REQUEST: case PTP_EXTTS_REQUEST2: - if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) { - err =3D -EACCES; - break; - } - memset(&req, 0, sizeof(req)); - - if (copy_from_user(&req.extts, (void __user *)arg, - sizeof(req.extts))) { - err =3D -EFAULT; - break; - } - if (cmd =3D=3D PTP_EXTTS_REQUEST2) { - /* Tell the drivers to check the flags carefully. */ - req.extts.flags |=3D PTP_STRICT_FLAGS; - /* Make sure no reserved bit is set. */ - if ((req.extts.flags & ~PTP_EXTTS_VALID_FLAGS) || - req.extts.rsv[0] || req.extts.rsv[1]) { - err =3D -EINVAL; - break; - } - /* Ensure one of the rising/falling edge bits is set. */ - if ((req.extts.flags & PTP_ENABLE_FEATURE) && - (req.extts.flags & PTP_EXTTS_EDGES) =3D=3D 0) { - err =3D -EINVAL; - break; - } - } else if (cmd =3D=3D PTP_EXTTS_REQUEST) { - req.extts.flags &=3D PTP_EXTTS_V1_VALID_FLAGS; - req.extts.rsv[0] =3D 0; - req.extts.rsv[1] =3D 0; - } - if (req.extts.index >=3D ops->n_ext_ts) { - err =3D -EINVAL; - break; - } - supported_extts_flags =3D ptp->info->supported_extts_flags; - /* The PTP_ENABLE_FEATURE flag is always supported. */ - supported_extts_flags |=3D PTP_ENABLE_FEATURE; - /* If the driver does not support strictly checking flags, the - * PTP_RISING_EDGE and PTP_FALLING_EDGE flags are merely - * hints which are not enforced. - */ - if (!(supported_extts_flags & PTP_STRICT_FLAGS)) - supported_extts_flags |=3D PTP_EXTTS_EDGES; - /* Reject unsupported flags */ - if (req.extts.flags & ~supported_extts_flags) - return -EOPNOTSUPP; - req.type =3D PTP_CLK_REQ_EXTTS; - enable =3D req.extts.flags & PTP_ENABLE_FEATURE ? 1 : 0; - if (mutex_lock_interruptible(&ptp->pincfg_mux)) - return -ERESTARTSYS; - err =3D ops->enable(ops, &req, enable); - mutex_unlock(&ptp->pincfg_mux); - break; + if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) + return -EACCES; + return ptp_extts_request(ptp, cmd, argptr); =20 case PTP_PEROUT_REQUEST: case PTP_PEROUT_REQUEST2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE32725DD0F; Wed, 25 Jun 2025 11:52:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852350; cv=none; b=OM44QhhIusFuEXt2TJ0WvAFClOXpzKerKntx9F/WRPnWmxOkKC+4qukCsXjF+JfbB8wFWJ+OmRFjj8JKGztwuzAsXe1DcvQetT8UN3Ocl9uorbZUiMzXtlBIPN2LJEMExluSvgGf4zewev3i69x1yRTABAB5d7H5OW0fycbeD9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852350; c=relaxed/simple; bh=6RlVzs3fCOAd4qRWS/7kult/RAF8dXFwcDnWfa4rByA=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=b+Sr9hGLwjQpckeh8fE2N7+3NxNrxYuKBx/Re9PsMPa4pjrPa3OFyIRzTAydwBFhrIei4RZ8EKJr/Dlo6O8aTTzG3CXzepSbfGP1MpFpsdhOKXhBlmMZYvJTxRYbjmAPClRzNsqOeDQt7XA/NU8XMbIBAmPfjfKYepZWHEDvLDc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=t7TFQyri; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=nmmPPJhs; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="t7TFQyri"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="nmmPPJhs" Message-ID: <20250625115132.860150473@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852347; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=zgoZ/RSkDk5K7pseXzJ0rfM5eJzM2/RwyA4demwcSB8=; b=t7TFQyri+pM5/wTS2RWiuwjMFBkh//QrzWxByB1BWW6gJtgBV2zIBrB7iNxM1u8FLanAQz h90v9xv8Vw7TPkziptZdrTXq6ECrrdMZ2+dxylg3DxWZjls9e4HYKhPVRuxE88oxlcVys9 jV9ws/GaT4FmFzV1/yL/n40XqV5MqBLnDo8h7osZG5SradsZQqzPBs9UGSYzfUETkkDDH5 EWA6xnRcteykwKI7eON89N6QE2TOVHkCWgJv5R3ixY/vjzBQsolHRdclSh27xjWHivGcR8 92TJPiyHUgcRRm8nToRWTOF0GNMaGzsLfnzQi8zAxc+2xDft65O/lvoJMynpUw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852347; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=zgoZ/RSkDk5K7pseXzJ0rfM5eJzM2/RwyA4demwcSB8=; b=nmmPPJhsz/mN2HSo1OGGdGuFMa5RgwTNfkAQGQWJSdZs2/9CA6hScF6y9SdjMw5gkzbDSB xFLiOgnqhRB33rBg== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 03/13] ptp: Split out PTP_PEROUT_REQUEST ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:27 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_PEROUT_REQUEST ioctl code into a helper function. Convert to a lock guard while at it. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 129 ++++++++++++++++++++---------------------= ----- 1 file changed, 58 insertions(+), 71 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -223,6 +223,61 @@ static long ptp_extts_request(struct ptp return ops->enable(ops, &req, req.extts.flags & PTP_ENABLE_FEATURE ? 1 := 0); } =20 +static long ptp_perout_request(struct ptp_clock *ptp, unsigned int cmd, vo= id __user *arg) +{ + struct ptp_clock_request req =3D { .type =3D PTP_CLK_REQ_PEROUT }; + struct ptp_perout_request *perout =3D &req.perout; + struct ptp_clock_info *ops =3D ptp->info; + + if (copy_from_user(perout, arg, sizeof(*perout))) + return -EFAULT; + + if (cmd =3D=3D PTP_PEROUT_REQUEST2) { + if (perout->flags & ~PTP_PEROUT_VALID_FLAGS) + return -EINVAL; + + /* + * The "on" field has undefined meaning if + * PTP_PEROUT_DUTY_CYCLE isn't set, we must still treat it + * as reserved, which must be set to zero. + */ + if (!(perout->flags & PTP_PEROUT_DUTY_CYCLE) && + !mem_is_zero(perout->rsv, sizeof(perout->rsv))) + return -EINVAL; + + if (perout->flags & PTP_PEROUT_DUTY_CYCLE) { + /* The duty cycle must be subunitary. */ + if (perout->on.sec > perout->period.sec || + (perout->on.sec =3D=3D perout->period.sec && + perout->on.nsec > perout->period.nsec)) + return -ERANGE; + } + + if (perout->flags & PTP_PEROUT_PHASE) { + /* + * The phase should be specified modulo the period, + * therefore anything equal or larger than 1 period + * is invalid. + */ + if (perout->phase.sec > perout->period.sec || + (perout->phase.sec =3D=3D perout->period.sec && + perout->phase.nsec >=3D perout->period.nsec)) + return -ERANGE; + } + } else { + perout->flags &=3D PTP_PEROUT_V1_VALID_FLAGS; + memset(perout->rsv, 0, sizeof(perout->rsv)); + } + + if (perout->index >=3D ops->n_per_out) + return -EINVAL; + if (perout->flags & ~ops->supported_perout_flags) + return -EOPNOTSUPP; + + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &ptp->pincfg_mux) + return ops->enable(ops, &req, perout->period.sec || perout->period.nsec); +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { @@ -262,77 +317,9 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_PEROUT_REQUEST: case PTP_PEROUT_REQUEST2: - if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) { - err =3D -EACCES; - break; - } - memset(&req, 0, sizeof(req)); - - if (copy_from_user(&req.perout, (void __user *)arg, - sizeof(req.perout))) { - err =3D -EFAULT; - break; - } - if (cmd =3D=3D PTP_PEROUT_REQUEST2) { - struct ptp_perout_request *perout =3D &req.perout; - - if (perout->flags & ~PTP_PEROUT_VALID_FLAGS) { - err =3D -EINVAL; - break; - } - /* - * The "on" field has undefined meaning if - * PTP_PEROUT_DUTY_CYCLE isn't set, we must still treat - * it as reserved, which must be set to zero. - */ - if (!(perout->flags & PTP_PEROUT_DUTY_CYCLE) && - (perout->rsv[0] || perout->rsv[1] || - perout->rsv[2] || perout->rsv[3])) { - err =3D -EINVAL; - break; - } - if (perout->flags & PTP_PEROUT_DUTY_CYCLE) { - /* The duty cycle must be subunitary. */ - if (perout->on.sec > perout->period.sec || - (perout->on.sec =3D=3D perout->period.sec && - perout->on.nsec > perout->period.nsec)) { - err =3D -ERANGE; - break; - } - } - if (perout->flags & PTP_PEROUT_PHASE) { - /* - * The phase should be specified modulo the - * period, therefore anything equal or larger - * than 1 period is invalid. - */ - if (perout->phase.sec > perout->period.sec || - (perout->phase.sec =3D=3D perout->period.sec && - perout->phase.nsec >=3D perout->period.nsec)) { - err =3D -ERANGE; - break; - } - } - } else if (cmd =3D=3D PTP_PEROUT_REQUEST) { - req.perout.flags &=3D PTP_PEROUT_V1_VALID_FLAGS; - req.perout.rsv[0] =3D 0; - req.perout.rsv[1] =3D 0; - req.perout.rsv[2] =3D 0; - req.perout.rsv[3] =3D 0; - } - if (req.perout.index >=3D ops->n_per_out) { - err =3D -EINVAL; - break; - } - if (req.perout.flags & ~ptp->info->supported_perout_flags) - return -EOPNOTSUPP; - req.type =3D PTP_CLK_REQ_PEROUT; - enable =3D req.perout.period.sec || req.perout.period.nsec; - if (mutex_lock_interruptible(&ptp->pincfg_mux)) - return -ERESTARTSYS; - err =3D ops->enable(ops, &req, enable); - mutex_unlock(&ptp->pincfg_mux); - break; + if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) + return -EACCES; + return ptp_perout_request(ptp, cmd, argptr); =20 case PTP_ENABLE_PPS: case PTP_ENABLE_PPS2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52BBB25F785; Wed, 25 Jun 2025 11:52:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852351; cv=none; b=kn6yqN/RcmmjqHYUebJ0+3BMT6pySjZNlTuEhnYW/Dt8BQDAEiJdh5rbvj5MdstnIMqb0hn9Cpm9k3+GhLBgVpWfDlnY9KxWjOZJqJEK0CkCRELkzYT6dPp4iCStmpMMQWVH7RMAb8XDgYZZckZEhooNcJxjrCD/ik9GEfUn66Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852351; c=relaxed/simple; bh=ljThGdaJ+8bZggRE7W2k4xdtzJ6CJjPgFb/3CnAhV20=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=sWECjEGpQK2779OT+Aopsm6bfUqJJUP3IwjRvo67mnihpCCaj3nlxtEoWaeuY5Z2TXgqXJspNJ2LSBJtZS131GzyxY9ntNnCDlfszu2lcdIpFpyJo3xmTgka3H34ttsyLG/mUi3nqMHUwN8K8xmnVVxFZu3RnmP44vEdYIgmT7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=jf0QIgpK; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=kQym4/yh; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="jf0QIgpK"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="kQym4/yh" Message-ID: <20250625115132.923803136@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852348; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=LridM+GG8/BSv3aEB94gi5KWZc4W8nh2yBSdrgoLmc4=; b=jf0QIgpK3HzavIASX2dWzVdo3zyLGOuWK/SxX7iBbkquJljhyMa3wtVaba+YLjHmv79wQ8 jzUbezi0CxrnKh4ltgjUTB/7Afv+5F/aCCRh2VZiglG0qYm7NJOUBrdUhrMT7GHoWPM5Xl SiZYdlZF7LnmKAbIEXb8kif7Ac5huqUHX5E6w1MF9OYA9o/9mg8XmqX4qwKUVvSzFDH8xC meVQ8jRHRtJJnfV0PAKy+e4TgGOnGzZHC6QmLYMMI8n43cBWWJSjxkT1+4qjZNFvuJEoLS Ey+hWDhFm9uNNzd9jPGy213gIoaK0+WQy59BD60Y1tdhxxdk87hnkQN+SgGy4g== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852348; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=LridM+GG8/BSv3aEB94gi5KWZc4W8nh2yBSdrgoLmc4=; b=kQym4/yhpWSp9fW1c8vDiLtAvPfwqdRGmAZiDGQDHffMQNtqzO/3HgS4nMc4bOzZ1FjBJ9 5sE5kehAlFZFzKCg== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 04/13] ptp: Split out PTP_ENABLE_PPS ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:28 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_ENABLE_PPS ioctl code into a helper function. Convert to a lock guard while at it. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -278,6 +278,18 @@ static long ptp_perout_request(struct pt return ops->enable(ops, &req, perout->period.sec || perout->period.nsec); } =20 +static long ptp_enable_pps(struct ptp_clock *ptp, bool enable) +{ + struct ptp_clock_request req =3D { .type =3D PTP_CLK_REQ_PPS }; + struct ptp_clock_info *ops =3D ptp->info; + + if (!capable(CAP_SYS_TIME)) + return -EPERM; + + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &ptp->pincfg_mux) + return ops->enable(ops, &req, enable); +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { @@ -290,13 +302,12 @@ long ptp_ioctl(struct posix_clock_contex struct ptp_sys_offset *sysoff =3D NULL; struct timestamp_event_queue *tsevq; struct ptp_system_timestamp sts; - struct ptp_clock_request req; struct ptp_clock_time *pct; unsigned int i, pin_index; struct ptp_pin_desc pd; struct timespec64 ts; - int enable, err =3D 0; void __user *argptr; + int err =3D 0; =20 if (in_compat_syscall() && cmd !=3D PTP_ENABLE_PPS && cmd !=3D PTP_ENABLE= _PPS2) arg =3D (unsigned long)compat_ptr(arg); @@ -323,21 +334,9 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_ENABLE_PPS: case PTP_ENABLE_PPS2: - if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) { - err =3D -EACCES; - break; - } - memset(&req, 0, sizeof(req)); - - if (!capable(CAP_SYS_TIME)) - return -EPERM; - req.type =3D PTP_CLK_REQ_PPS; - enable =3D arg ? 1 : 0; - if (mutex_lock_interruptible(&ptp->pincfg_mux)) - return -ERESTARTSYS; - err =3D ops->enable(ops, &req, enable); - mutex_unlock(&ptp->pincfg_mux); - break; + if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) + return -EACCES; + return ptp_enable_pps(ptp, !!arg); =20 case PTP_SYS_OFFSET_PRECISE: case PTP_SYS_OFFSET_PRECISE2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F8EE25F99B; Wed, 25 Jun 2025 11:52:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852353; cv=none; b=C43BlyxdeXfNAid4aHrlUW2PqoHS5SEllfcKsqY0G1cSMBMJzqYWYRvbl4mCPrNm+3ys3GeVuUJmARZePXpS9XpwQnNjEg/p2nDAZ4qAKcsl2lN9VvRx1vt/6esvntgp+xaGAZMYBvtXUSXjWIzM8X9pn7zJVvtaPJZrCil7mDA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852353; c=relaxed/simple; bh=OlcBURmnOZ7Wm6QgeJHHqC0dvYkyADt5D3/ByWIfAzU=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=fZXA72hvVIks0MsBtJMj3AxqMiWX+dx+u0sLrkTjgRbOrUB287UMFRCwZDLDcnAo1SbfAyNxnsh+tDsRyvg1/ZujQUUb/CexeRXXd+iBUC3745N0jT5K+smnw+DomwL/h6I30WsBC72TRIyRHwcCsMEeLatfq5LXPWuprpRsXII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Nv9nEMcJ; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Ydel79pa; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Nv9nEMcJ"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Ydel79pa" Message-ID: <20250625115132.986897454@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=nhKOrGfB73BiNutvGLZueBH6XZjw/8/Cqht1KLT2faI=; b=Nv9nEMcJpFrtpzIojo2/M+tkNYGxyfkqyGknAeVHqR/1gZ+dMZXB3rPSsoqCVoKeYYEhab IpV+qX8LmJe2CTrT49aTRu40TTHU2X3D8DI7wQBKZhw0MnQEimsjw6t7TF20KNICtakqzr 9nOQ9CuiOvN0XIlfpyBJbX0gHz3ZTMKj5otCh0ChTQtU6PEynAjptv7oGWxhrUb8oCoODH 4+oxbqQzCxJDADJQJWA7xC0Xy0EbHzsGUeP7gHunb3CogoRJSbbkcPpzenGqv3JgeRyE1K KLbIS+SBME59Zz7ezf/c93E6bQn3FbQx+rk09l9/S0P5wVAh3SfVzuvxDMnZ7A== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=nhKOrGfB73BiNutvGLZueBH6XZjw/8/Cqht1KLT2faI=; b=Ydel79pazJ0L6V1TLpd8Sz55RRC8T/3hck+q5y07duXEZKBcnlijivB/niCSYufp1dzDhj D8lSMR8jE56ylzBQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 05/13] ptp: Split out PTP_SYS_OFFSET_PRECISE ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:29 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_SYS_OFFSET_PRECISE ioctl code into a helper function. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 53 +++++++++++++++++++++++++----------------= ----- 1 file changed, 29 insertions(+), 24 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -291,14 +291,40 @@ static long ptp_enable_pps(struct ptp_cl return ops->enable(ops, &req, enable); } =20 +static long ptp_sys_offset_precise(struct ptp_clock *ptp, void __user *arg) +{ + struct ptp_sys_offset_precise precise_offset; + struct system_device_crosststamp xtstamp; + struct timespec64 ts; + int err; + + if (!ptp->info->getcrosststamp) + return -EOPNOTSUPP; + + err =3D ptp->info->getcrosststamp(ptp->info, &xtstamp); + if (err) + return err; + + memset(&precise_offset, 0, sizeof(precise_offset)); + ts =3D ktime_to_timespec64(xtstamp.device); + precise_offset.device.sec =3D ts.tv_sec; + precise_offset.device.nsec =3D ts.tv_nsec; + ts =3D ktime_to_timespec64(xtstamp.sys_realtime); + precise_offset.sys_realtime.sec =3D ts.tv_sec; + precise_offset.sys_realtime.nsec =3D ts.tv_nsec; + ts =3D ktime_to_timespec64(xtstamp.sys_monoraw); + precise_offset.sys_monoraw.sec =3D ts.tv_sec; + precise_offset.sys_monoraw.nsec =3D ts.tv_nsec; + + return copy_to_user(arg, &precise_offset, sizeof(precise_offset)) ? -EFAU= LT : 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); struct ptp_sys_offset_extended *extoff =3D NULL; - struct ptp_sys_offset_precise precise_offset; - struct system_device_crosststamp xtstamp; struct ptp_clock_info *ops =3D ptp->info; struct ptp_sys_offset *sysoff =3D NULL; struct timestamp_event_queue *tsevq; @@ -341,28 +367,7 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_SYS_OFFSET_PRECISE: case PTP_SYS_OFFSET_PRECISE2: - if (!ptp->info->getcrosststamp) { - err =3D -EOPNOTSUPP; - break; - } - err =3D ptp->info->getcrosststamp(ptp->info, &xtstamp); - if (err) - break; - - memset(&precise_offset, 0, sizeof(precise_offset)); - ts =3D ktime_to_timespec64(xtstamp.device); - precise_offset.device.sec =3D ts.tv_sec; - precise_offset.device.nsec =3D ts.tv_nsec; - ts =3D ktime_to_timespec64(xtstamp.sys_realtime); - precise_offset.sys_realtime.sec =3D ts.tv_sec; - precise_offset.sys_realtime.nsec =3D ts.tv_nsec; - ts =3D ktime_to_timespec64(xtstamp.sys_monoraw); - precise_offset.sys_monoraw.sec =3D ts.tv_sec; - precise_offset.sys_monoraw.nsec =3D ts.tv_nsec; - if (copy_to_user((void __user *)arg, &precise_offset, - sizeof(precise_offset))) - err =3D -EFAULT; - break; + return ptp_sys_offset_precise(ptp, argptr); =20 case PTP_SYS_OFFSET_EXTENDED: case PTP_SYS_OFFSET_EXTENDED2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D41B026057D; Wed, 25 Jun 2025 11:52:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852354; cv=none; b=tg+rGlDV63hzqebhFOXMLxOm9ouoYainmRm/YD5VT7PivOlbn4xjTVu+MK2yCC6YhoBGh2hFlQ8K6m7SYWKgBhERCMjk+NR1HoKR//tsamBrLis0+V8mUxOfWAA5/DXkV8ko8rJuy78rvVxHMArkseQOvuT623bVk9MA1FYhF0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852354; c=relaxed/simple; bh=xWqROYVU4TynHuYh4aGkvMPabj/Oa5v3QXwWpIcyvdA=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=FOazcsVWjpfL8tr3EW5qQkg+CMZgucm8vxtz2SKSDKRQkEjXB3o0ibB2mgg4QhBvZT15STcLXgfEaxKWRyCp/nZwsDCRH5a0bcf3SxBnuY4HmfZGuDaE1j4xGCgA9sLfDgrxt44WdOu8k+NihWfaI9Sr4PcBflnEpgVXkY4BhhE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=JD6Tgimq; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=P4WlgmBK; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="JD6Tgimq"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="P4WlgmBK" Message-ID: <20250625115133.050445505@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852350; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=27YxVW+aF7eR9SHjcEuEjGJaTFvGFs8Gy18WXbaN/7Y=; b=JD6TgimqmI/bAx/eSPDvV4cwv8+61oRmd1MDyowg/sNVBAMeo2pSByM5nbcSvliasa3hTM xPmUE9YDHZRCwh1+Z72TM247StRyIlveyNyx213P3mWrdwqN41+czvw7T9eyWrj6mZhgwN oQY6tI6WERND+iw/bCqkXPDFOsa0CSnTmrrEu9Mvqzuoy7Rv9j/kynQWL+Cm3yG7m5yxoc NvsdzXwpS2kOsgA+L6mF1JsYAu5D4MKyC/AQ+gHZR9Isjn3V1LQ5117Z7M748J9paJ8+oD 6SJfsZRZ4RS/2H2AfcTKpjOvPblex1+sfTUvKJtMMCArVNzZbzb3XUKk8Pb5VQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852350; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=27YxVW+aF7eR9SHjcEuEjGJaTFvGFs8Gy18WXbaN/7Y=; b=P4WlgmBKGR6EEE4z5oHJyMrP43SSjtt7ns3vPsLwyKxbU9mgLV8VWFkZdr51EogZUDgkxz HDpTV5iomT0HUGCQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 06/13] ptp: Split out PTP_SYS_OFFSET_EXTENDED ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:30 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_SYS_OFFSET_EXTENDED ioctl code into a helper function. Convert it to __free() to avoid gotos. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 75 +++++++++++++++++++++++------------------= ----- 1 file changed, 39 insertions(+), 36 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -319,16 +319,52 @@ static long ptp_sys_offset_precise(struc return copy_to_user(arg, &precise_offset, sizeof(precise_offset)) ? -EFAU= LT : 0; } =20 +static long ptp_sys_offset_extended(struct ptp_clock *ptp, void __user *ar= g) +{ + struct ptp_sys_offset_extended *extoff __free(kfree) =3D NULL; + struct ptp_system_timestamp sts; + + if (!ptp->info->gettimex64) + return -EOPNOTSUPP; + + extoff =3D memdup_user(arg, sizeof(*extoff)); + if (IS_ERR(extoff)) + return PTR_ERR(extoff); + + if (extoff->n_samples > PTP_MAX_SAMPLES || + extoff->rsv[0] || extoff->rsv[1] || + (extoff->clockid !=3D CLOCK_REALTIME && + extoff->clockid !=3D CLOCK_MONOTONIC && + extoff->clockid !=3D CLOCK_MONOTONIC_RAW)) + return -EINVAL; + + sts.clockid =3D extoff->clockid; + for (unsigned int i =3D 0; i < extoff->n_samples; i++) { + struct timespec64 ts; + int err; + + err =3D ptp->info->gettimex64(ptp->info, &ts, &sts); + if (err) + return err; + extoff->ts[i][0].sec =3D sts.pre_ts.tv_sec; + extoff->ts[i][0].nsec =3D sts.pre_ts.tv_nsec; + extoff->ts[i][1].sec =3D ts.tv_sec; + extoff->ts[i][1].nsec =3D ts.tv_nsec; + extoff->ts[i][2].sec =3D sts.post_ts.tv_sec; + extoff->ts[i][2].nsec =3D sts.post_ts.tv_nsec; + } + + return copy_to_user(arg, extoff, sizeof(*extoff)) ? -EFAULT : 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); - struct ptp_sys_offset_extended *extoff =3D NULL; struct ptp_clock_info *ops =3D ptp->info; struct ptp_sys_offset *sysoff =3D NULL; struct timestamp_event_queue *tsevq; - struct ptp_system_timestamp sts; struct ptp_clock_time *pct; unsigned int i, pin_index; struct ptp_pin_desc pd; @@ -371,39 +407,7 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_SYS_OFFSET_EXTENDED: case PTP_SYS_OFFSET_EXTENDED2: - if (!ptp->info->gettimex64) { - err =3D -EOPNOTSUPP; - break; - } - extoff =3D memdup_user((void __user *)arg, sizeof(*extoff)); - if (IS_ERR(extoff)) { - err =3D PTR_ERR(extoff); - extoff =3D NULL; - break; - } - if (extoff->n_samples > PTP_MAX_SAMPLES || - extoff->rsv[0] || extoff->rsv[1] || - (extoff->clockid !=3D CLOCK_REALTIME && - extoff->clockid !=3D CLOCK_MONOTONIC && - extoff->clockid !=3D CLOCK_MONOTONIC_RAW)) { - err =3D -EINVAL; - break; - } - sts.clockid =3D extoff->clockid; - for (i =3D 0; i < extoff->n_samples; i++) { - err =3D ptp->info->gettimex64(ptp->info, &ts, &sts); - if (err) - goto out; - extoff->ts[i][0].sec =3D sts.pre_ts.tv_sec; - extoff->ts[i][0].nsec =3D sts.pre_ts.tv_nsec; - extoff->ts[i][1].sec =3D ts.tv_sec; - extoff->ts[i][1].nsec =3D ts.tv_nsec; - extoff->ts[i][2].sec =3D sts.post_ts.tv_sec; - extoff->ts[i][2].nsec =3D sts.post_ts.tv_nsec; - } - if (copy_to_user((void __user *)arg, extoff, sizeof(*extoff))) - err =3D -EFAULT; - break; + return ptp_sys_offset_extended(ptp, argptr); =20 case PTP_SYS_OFFSET: case PTP_SYS_OFFSET2: @@ -528,7 +532,6 @@ long ptp_ioctl(struct posix_clock_contex } =20 out: - kfree(extoff); kfree(sysoff); return err; } From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C54882609EC; Wed, 25 Jun 2025 11:52:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852355; cv=none; b=mxedlT7xgdzjk1wEF9XX8umG+MDXEbKlvwoEtSnCt0XvPBDSVniu+tTO9KjlbiIoYuDvn7VoPg4TrRrH7qCean/xdx5k5DLhWK42wvLh5PbGK+0qxu2pxoE3yhp3zGZHVEbeF6iQIXQDKeK4Ir9o00UdUtDBGisQmYOfSjrgUgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852355; c=relaxed/simple; bh=jYZGG7mqo1rf8Y1Sc/mioF8/kFsgOyaM+rXTOB6rgws=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=rLIDey7VRSY/LbgY2HtdydkxYqM7dPzrtr/69JPMGP4rMDjWMFjMByGNcWmZ7UFILtTkKUt8GkTPoDKXRPZjij9L/HYmlj3BzXdvZIvvZ/ir5cuPxq0eoid76jS8V5jeiN/9AqhkBynwqOv9vVoHsQNFQD/DCG+119EjN7q7G9A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=BXywzjha; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=wt1cIeuN; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="BXywzjha"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="wt1cIeuN" Message-ID: <20250625115133.113841216@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852352; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=/hOaEijTFNyeTZSw4CEZK0YexuuthEWLb2xxAoWy0AM=; b=BXywzjha6ZAu4ey7S1Xw5wvqQqZF41czEON+srTQ6W4Lh8NT949edV3GIYn5Lan0E1GYA6 aqdpk4VXELM3ubStlAwNsyx7y1gtoQ4GzK4oOgFASfssdPl6U2yno5A17C/vUFwFdnONfp gMgJAgqnUz9oXYsj4Vz3jc1NqEKo8Fu/uN1Wrx5X0hpsn835TJ0be6dZKfrwW/sKiTBJRe xW9IgLHwJhF8QBXiUd13yuBx0jILa1wTszTW0Got/ZXiWfW7rmREAQXAJk39GiZ2q/12zd /sfZpDbHAKRLshCYPfCOfX12u6fP/aD0AjWSCOr6t+H+CBD/5O3MBw8YmKuzKg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852352; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=/hOaEijTFNyeTZSw4CEZK0YexuuthEWLb2xxAoWy0AM=; b=wt1cIeuNqBLHGLDO/O92M6qyGQ5Zmt11sLlydscIKwJ1JqR9M1XnqZq8E/L4z2P1BI295A zLgLcSRk0TN6yWBQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 07/13] ptp: Split out PTP_SYS_OFFSET ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:31 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_SYS_OFFSET ioctl code into a helper function. Convert it to __free() to avoid gotos. No functional change intended. Signed-off-by: Thomas Gleixner --- drivers/ptp/ptp_chardev.c | 78 +++++++++++++++++++++++------------------= ----- 1 file changed, 40 insertions(+), 38 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -357,18 +357,54 @@ static long ptp_sys_offset_extended(stru return copy_to_user(arg, extoff, sizeof(*extoff)) ? -EFAULT : 0; } =20 +static long ptp_sys_offset(struct ptp_clock *ptp, void __user *arg) +{ + struct ptp_sys_offset *sysoff __free(kfree) =3D NULL; + struct ptp_clock_time *pct; + struct timespec64 ts; + + sysoff =3D memdup_user(arg, sizeof(*sysoff)); + if (IS_ERR(sysoff)) + return PTR_ERR(sysoff); + + if (sysoff->n_samples > PTP_MAX_SAMPLES) + return -EINVAL; + + pct =3D &sysoff->ts[0]; + for (unsigned int i =3D 0; i < sysoff->n_samples; i++) { + struct ptp_clock_info *ops =3D ptp->info; + int err; + + ktime_get_real_ts64(&ts); + pct->sec =3D ts.tv_sec; + pct->nsec =3D ts.tv_nsec; + pct++; + if (ops->gettimex64) + err =3D ops->gettimex64(ops, &ts, NULL); + else + err =3D ops->gettime64(ops, &ts); + if (err) + return err; + pct->sec =3D ts.tv_sec; + pct->nsec =3D ts.tv_nsec; + pct++; + } + ktime_get_real_ts64(&ts); + pct->sec =3D ts.tv_sec; + pct->nsec =3D ts.tv_nsec; + + return copy_to_user(arg, sysoff, sizeof(*sysoff)) ? -EFAULT : 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); struct ptp_clock_info *ops =3D ptp->info; - struct ptp_sys_offset *sysoff =3D NULL; struct timestamp_event_queue *tsevq; - struct ptp_clock_time *pct; unsigned int i, pin_index; struct ptp_pin_desc pd; - struct timespec64 ts; void __user *argptr; int err =3D 0; =20 @@ -411,38 +447,7 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_SYS_OFFSET: case PTP_SYS_OFFSET2: - sysoff =3D memdup_user((void __user *)arg, sizeof(*sysoff)); - if (IS_ERR(sysoff)) { - err =3D PTR_ERR(sysoff); - sysoff =3D NULL; - break; - } - if (sysoff->n_samples > PTP_MAX_SAMPLES) { - err =3D -EINVAL; - break; - } - pct =3D &sysoff->ts[0]; - for (i =3D 0; i < sysoff->n_samples; i++) { - ktime_get_real_ts64(&ts); - pct->sec =3D ts.tv_sec; - pct->nsec =3D ts.tv_nsec; - pct++; - if (ops->gettimex64) - err =3D ops->gettimex64(ops, &ts, NULL); - else - err =3D ops->gettime64(ops, &ts); - if (err) - goto out; - pct->sec =3D ts.tv_sec; - pct->nsec =3D ts.tv_nsec; - pct++; - } - ktime_get_real_ts64(&ts); - pct->sec =3D ts.tv_sec; - pct->nsec =3D ts.tv_nsec; - if (copy_to_user((void __user *)arg, sysoff, sizeof(*sysoff))) - err =3D -EFAULT; - break; + return ptp_sys_offset(ptp, argptr); =20 case PTP_PIN_GETFUNC: case PTP_PIN_GETFUNC2: @@ -530,9 +535,6 @@ long ptp_ioctl(struct posix_clock_contex err =3D -ENOTTY; break; } - -out: - kfree(sysoff); return err; } From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 024AA26159D; Wed, 25 Jun 2025 11:52:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852356; cv=none; b=FJT04OqAL61yBRa3emcsnN/vTAgOytwUK9jzbGzeOp4fDNczuZ2H27sGQZgGNrsTK8rRRp4F36drivR9LTNDCY+uTrK1yNCBvTFuxglwgt+jKVVL9P/5ahqYwqiX27v6kv7Xe7KEYHfJ317vOHNWUjkWFwOFK2JOSSSi3hYUT2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852356; c=relaxed/simple; bh=aBO0yiwqqDrK1Gr7ZVbyG/YcR1JfuokI1519l7iiV4g=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=q3xnAJxK6B9oX6DhY3g38sAhW845sVER5GzFDFHLQ7gH1RDxpPci9/FCGFOcjSVMGbZzXvFV2Tjsa4/OP1q4/L1jKjtcFP601CsDldY9oOILX7RkknBUzfMUc/N9hhIonoI0kKgVGVFuxbgOh4RCUWwlbz0hr4q05L5TrB/P9V0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=3VUiqsFy; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=eBjUHRoo; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="3VUiqsFy"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="eBjUHRoo" Message-ID: <20250625115133.177265865@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852353; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=vyYL15Pqf1jOxKAOIO67JsDvb3ZysXZmUrK/s07exX8=; b=3VUiqsFyheIGMtxEuA3LAN5ZfJ9is8Fp87WRdFZRvPtv8ZArmtIuMcnbV/kcN7xgD69/Vc TMns+3sDo7NJ2l+JW7YP4RPdoQ63C/Z2QCYZ7bqy951MNjFTkOKQp+esu9IUHKF1SS4a90 DpdRlJSzvEOOH8hEdmF3w0dZw195xk0nPsM/QFCoUUBxEOq/Rthm57i2TB1LpnnyjkMKAO VAii3OYOrHsis18ChPtyrJaj2vyK3DnqzrcMkQTZMe7boiYHl00waR61N+r+Wm0DFywWRG mWGkBSqmLZf3Juw3EBknIH9mWvLLk95lXWqbX1VhK948vpcNHLZeKAkCW7Pvqg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852353; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=vyYL15Pqf1jOxKAOIO67JsDvb3ZysXZmUrK/s07exX8=; b=eBjUHRooJylTWyYzxARhV8N1YXpow6h36ywJnbiBF/5ku6I4U7tPSx5znL839kkggHLTeb GcXomi1CJ6SZoAAg== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 08/13] ptp: Split out PTP_PIN_GETFUNC ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:33 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_PIN_GETFUNC ioctl code into a helper function. Convert to lock guard while at it and remove the pointless memset of the pd::rsv because nothing uses it. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- V2: Remove the pointless memset() - Paolo --- drivers/ptp/ptp_chardev.c | 50 +++++++++++++++++++----------------------= ----- 1 file changed, 21 insertions(+), 29 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -395,6 +395,26 @@ static long ptp_sys_offset(struct ptp_cl return copy_to_user(arg, sysoff, sizeof(*sysoff)) ? -EFAULT : 0; } =20 +static long ptp_pin_getfunc(struct ptp_clock *ptp, unsigned int cmd, void = __user *arg) +{ + struct ptp_clock_info *ops =3D ptp->info; + struct ptp_pin_desc pd; + + if (copy_from_user(&pd, arg, sizeof(pd))) + return -EFAULT; + + if (cmd =3D=3D PTP_PIN_GETFUNC2 && !mem_is_zero(pd.rsv, sizeof(pd.rsv))) + return -EINVAL; + + if (pd.index >=3D ops->n_pins) + return -EINVAL; + + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &ptp->pincfg_mux) + pd =3D ops->pin_config[array_index_nospec(pd.index, ops->n_pins)]; + + return copy_to_user(arg, &pd, sizeof(pd)) ? -EFAULT : 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { @@ -450,35 +470,7 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_PIN_GETFUNC: case PTP_PIN_GETFUNC2: - if (copy_from_user(&pd, (void __user *)arg, sizeof(pd))) { - err =3D -EFAULT; - break; - } - if ((pd.rsv[0] || pd.rsv[1] || pd.rsv[2] - || pd.rsv[3] || pd.rsv[4]) - && cmd =3D=3D PTP_PIN_GETFUNC2) { - err =3D -EINVAL; - break; - } else if (cmd =3D=3D PTP_PIN_GETFUNC) { - pd.rsv[0] =3D 0; - pd.rsv[1] =3D 0; - pd.rsv[2] =3D 0; - pd.rsv[3] =3D 0; - pd.rsv[4] =3D 0; - } - pin_index =3D pd.index; - if (pin_index >=3D ops->n_pins) { - err =3D -EINVAL; - break; - } - pin_index =3D array_index_nospec(pin_index, ops->n_pins); - if (mutex_lock_interruptible(&ptp->pincfg_mux)) - return -ERESTARTSYS; - pd =3D ops->pin_config[pin_index]; - mutex_unlock(&ptp->pincfg_mux); - if (!err && copy_to_user((void __user *)arg, &pd, sizeof(pd))) - err =3D -EFAULT; - break; + return ptp_pin_getfunc(ptp, cmd, argptr); =20 case PTP_PIN_SETFUNC: case PTP_PIN_SETFUNC2: From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4521E262FCC; Wed, 25 Jun 2025 11:52:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852357; cv=none; b=ugw+YiqnJApbP49pQUvQAHJeh1znhpYku4uXDh3TEgAMOOkZy4xu/NHmgKYanqkyDXc35LoaNOHs5MCG8jdpO6eLstGDlKEvKeUhqAZpAKMx7wmPi3YpqhmvOxiBUYR4WamxzNsFxdMobiASMMl3wLVoiKcSKZYnxaCi1/DL9JY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852357; c=relaxed/simple; bh=JgQmZjayHA4nis9xsH9Vpm8EGU/ElGgS7KAeN5OHtMY=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=YZOD1An4DEvJpMy+n+i+dOs/FpiBaLVcNTbRtHaW7utiHFom0Thfvh8xqLXiyKztPjPoEoYUHSUMMFLRjCynhU6QR8hx2hXw71sCQlYSxH7QM31GngQRGziXRxa4l0qoQga4hO0eCXaTHzVzkpAxV5G+JYR5eaQH35Drgt3HMAM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=L/AG0eaF; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=kW6tp4+R; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="L/AG0eaF"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="kW6tp4+R" Message-ID: <20250625115133.241503804@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852354; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=A70BpkOR1z+kUW7AHjZf3UbavxO72tSUInvKStMocow=; b=L/AG0eaFc4NOeCLCnhC93+jHoMW5EQPjx92JUAc9eH2G2DSvryjOgC7/z/RMj5Z1JSHOx0 3x7YovS45wrxiodXLc2hfYwHHDj8rqWodI1BqVDg4YkkQRc/An8UhHYdPP2Vv2K5AXaX77 AH3Cnt9vtT0oBX/nLPj01VY4R46fL4gy3zyd33/+VMRWotLw6HlUe51BmdwEmCtH72iTHK jHFQgh4/CJivnl/3kyuuCf+zpvhW0pMRhDNJSdSEbgU6KlkC5RaeNdlxiSIn3s/NP26EUe htm+5uWmfqFyQ4SdXrbwLYNsfGmUTpX80ivTuwrNstV5DMxZDQvRJxbeiz+QoQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852354; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=A70BpkOR1z+kUW7AHjZf3UbavxO72tSUInvKStMocow=; b=kW6tp4+ROO+iLQjc/J6WU8/Mmh6IAjFRaEiSGf6qHYOgAkb/Z7tdhLBSmhqnq0vDlMLwpz md8xHCi9EcoRbEAg== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 09/13] ptp: Split out PTP_PIN_SETFUNC ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:34 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_PIN_SETFUNC ioctl code into a helper function. Convert to lock guard while at it and remove the pointless memset of the pd::rsv because nothing uses it. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- V2: Remove the pointless memset() - Paolo --- drivers/ptp/ptp_chardev.c | 58 +++++++++++++++++++----------------------= ----- 1 file changed, 24 insertions(+), 34 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -415,16 +415,34 @@ static long ptp_pin_getfunc(struct ptp_c return copy_to_user(arg, &pd, sizeof(pd)) ? -EFAULT : 0; } =20 +static long ptp_pin_setfunc(struct ptp_clock *ptp, unsigned int cmd, void = __user *arg) +{ + struct ptp_clock_info *ops =3D ptp->info; + struct ptp_pin_desc pd; + unsigned int pin_index; + + if (copy_from_user(&pd, arg, sizeof(pd))) + return -EFAULT; + + if (cmd =3D=3D PTP_PIN_SETFUNC2 && !mem_is_zero(pd.rsv, sizeof(pd.rsv))) + return -EINVAL; + + if (pd.index >=3D ops->n_pins) + return -EINVAL; + + pin_index =3D array_index_nospec(pd.index, ops->n_pins); + scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &ptp->pincfg_mux) + return ptp_set_pinfunc(ptp, pin_index, pd.func, pd.chan); +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); - struct ptp_clock_info *ops =3D ptp->info; struct timestamp_event_queue *tsevq; - unsigned int i, pin_index; - struct ptp_pin_desc pd; void __user *argptr; + unsigned int i; int err =3D 0; =20 if (in_compat_syscall() && cmd !=3D PTP_ENABLE_PPS && cmd !=3D PTP_ENABLE= _PPS2) @@ -474,37 +492,9 @@ long ptp_ioctl(struct posix_clock_contex =20 case PTP_PIN_SETFUNC: case PTP_PIN_SETFUNC2: - if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) { - err =3D -EACCES; - break; - } - if (copy_from_user(&pd, (void __user *)arg, sizeof(pd))) { - err =3D -EFAULT; - break; - } - if ((pd.rsv[0] || pd.rsv[1] || pd.rsv[2] - || pd.rsv[3] || pd.rsv[4]) - && cmd =3D=3D PTP_PIN_SETFUNC2) { - err =3D -EINVAL; - break; - } else if (cmd =3D=3D PTP_PIN_SETFUNC) { - pd.rsv[0] =3D 0; - pd.rsv[1] =3D 0; - pd.rsv[2] =3D 0; - pd.rsv[3] =3D 0; - pd.rsv[4] =3D 0; - } - pin_index =3D pd.index; - if (pin_index >=3D ops->n_pins) { - err =3D -EINVAL; - break; - } - pin_index =3D array_index_nospec(pin_index, ops->n_pins); - if (mutex_lock_interruptible(&ptp->pincfg_mux)) - return -ERESTARTSYS; - err =3D ptp_set_pinfunc(ptp, pin_index, pd.func, pd.chan); - mutex_unlock(&ptp->pincfg_mux); - break; + if ((pccontext->fp->f_mode & FMODE_WRITE) =3D=3D 0) + return -EACCES; + return ptp_pin_setfunc(ptp, cmd, argptr); =20 case PTP_MASK_CLEAR_ALL: bitmap_clear(tsevq->mask, 0, PTP_MAX_CHANNELS); From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A20D263F5F; Wed, 25 Jun 2025 11:52:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852359; cv=none; b=rvFTWfeSW51WcvZybS0tMy8c5vAJrrdtqM4FcLflntk7rhU/uY8nq4VTN250lftQ1+HqBB1aBHkl2nw8tLlAwAqOr79JrgFvR8D6LMVgBiaDt687TW7gOXlQl5DoSJD2hTKnXxITc5hloxubNtPKGnfmWvyOUcQoCxL1oacLQaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852359; c=relaxed/simple; bh=rr8fAWb3kvA4H9Yz13Px2yWrmokXRJ6gC7oMdc9px6A=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=VhSN+isDyrtqL3tdCt3wHdr2rZTo61DRzzqUSC98oSlXKaYvbvA4TqnBJthU/BSuLTB27HT/7yd3S8MlJPPuGZz7Ez6b98rpElctGG4wTbhYM204E12jMLH0iK+dgxe8uXoH5WO+yD+xZUTnMDzqcvZNTFunx2c7SM0C52YZpo8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=g9751myK; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=BG7dIOjN; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="g9751myK"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="BG7dIOjN" Message-ID: <20250625115133.302755618@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852355; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=W2EkBRRcHKOl9PBQoHJSVchzsp2H3hQ5VGDL4cgKRa0=; b=g9751myKgNq6yPRwDM7xJtMOU2PIy3jK9LiQI6lPc/WFCn8LCBOCFE/l/kEkXuLuwDEUVt xpC9p63dcS98UXUWxemLvxwBa6ulbaKLRyB4eK2Vl7Eil0XKdCIplptkN36y0UFNHDlbrq 5uH9208Qv1n0hq8Pi8EFgaXGi98qzxt/Mpt0Sb/DTE+91ot2WBK/JIu0wl44AayMlxF4Q5 UyfkYkn0v7rXrpraRjoPd3DA4H3vm6Mucv5tEJ48tst4/cTw5J3wq31d7TPLKK03xRVh53 06OZguDBYDF9M5aBZL9q2SaO/VXwR5cMDAqxGCz4+yQjqH8XVuFK9mKecOydog== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852355; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=W2EkBRRcHKOl9PBQoHJSVchzsp2H3hQ5VGDL4cgKRa0=; b=BG7dIOjNPg4eTyTMKXBq6hCR9aX0lvZr3urymw9c5yWiih/vOy9sku3k73zJLIAt1ZIwuf mHEwoSFXooTti6AQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 10/13] ptp: Split out PTP_MASK_CLEAR_ALL ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:35 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue the ptp_ioctl() cleanup by splitting out the PTP_MASK_CLEAR_ALL io= ctl code into a helper function. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -442,6 +442,12 @@ static long ptp_pin_setfunc(struct ptp_c return ptp_set_pinfunc(ptp, pin_index, pd.func, pd.chan); } =20 +static long ptp_mask_clear_all(struct timestamp_event_queue *tsevq) +{ + bitmap_clear(tsevq->mask, 0, PTP_MAX_CHANNELS); + return 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { @@ -504,8 +510,7 @@ long ptp_ioctl(struct posix_clock_contex return ptp_pin_setfunc(ptp, cmd, argptr); =20 case PTP_MASK_CLEAR_ALL: - bitmap_clear(tsevq->mask, 0, PTP_MAX_CHANNELS); - break; + return ptp_mask_clear_all(pccontext->private_clkdata); =20 case PTP_MASK_EN_SINGLE: if (copy_from_user(&i, (void __user *)arg, sizeof(i))) { From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAE72264605; Wed, 25 Jun 2025 11:52:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852360; cv=none; b=q7z7fXM74UiJj8TcdjY75LrsXp5q9+oduQfgITdA7wbHa74jSzZgeOBeC9x1FnoCrn9c5vsdvH8O3B0tGQrxtTJplCqHG/92ofcHlfF1Ttuc1jEHsfRtEDGS/6FtPNaAu9t/XvidDQOIhHLXUtQfdUpoIlavtBXQaxoeFJct3WI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852360; c=relaxed/simple; bh=yp4cQ7SyrZb/h1H/bAPLKYT41i6JWxcxpTEUlSOTBiE=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=Hx1rIY0KZAOxySd9KqKYi6kWwEuKQvqaUz6FZt2bb7xJOR0SkMTQYX250BDGs6wZgXdoR55jpy6sLbExUbGzR/h+MH5tij2XPDl95tQzQ7nfWP1/I67E5AF3uAaH/cCitpbTz3XV9gIj89XtYTCkvGede5WOHzGQNiI6hbn356Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=DNdAXql7; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=BI2eQrTm; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="DNdAXql7"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="BI2eQrTm" Message-ID: <20250625115133.364422719@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852357; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=ySI5aByKOimt5iQ+JtZosgPpWha4hSg8x1EopuuGh3I=; b=DNdAXql74VWV7S+VrdvaSI9ctWL6qyFJqD+GwUnKjUwnslAo4+CIP2LYb14M+dEvINME9e /14xr31hhnJ3gP5it2x6Azzfi95l6K6ZtQ5myQDhI7DrCYD0vLsB6zakvwz4SuOjYr5FPt 2swD5xhZWw0k2sDjXBypQ5z3/QdDkHdD/KaHvDL7ldVMz414sEdZ9V1cgGLhk9MJxgvprj Brl05w0iBm00ZgBjuRXzyWoC8OelfXQRMy4hIPwm3OGOAV6mJ1mwXOIOVpENqMxVGGIMuO PfB1/xLkZjNuzciVnWxlhmmkvxlGSzTGVEBzIEh5F//DTTnhROVJT1TXEO7+gg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852357; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=ySI5aByKOimt5iQ+JtZosgPpWha4hSg8x1EopuuGh3I=; b=BI2eQrTmn0mqU3fvwt3iXDXZQpIZzShpgB79FcLyUQkf+L9V4KGRSaL6pAJCkVVXuW0UV1 nIp+35HBU/BdaUDQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 11/13] ptp: Split out PTP_MASK_EN_SINGLE ioctl code References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:36 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finish the ptp_ioctl() cleanup by splitting out the PTP_MASK_EN_SINGLE ioctl code and removing the remaining local variables and return statements. No functional change intended. Signed-off-by: Thomas Gleixner Reviewed-by: Vadim Fedorenko --- drivers/ptp/ptp_chardev.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -448,22 +448,28 @@ static long ptp_mask_clear_all(struct ti return 0; } =20 +static long ptp_mask_en_single(struct timestamp_event_queue *tsevq, void _= _user *arg) +{ + unsigned int channel; + + if (copy_from_user(&channel, arg, sizeof(channel))) + return -EFAULT; + if (channel >=3D PTP_MAX_CHANNELS) + return -EFAULT; + set_bit(channel, tsevq->mask); + return 0; +} + long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, unsigned long arg) { - struct ptp_clock *ptp =3D - container_of(pccontext->clk, struct ptp_clock, clock); - struct timestamp_event_queue *tsevq; + struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, = clock); void __user *argptr; - unsigned int i; - int err =3D 0; =20 if (in_compat_syscall() && cmd !=3D PTP_ENABLE_PPS && cmd !=3D PTP_ENABLE= _PPS2) arg =3D (unsigned long)compat_ptr(arg); argptr =3D (void __force __user *)arg; =20 - tsevq =3D pccontext->private_clkdata; - switch (cmd) { case PTP_CLOCK_GETCAPS: case PTP_CLOCK_GETCAPS2: @@ -513,22 +519,11 @@ long ptp_ioctl(struct posix_clock_contex return ptp_mask_clear_all(pccontext->private_clkdata); =20 case PTP_MASK_EN_SINGLE: - if (copy_from_user(&i, (void __user *)arg, sizeof(i))) { - err =3D -EFAULT; - break; - } - if (i >=3D PTP_MAX_CHANNELS) { - err =3D -EFAULT; - break; - } - set_bit(i, tsevq->mask); - break; + return ptp_mask_en_single(pccontext->private_clkdata, argptr); =20 default: - err =3D -ENOTTY; - break; + return -ENOTTY; } - return err; } =20 __poll_t ptp_poll(struct posix_clock_context *pccontext, struct file *fp, From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 954F1264634; Wed, 25 Jun 2025 11:52:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852361; cv=none; b=iLz6jfm67QmM1Z5A2q0Ewvu//dynH8kpM7jhSEi5EwmCdyzTCP/mKG3Kn389U0g/xvqj7HWXkJ+upunQKwlGE45T6/TZ4Z2li0kDbbznf8pFUOe32PtnOuYXEJlsTH/XIdcMsK0b+QWnwfe9PDHIK/wFt1ma04DgoGKtCHo/T4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852361; c=relaxed/simple; bh=GJ9L8P5fX9+5aVNCWu/bHLaPykNnj/9VnbR+7NUm8pI=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=fJHuMr5uk1BXTzPp5ZQ8rZNArBwZdBSgX50wjS5DIJd/ITcC2nZuE2N6v8FgNZ49HJDnBOZqKJa99U9gORMa97wI8mCTifm1i7QuBI6XynCuldV4WOD/lmzyKN75sEVHmwcnnDyLIIHuWZADYVw9EPFsPLjqnzb606nQQr8yNaM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=kLsq2WEh; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=WAYsNwFB; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="kLsq2WEh"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="WAYsNwFB" Message-ID: <20250625115133.425029269@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=ZrPTWm0oJsAfPaNIADSOD58SP7bLTlsVpT6I6K8U52E=; b=kLsq2WEhTaAa//1/rxb00CJg9f7pYyCnIKSerhbcyCIln9unw/NOzJZki243QTB1q0KsUE GjLOLPSBt7oUuZAs0QWKn9IC1s3ud+BwxwscZsxQevwNrI+3sYeAI3SUeoHnhpGSA1PeSQ 1IDHv/i1YbNdicIErOlDw3TjDVuydg9vsu7LgR7S609XuA8tRLYKPJC1WxWOjOpk4wuL09 kZtK9WK4JSkRwX8CMqb1KUZ2AOUp2j/ZpJLUXMSg1fP7EDEtjlQRL0nhHrFyQuMkR5W4mm 3LeDh0SH471bmxU2bLHUHRXIX/1LP9vnIKGQGU7TtM7sG70J51GgYRuHgL23tA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=ZrPTWm0oJsAfPaNIADSOD58SP7bLTlsVpT6I6K8U52E=; b=WAYsNwFB/BUJFY0GGSict/QVOCXELMJDtHkkwZptZ+33a+VglkI0Y4ON2mq0er+pcsFLTM MNYmOafWiv1GK0CA== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 12/13] ptp: Convert chardev code to lock guards References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:38 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the various spin_lock_irqsave() protected critical regions to scoped guards. Use spinlock_irq instead of spinlock_irqsave as all the functions are invoked in thread context with interrupts enabled. No functional change intended. Signed-off-by: Thomas Gleixner --- drivers/ptp/ptp_chardev.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -110,7 +110,6 @@ int ptp_open(struct posix_clock_context container_of(pccontext->clk, struct ptp_clock, clock); struct timestamp_event_queue *queue; char debugfsname[32]; - unsigned long flags; =20 queue =3D kzalloc(sizeof(*queue), GFP_KERNEL); if (!queue) @@ -122,9 +121,8 @@ int ptp_open(struct posix_clock_context } bitmap_set(queue->mask, 0, PTP_MAX_CHANNELS); spin_lock_init(&queue->lock); - spin_lock_irqsave(&ptp->tsevqs_lock, flags); - list_add_tail(&queue->qlist, &ptp->tsevqs); - spin_unlock_irqrestore(&ptp->tsevqs_lock, flags); + scoped_guard(spinlock_irq, &ptp->tsevqs_lock) + list_add_tail(&queue->qlist, &ptp->tsevqs); pccontext->private_clkdata =3D queue; =20 /* Debugfs contents */ @@ -143,15 +141,13 @@ int ptp_open(struct posix_clock_context int ptp_release(struct posix_clock_context *pccontext) { struct timestamp_event_queue *queue =3D pccontext->private_clkdata; - unsigned long flags; struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, clock); =20 debugfs_remove(queue->debugfs_instance); pccontext->private_clkdata =3D NULL; - spin_lock_irqsave(&ptp->tsevqs_lock, flags); - list_del(&queue->qlist); - spin_unlock_irqrestore(&ptp->tsevqs_lock, flags); + scoped_guard(spinlock_irq, &ptp->tsevqs_lock) + list_del(&queue->qlist); bitmap_free(queue->mask); kfree(queue); return 0; @@ -548,8 +544,6 @@ ssize_t ptp_read(struct posix_clock_cont container_of(pccontext->clk, struct ptp_clock, clock); struct timestamp_event_queue *queue; struct ptp_extts_event *event; - unsigned long flags; - size_t qcnt, i; int result; =20 queue =3D pccontext->private_clkdata; @@ -584,21 +578,19 @@ ssize_t ptp_read(struct posix_clock_cont goto exit; } =20 - spin_lock_irqsave(&queue->lock, flags); + scoped_guard(spinlock_irq, &queue->lock) { + size_t qcnt =3D queue_cnt(queue); =20 - qcnt =3D queue_cnt(queue); + if (cnt > qcnt) + cnt =3D qcnt; =20 - if (cnt > qcnt) - cnt =3D qcnt; - - for (i =3D 0; i < cnt; i++) { - event[i] =3D queue->buf[queue->head]; - /* Paired with READ_ONCE() in queue_cnt() */ - WRITE_ONCE(queue->head, (queue->head + 1) % PTP_MAX_TIMESTAMPS); + for (size_t i =3D 0; i < cnt; i++) { + event[i] =3D queue->buf[queue->head]; + /* Paired with READ_ONCE() in queue_cnt() */ + WRITE_ONCE(queue->head, (queue->head + 1) % PTP_MAX_TIMESTAMPS); + } } =20 - spin_unlock_irqrestore(&queue->lock, flags); - cnt =3D cnt * sizeof(struct ptp_extts_event); =20 result =3D cnt; From nobody Wed Oct 8 18:13:08 2025 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B17E25E44B; Wed, 25 Jun 2025 11:52:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852364; cv=none; b=hUCjLWTAvfVi+gB8BFFXJwN4ZobUeXfdtNwyneNy3bUd8MHyKORyQGXBMSa46CxZEpXh46NaGzSqER4uFgTY5tKmks9oziBsXlGnPDm7vMdrIVXnnc9Z3j5zzOKKWwDCGtr2XVA7yIXBBJH0WFp0/g3b/8VIi7hpa/8YvAzFmso= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750852364; c=relaxed/simple; bh=TWIqKKbfG6uuI5HtJ3eC8YlrZRXG3e3FNtS1Y27gBWY=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=G8cem57f2PKYvdARL9aNc/1Y5yTt9oeT1l9MRQaNWaQYzJx9uBSvzk7jKwe4zDdZm+Jwh7bOf1+HlS04VWV0bus8u5wQ9Ok2YHY/UvDNEkNEcO0z9OQNntxH8OuCStw459iW8UDanP+Vs9acKXdUk8QD9mHYTWz5tS/sMWlFrPY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=ij1geo9+; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=yI77TiUa; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="ij1geo9+"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="yI77TiUa" Message-ID: <20250625115133.486953538@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1750852359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=GCssfyGvJulb+kWMiAtrGha00DmPusbjNgsxf3WrhOI=; b=ij1geo9+GrIYRBF5s3mgwgO/FAfNNTqkmPB8Xy5nTJi1av60V6YnQdQ6PoSpdiVKpX0cQN UFE4AYhgYiPogILMxtFY2aWsEYwB70GsbFeyro8Yxx04hLV5yb5IwKErr7lInhabF5YyEr zryubZbPNYe1nROE2hXmeenMBmS7VcZrNnLg3PI2HjydFj5UAlfj28qCgKb31fMK01QX+I TIjlom64jjT3Wt5I4aJPsq50gfyUYNo4SqzxMiScG0Y1c15uG3u/szXD3l6P6A+0X7DGy2 uYN5tJJ6dSJvDOKShekQCbt4dLMoTx8+VHCJHnpzVqTpoVLMuD1DdWOa2qRnSw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1750852359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=GCssfyGvJulb+kWMiAtrGha00DmPusbjNgsxf3WrhOI=; b=yI77TiUaBFd0b2giLZAR3Rs2r4RQHtySXnAtTI/QfaEbAzV+CzTK+nPIsGtM/eejba2I45 v6UtiPDj/3WmR2AQ== From: Thomas Gleixner To: LKML Cc: Richard Cochran , netdev@vger.kernel.org, Vadim Fedorenko , Paolo Abeni , Jakub Kicinski Subject: [patch V2 13/13] ptp: Simplify ptp_read() References: <20250625114404.102196103@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Wed, 25 Jun 2025 13:52:39 +0200 (CEST) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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 =20 int ptp_open(struct posix_clock_context *pccontext, fmode_t fmode) { - struct ptp_clock *ptp =3D - container_of(pccontext->clk, struct ptp_clock, clock); + struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, = clock); struct timestamp_event_queue *queue; char debugfsname[32]; =20 @@ -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 =3D - container_of(pccontext->clk, struct ptp_clock, clock); + struct ptp_clock *ptp =3D container_of(pccontext->clk, struct ptp_clock, = clock); struct timestamp_event_queue *queue; struct ptp_extts_event *event; - int result; + ssize_t result; =20 queue =3D pccontext->private_clkdata; - if (!queue) { - result =3D -EINVAL; - goto exit; - } + if (!queue) + return -EINVAL; =20 - if (cnt % sizeof(struct ptp_extts_event) !=3D 0) { - result =3D -EINVAL; - goto exit; - } + if (cnt % sizeof(*event) !=3D 0) + return -EINVAL; =20 if (cnt > EXTTS_BUFSIZE) cnt =3D EXTTS_BUFSIZE; =20 - cnt =3D 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(queu= e))) return -ERESTARTSYS; - } =20 - if (ptp->defunct) { - result =3D -ENODEV; - goto exit; - } + if (ptp->defunct) + return -ENODEV; =20 event =3D kmalloc(EXTTS_BUFSIZE, GFP_KERNEL); - if (!event) { - result =3D -ENOMEM; - goto exit; - } + if (!event) + return -ENOMEM; =20 scoped_guard(spinlock_irq, &queue->lock) { - size_t qcnt =3D queue_cnt(queue); - - if (cnt > qcnt) - cnt =3D qcnt; + size_t qcnt =3D min((size_t)queue_cnt(queue), cnt / sizeof(*event)); =20 - for (size_t i =3D 0; i < cnt; i++) { + for (size_t i =3D 0; i < qcnt; i++) { event[i] =3D queue->buf[queue->head]; /* Paired with READ_ONCE() in queue_cnt() */ WRITE_ONCE(queue->head, (queue->head + 1) % PTP_MAX_TIMESTAMPS); } + cnt =3D qcnt * sizeof(*event); } =20 - cnt =3D cnt * sizeof(struct ptp_extts_event); - result =3D cnt; - if (copy_to_user(buf, event, cnt)) { + if (copy_to_user(buf, event, cnt)) result =3D -EFAULT; - goto free_event; - } =20 -free_event: kfree(event); -exit: return result; }