From patchwork Thu Jan 4 21:24:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?TWFoZXNoIEJhbmRld2FyICjgpK7gpLngpYfgpLYg4KSs4KSC4KSh4KWH4KS14KS+4KSwKQ==?= X-Patchwork-Id: 185147 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp5878860dyb; Thu, 4 Jan 2024 13:25:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IGJPk1tOqhhj/n7k1XMxD33fJOWSqgZpTkevhtxtCwpGVqNmGhpQ8Gsj9JJj3MjFaU+KGtR X-Received: by 2002:a2e:8055:0:b0:2cc:9b9f:a97d with SMTP id p21-20020a2e8055000000b002cc9b9fa97dmr674232ljg.102.1704403516570; Thu, 04 Jan 2024 13:25:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704403516; cv=none; d=google.com; s=arc-20160816; b=MBAKu+U4jnSlIH+sg+oWg6b41nfag1oRksw9j8zkS7EHIfq6+KNY+bRm6lan2Czg9r rMLbWsascj7E7WUf98rXrQ4bv8hai3X+X0Kw11oe49qF1N5vZ0hQ53hd2Tud33g+eu7+ QGY4QRZkDRwhrzCaaQZTecBSfBNrBGg4iz2/0U7lDpXG/mdbrRZYFVTuGamDs0ro3SXB OsYObP5NQCPsje76dUSH1t6s/hzAhTUJRXcvHjpTk2rlkT95x+QQ9uJeC4l7niLpt2Yn +XeMCI0D6dfUIyidyQWOl7eLGZOsJcz7MtzT/ubX/jjPXguKQALiW+6nkMu5hPiHRlJh rqIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:dkim-signature; bh=3EcDyhJpXfuqwObCE0OlLjCVuMesE+JcrTbbaHS7TvA=; fh=eue65t437wyhmkSPHQRWvmcc1fbOXiku5Au2KSH9hQ4=; b=XTJOiODMxXVd/E+CJdKBFnqX1HP/TXpuCa2AL14JDCP38mv/ZRZM3en+631z6H5M5V nCZl+qjsBUkrX1cjFfbA3kyqMY78T2JfEj40MYqEID9rZ0zQhAWJCd0tKq2sm7iEB1Jo HIpI2gZVg/SC9dTn1AbGHDifI7GzkVjWukR/9s5jq+A7TIXrVPcvtguWmlVZ+ONk/ASi SD3DD0L5R5ho2ussQdIvVLGG/xOqJqwD7cyQ7wIox3NK+NY7BjzlyGKph+fMMJ3cPSZ7 FuMNsNTOuAMxYiNofJTaTv+W984osHRBzGwkgQp3umIa/Ei4r7R1nJNseoX2YQXFPDtB XSyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=LotKH7lg; spf=pass (google.com: domain of linux-kernel+bounces-17235-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17235-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id n2-20020a5099c2000000b00554de459315si102695edb.284.2024.01.04.13.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 13:25:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-17235-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=LotKH7lg; spf=pass (google.com: domain of linux-kernel+bounces-17235-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17235-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 055C91F24B9A for ; Thu, 4 Jan 2024 21:25:16 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6DEAE2CCD1; Thu, 4 Jan 2024 21:24:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LotKH7lg" X-Original-To: linux-kernel@vger.kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C0E32C856 for ; Thu, 4 Jan 2024 21:24:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--maheshb.bounces.google.com Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5e617562a65so20302087b3.1 for ; Thu, 04 Jan 2024 13:24:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704403479; x=1705008279; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=3EcDyhJpXfuqwObCE0OlLjCVuMesE+JcrTbbaHS7TvA=; b=LotKH7lgllB4kBU5B5E+oVZQl97UZumqcsTNzKaAycUxfsJBWL0Qe6PawMZ96UUYjx 83Zbglq/FID45oO/tQbsB35VDrlu5ZTIfaHO7YQgoz+yebbbOpJXZh98lwLRZA0qiA/G QmqWZaIZN784CcZO9BE77GrsGta+VG4GFQix6z/tenaWdm5+wKEKvC7boPdWjbci14Xs acdsVbIf3ZcsqLb4E35MojRUjjFicmsJF97rpfP+cX+nB0r87fZyXDb4EYSxX7WpZ67B XAxUKEEILStPAF61yU0Top6xba12ZrN27HFX36A0GB9Ucngjdh02GAxMNlThCnawamtg Hsbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704403479; x=1705008279; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3EcDyhJpXfuqwObCE0OlLjCVuMesE+JcrTbbaHS7TvA=; b=XPy3RuixbfyrHI5fmg3UTqXVOIrpG3S/9P3Ak9wc5/Leysph5upavlGr6jVLeoIkiC P9ToGXNDEQ24OI1TCi3QbjMk5bIytsaaqYQ4VOeKaEZXT8UC3J6/JYzKAvkkHg5Ug/kJ yBE4+SUM97RZ73bBpx6j+bUYSa50q9JxCVQGmp05AsR1SuUHGoX+0IUi3qK5Wfr3jKIk +1yoARX+jmuEkyuGwkmxxm9xQDzz4N62NuUSXkDYCk63XjUn7WFaCibBat8uuWEQY37V C6xjxZBXIrNVTI2vdujhBgyuXD4sInASU2KlibxW+ONckmF9PiS/sSlv+gmpcCamSjvC 9tVQ== X-Gm-Message-State: AOJu0YzHiLNVkOu38K2GNEaQNbf4OosVnB+o3j37TkTGt+m6T13s5FMl dW5F2H92wUuebQmVpsZFEHZAzVeRo0NKE+J/QJA= X-Received: from coldfire.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:2b7a]) (user=maheshb job=sendgmr) by 2002:a05:690c:3389:b0:5e5:c7de:e7ac with SMTP id fl9-20020a05690c338900b005e5c7dee7acmr598138ywb.1.1704403479494; Thu, 04 Jan 2024 13:24:39 -0800 (PST) Date: Thu, 4 Jan 2024 13:24:36 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.195.gebba966016-goog Message-ID: <20240104212436.3276057-1-maheshb@google.com> Subject: [PATCHv3 net-next 1/3] ptp: add new method ptp_gettimex64any() From: Mahesh Bandewar To: Netdev , Linux , David Miller , Jakub Kicinski , Eric Dumazet , Paolo Abeni Cc: Jonathan Corbet , John Stultz , Don Hatchett , Yuliang Li , Mahesh Bandewar , Mahesh Bandewar , Richard Cochran , Willem de Bruijn X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787196621866271469 X-GMAIL-MSGID: 1787196621866271469 The current method that gets pre/post timestamps for PHC-read supports only CLOCK_REALTIME timebase while most of the systems have their clock disciplined by NTP service. There are applications that can benefit from pre/post timestamps that are not changing or have different timebases. This patch adds the new API ptp_gettimex64any() which allows user to specify the timebase for these pre/post timestamps. The options supported are CLOCK_REALTIME, CLOCK_MONOTONIC, and CLOCK_MONOTONIC_RAW Option of CLOCK_REALTIME is equivalent to using ptp_gettimex64(). Signed-off-by: Mahesh Bandewar CC: Richard Cochran CC: "David S. Miller" CC: John Stultz CC: Jakub Kicinski CC: "Willem de Bruijn" CC: netdev@vger.kernel.org --- include/linux/ptp_clock_kernel.h | 50 ++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h index 1ef4e0f9bd2a..b1316d82721a 100644 --- a/include/linux/ptp_clock_kernel.h +++ b/include/linux/ptp_clock_kernel.h @@ -102,6 +102,17 @@ struct ptp_system_timestamp { * reading the lowest bits of the PHC timestamp and the second * reading immediately follows that. * + * @gettimex64any: Reads the current time from the hardware clock and + * optionally also any of the MONO, MONO_RAW, or SYS clock + * parameter ts: Holds the PHC timestamp. + * parameter sts: If not NULL, it holds a pair of + * timestamps from the clock of choice. The first reading + * is made right before reading the lowest bits of the + * PHC timestamp and the second reading immediately + * follows that. + * parameter clkid: any one of the supported clockids + * (CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW) + * * @getcrosststamp: Reads the current time from the hardware clock and * system clock simultaneously. * parameter cts: Contains timestamp (device,system) pair, @@ -180,6 +191,10 @@ struct ptp_clock_info { int (*gettime64)(struct ptp_clock_info *ptp, struct timespec64 *ts); int (*gettimex64)(struct ptp_clock_info *ptp, struct timespec64 *ts, struct ptp_system_timestamp *sts); + int (*gettimex64any)(struct ptp_clock_info *ptp, + struct timespec64 *ts, + struct ptp_system_timestamp *sts, + clockid_t clockid); int (*getcrosststamp)(struct ptp_clock_info *ptp, struct system_device_crosststamp *cts); int (*settime64)(struct ptp_clock_info *p, const struct timespec64 *ts); @@ -452,16 +467,47 @@ static inline ktime_t ptp_convert_timestamp(const ktime_t *hwtstamp, #endif +static inline void ptp_read_any_ts64(struct timespec64 *ts, + clockid_t clkid) +{ + switch (clkid) { + case CLOCK_REALTIME: + ktime_get_real_ts64(ts); + break; + case CLOCK_MONOTONIC: + ktime_get_ts64(ts); + break; + case CLOCK_MONOTONIC_RAW: + ktime_get_raw_ts64(ts); + break; + default: + break; + } +} + static inline void ptp_read_system_prets(struct ptp_system_timestamp *sts) { if (sts) - ktime_get_real_ts64(&sts->pre_ts); + ptp_read_any_ts64(&sts->pre_ts, CLOCK_REALTIME); } static inline void ptp_read_system_postts(struct ptp_system_timestamp *sts) { if (sts) - ktime_get_real_ts64(&sts->post_ts); + ptp_read_any_ts64(&sts->pre_ts, CLOCK_REALTIME); } +static inline void ptp_read_any_prets(struct ptp_system_timestamp *sts, + clockid_t clkid) +{ + if (sts) + ptp_read_any_ts64(&sts->pre_ts, clkid); +} + +static inline void ptp_read_any_postts(struct ptp_system_timestamp *sts, + clockid_t clkid) +{ + if (sts) + ptp_read_any_ts64(&sts->post_ts, clkid); +} #endif From patchwork Thu Jan 4 21:24:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?TWFoZXNoIEJhbmRld2FyICjgpK7gpLngpYfgpLYg4KSs4KSC4KSh4KWH4KS14KS+4KSwKQ==?= X-Patchwork-Id: 185148 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp5878990dyb; Thu, 4 Jan 2024 13:25:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IFKg+lu+JSP+7ydfWP1EKWRKUvbyl8VsxA0SApwgRUCZ6Gc7vqUGPnZSBUOBkzDYCMBuzgn X-Received: by 2002:ac2:4e0f:0:b0:50e:68d9:ff2a with SMTP id e15-20020ac24e0f000000b0050e68d9ff2amr378587lfr.270.1704403533709; Thu, 04 Jan 2024 13:25:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704403533; cv=none; d=google.com; s=arc-20160816; b=nTAgdMHnALm1s0ZsTHqFH6KqXTIiBDhhZeLulOr6u5BgvlJHF8tBfZTgOz0G32zk9Y 8iYENLkZ07u++JVaGqNccVqQScbMPjMRnpYFnZFf9tUbnxKVHx8zVRnu5le2TiesNc7M uqFTTQluArPQsG8JRqjSU9QLGzGT2xejNOrIB+ILxJAtFWKxIOYO/joqElt/+09oyFhx lJTfTSw4Cmq/hNF7rEpmbFbiY/oYsFVXFzxb9SnMnoDWvTQddHg0JzgkCoO9gyRC+bDs LKW+6bL1NnafXEClAg1k0EUFjCJ1+VORFHxE5MNGhLTpFdPUBPJFrQr/M2Q5Sj7tckkX Zjpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:dkim-signature; bh=YsAJCiIBvgndyLh0nU4MixTydeQR6acGfzT1miAC0JA=; fh=eue65t437wyhmkSPHQRWvmcc1fbOXiku5Au2KSH9hQ4=; b=t8679NpoAxyvP9ktMcejBGluOnL55Y+n5i35yeK3jTRExI8NXz82B2ZN9aPwkW735F jIPMOZVxCCNyRyulM21fUuPk23bOP1/fTKdP1KKRo6Ks9p8DUewd6QeZ9Y8NnV2SnfDf pdKhp51IEuXfGGH+ykAgfjSLIob5apD7XxVH0ryaigu+BDphGyMLYi00t0Ak/hRwqI/J wmmQGsWAdFghmqfAyQwppmyniuchMQAsBEytSdwM6IHuhoGBIdXbp8tvSEHFAnFm1Z0o zxOshYUVx48fRZA3ikpJk3N6Yu+wVeEiD4iUBaswN6VQ/gXBR+YIR0Cd0g1ptsQEdVoe FyQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=RyjBMIql; spf=pass (google.com: domain of linux-kernel+bounces-17236-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17236-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id n2-20020a5099c2000000b00554de459315si102695edb.284.2024.01.04.13.25.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 13:25:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-17236-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=RyjBMIql; spf=pass (google.com: domain of linux-kernel+bounces-17236-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17236-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 26E2C1F23205 for ; Thu, 4 Jan 2024 21:25:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 67CF72D04B; Thu, 4 Jan 2024 21:24:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RyjBMIql" X-Original-To: linux-kernel@vger.kernel.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BA852C87D for ; Thu, 4 Jan 2024 21:24:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--maheshb.bounces.google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dbe053d5d91so1383463276.2 for ; Thu, 04 Jan 2024 13:24:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704403482; x=1705008282; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=YsAJCiIBvgndyLh0nU4MixTydeQR6acGfzT1miAC0JA=; b=RyjBMIqlE311DaqGjKy8LExpBMxE+BQp2X6F8mvzCH95q6TVq1tKDY0T54uYsB+5DP b0Z6IfUCXrj9WSq1O5DCiZLWC2oEXltk8NegwpqELO8BloDjjeiG9SQvijPnzQGJ90ra XOZLBtCzT7t65EX4DpnYDzgn/fTHcncyPgvr6Dx1PRLMqHZqUoBHRqrbjFQf7AeEz4Tx ePKE3F+zt6nZ3SeUP9DsqsirNN5uOHG2oyjpby+AjvyON4jGyX6u0wgw0+DiebrKOaE5 omRjs0L/tdPO22I8DLCok5ETkYbNJF/X+/yg5+2T4xA6HbLvcYuLRTdYvet4Njd8XQPL qpyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704403482; x=1705008282; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=YsAJCiIBvgndyLh0nU4MixTydeQR6acGfzT1miAC0JA=; b=uwugIzTabKfCaSkLz1EdyuIbJuMqQNJ7BF/fP06SM4Yq5FvfG8psePuhg3j45svmgA fbJrZBP+0bGYjrwoMSSZ+v9jMj/WXRkqwPFUd5ixXC0cedgtehKN0GbDjRunIEDYJrfu VfQPgz1arpbTtbowV/lqfjldN0WJOgZzn1XnZ4dtA9lZSlvO0gPN0GvrYkZO8qCYaa9g T/a6MHEPgtDk+9J5HCSEtBeU1iWGxafshn6Jpf6q1TNjWpwGS3puW/HEreUObdXHdl0b vPeFkoi1E9D1Y9q9wEgHE5tXJcz1vPLACabt4JGNFIEJ4sE/hCAB4MXQUXoFF1efk0Mf YSqQ== X-Gm-Message-State: AOJu0YxMco8iwAmm3AO26WoyAJdq18VG0naQw3Xgnj9iLaADeSGdLWZc KYf3w3/PmOgjoSxkudHWsyJp+2gfrQ2iwqDS4JY= X-Received: from coldfire.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:2b7a]) (user=maheshb job=sendgmr) by 2002:a05:690c:368b:b0:5de:9c9f:3ee4 with SMTP id fu11-20020a05690c368b00b005de9c9f3ee4mr625667ywb.6.1704403482530; Thu, 04 Jan 2024 13:24:42 -0800 (PST) Date: Thu, 4 Jan 2024 13:24:39 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.195.gebba966016-goog Message-ID: <20240104212439.3276458-1-maheshb@google.com> Subject: [PATCHv3 net-next 2/3] ptp: add ioctl interface for ptp_gettimex64any() From: Mahesh Bandewar To: Netdev , Linux , David Miller , Jakub Kicinski , Eric Dumazet , Paolo Abeni Cc: Jonathan Corbet , John Stultz , Don Hatchett , Yuliang Li , Mahesh Bandewar , Mahesh Bandewar , Richard Cochran , Willem de Bruijn X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787196639758610886 X-GMAIL-MSGID: 1787196639758610886 add an ioctl op PTP_SYS_OFFSET_ANY to support newly added ptp_gettimex64any() method Signed-off-by: Mahesh Bandewar CC: Richard Cochran CC: "David S. Miller" CC: John Stultz CC: Jakub Kicinski CC: "Willem de Bruijn" CC: netdev@vger.kernel.org --- drivers/ptp/ptp_chardev.c | 37 ++++++++++++++++++++++++++++++++++ include/uapi/linux/ptp_clock.h | 14 +++++++++++++ 2 files changed, 51 insertions(+) diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c index 7513018c9f9a..f20d43c34aec 100644 --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -161,6 +161,7 @@ long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, struct ptp_clock *ptp = container_of(pccontext->clk, struct ptp_clock, clock); struct ptp_sys_offset_extended *extoff = NULL; + struct ptp_sys_offset_any *anyoff = NULL; struct ptp_sys_offset_precise precise_offset; struct system_device_crosststamp xtstamp; struct ptp_clock_info *ops = ptp->info; @@ -378,6 +379,42 @@ long ptp_ioctl(struct posix_clock_context *pccontext, unsigned int cmd, err = -EFAULT; break; + case PTP_SYS_OFFSET_ANY: + if (!ptp->info->gettimex64any) { + err = -EOPNOTSUPP; + break; + } + anyoff = memdup_user((void __user *)arg, sizeof(*anyoff)); + if (IS_ERR(anyoff)) { + err = PTR_ERR(anyoff); + anyoff = NULL; + break; + } + if (anyoff->n_samples > PTP_MAX_SAMPLES + || anyoff->rsv[0] || anyoff->rsv[1] + || (anyoff->clockid != CLOCK_REALTIME + && anyoff->clockid != CLOCK_MONOTONIC + && anyoff->clockid != CLOCK_MONOTONIC_RAW)) { + err = -EINVAL; + break; + } + + for (i = 0; i < anyoff->n_samples; i++) { + err = ptp->info->gettimex64any(ptp->info, &ts, &sts, + anyoff->clockid); + if (err) + goto out; + anyoff->ts[i][0].sec = sts.pre_ts.tv_sec; + anyoff->ts[i][0].nsec = sts.pre_ts.tv_nsec; + anyoff->ts[i][1].sec = ts.tv_sec; + anyoff->ts[i][1].nsec = ts.tv_nsec; + anyoff->ts[i][2].sec = sts.post_ts.tv_sec; + anyoff->ts[i][2].nsec = sts.post_ts.tv_nsec; + } + if (copy_to_user((void __user *)arg, anyoff, sizeof(*anyoff))) + err = -EFAULT; + break; + case PTP_SYS_OFFSET: case PTP_SYS_OFFSET2: sysoff = memdup_user((void __user *)arg, sizeof(*sysoff)); diff --git a/include/uapi/linux/ptp_clock.h b/include/uapi/linux/ptp_clock.h index da700999cad4..a3143df8de2b 100644 --- a/include/uapi/linux/ptp_clock.h +++ b/include/uapi/linux/ptp_clock.h @@ -158,6 +158,18 @@ struct ptp_sys_offset_extended { struct ptp_clock_time ts[PTP_MAX_SAMPLES][3]; }; +struct ptp_sys_offset_any { + unsigned int n_samples; /* Desired number of measurements. */ + clockid_t clockid; /* One of the supported ClockID */ + unsigned int rsv[2]; /* Reserved for future use. */ + /* + * Array of [TS, phc, TS] time stamps. The kernel will provide + * 3*n_samples time stamps. + * TS is any of the ts_type requested. + */ + struct ptp_clock_time ts[PTP_MAX_SAMPLES][3]; +}; + struct ptp_sys_offset_precise { struct ptp_clock_time device; struct ptp_clock_time sys_realtime; @@ -226,6 +238,8 @@ struct ptp_pin_desc { _IOWR(PTP_CLK_MAGIC, 18, struct ptp_sys_offset_extended) #define PTP_MASK_CLEAR_ALL _IO(PTP_CLK_MAGIC, 19) #define PTP_MASK_EN_SINGLE _IOW(PTP_CLK_MAGIC, 20, unsigned int) +#define PTP_SYS_OFFSET_ANY \ + _IOWR(PTP_CLK_MAGIC, 21, struct ptp_sys_offset_any) struct ptp_extts_event { struct ptp_clock_time t; /* Time event occured. */ From patchwork Thu Jan 4 21:24:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?TWFoZXNoIEJhbmRld2FyICjgpK7gpLngpYfgpLYg4KSs4KSC4KSh4KWH4KS14KS+4KSwKQ==?= X-Patchwork-Id: 185149 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:6f82:b0:100:9c79:88ff with SMTP id tb2csp5879070dyb; Thu, 4 Jan 2024 13:25:52 -0800 (PST) X-Google-Smtp-Source: AGHT+IENhL5gDQIUqwRSfdKBt2zNgT7MVJJcH/Lv7q+kysFkiNl+Rub0JAlkyb/C9/mnE4UV5icE X-Received: by 2002:a50:d011:0:b0:557:1c28:ca81 with SMTP id j17-20020a50d011000000b005571c28ca81mr192863edf.75.1704403552343; Thu, 04 Jan 2024 13:25:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704403552; cv=none; d=google.com; s=arc-20160816; b=yTS/MynJYyWPmlyPSc/MJtNI8dWHlxRLvQM3sqrEtYshqMt1/NTUMxr+rxlkd5OvJX sAhKSvQd8s9r+m1Mif+eHaAZsmb3MBj84HmZZCIW3HCgE65czDQmKae1+v+mkeNMUrib llztEAtfvX/q7pUaMBvGMIeTU5YbbfzS0QAbkoB/eZhjK7PAJvetRrZpDdvFTr/p6jMF RoL/HKNREZbIYQNV0ODkrWq+kLiE870Ef+hoEYC3/GCsuVq4bKJFW3zoFk593CboXfPg w80cTMlZH/0iZsbc02fukF1rMGxsfrYXEnSXY7HPencZctokLox3BYepqeaKY/lDDP28 52pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:dkim-signature; bh=xENgso4n4fwY8PEdZvKR4PshgcWGW2WWHOQxmwL55XE=; fh=YVf8dvbOFTeo8oPGAsDfYfWFMCtVV2RMShOveFVmuYQ=; b=WR+lirfyPpOJ0qBm9l9Wzr3wUjG02gLgh7qpkqbVt89EDPBzdDvHnt+m9Cx+wroGOp gPMFHvpdeUDIvH53G/sJ3MdQrUBW2+ULysEZFXVQrrn/oTvEquZPUSjSd2qw96P8newD DUTtMfRwL4ae+7QmfKldukN77tunK0FAh7AofZwCyW3R71dwGk5BNYkaWRbSN+KvBvVR txwgKTceCvQJ6PaQEHyBEvtW8/anwRt11+BNFhYTSJswVgbXljx2zBMlRzb/jDHL+Ja3 I4D/Y6o5+YFrAdHjrl0FMxgAgvM1zaSmJryKTOQ2YjZupIXZH6QdcRZXqWpivHGGDmWT RqGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=RhwXOTh4; spf=pass (google.com: domain of linux-kernel+bounces-17237-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17237-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id n2-20020a5099c2000000b00554de459315si102695edb.284.2024.01.04.13.25.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 13:25:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-17237-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=RhwXOTh4; spf=pass (google.com: domain of linux-kernel+bounces-17237-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-17237-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id D3ECD1F2557D for ; Thu, 4 Jan 2024 21:25:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7E0862C6AE; Thu, 4 Jan 2024 21:24:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RhwXOTh4" X-Original-To: linux-kernel@vger.kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62E082D040 for ; Thu, 4 Jan 2024 21:24:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--maheshb.bounces.google.com Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5efb07ddb0fso15213697b3.0 for ; Thu, 04 Jan 2024 13:24:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704403485; x=1705008285; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=xENgso4n4fwY8PEdZvKR4PshgcWGW2WWHOQxmwL55XE=; b=RhwXOTh4OY7SZ5jAZ7pJ8OlxR54FOn2ymG4/SAY5qUum+8C5PPEPwbPiSFZv3lecBr ZoeaxigfJ6z6jfcOh9/ha5W92Kt3Ws9Rf5081MIM1g27iwzlztmr9iXLli2KMYgxZqv6 J5x3dyrnROefuig2qclji6EntxBflTc7Hln9zd6v6V4tSzRXYgJX6Lpi/orhaFRhPnf3 LfNQBcvQcllO95nsLmL2AAtLFlqcwPoieCFV6f1x9GhHH/sH/G/4iWMTPcucmVag2oce 7bkxzaQwRc+wNI6GellgSWeGCdKOg2RAz1NdUbfNZJm7b5bbrS13Tr2sQvz3/xPEgSvC 6gcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704403485; x=1705008285; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xENgso4n4fwY8PEdZvKR4PshgcWGW2WWHOQxmwL55XE=; b=D2wltdNaL2AaVrFX4UwwQZfxJ70zb4y4qKXfYoIforSXuLP29UeDDo1VT5+h94P74c IU8Ao5nBx0xnSNXqn9ZWWwD81ZnxMz+W9Ld1ALo7L72XyZzO0Q09OOyJ1LsmV7xjFS+I iPNSYoFIjwCbw7vCuuRDj4uB4MAcSkogW2FaGrCLvfaeZTMgdr7UJMWFb2whOqwoMjB8 OuVHxM3kEvfMJ1d36EWJXjRxct0OwDV8Joyu6tn1YJS06BlGwnEZMSjWgaf05M63RqF9 mKgNysgAK2t7mnjmbUy60F6zYZ7vtZ7QAAA6XppKaS56mJXnThLnru0JslgrK5fnzKMV L9uQ== X-Gm-Message-State: AOJu0YzYtKUAn/z/gqG9r2gIDNzyqov2RQnV44WEpgR6Zo3vIwLEEvis IBPKtzAw1yQGbjhOz/y1/wYuQSt1hp2310g3HgI= X-Received: from coldfire.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:2b7a]) (user=maheshb job=sendgmr) by 2002:a05:690c:303:b0:5d3:b449:e58e with SMTP id bg3-20020a05690c030300b005d3b449e58emr494691ywb.6.1704403485511; Thu, 04 Jan 2024 13:24:45 -0800 (PST) Date: Thu, 4 Jan 2024 13:24:42 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.195.gebba966016-goog Message-ID: <20240104212442.3276812-1-maheshb@google.com> Subject: [PATCHv3 net-next 3/3] selftest/ptp: extend test to include ptp_gettimex64any() From: Mahesh Bandewar To: Netdev , Linux , David Miller , Jakub Kicinski , Eric Dumazet , Paolo Abeni Cc: Jonathan Corbet , John Stultz , Don Hatchett , Yuliang Li , Mahesh Bandewar , Mahesh Bandewar , Richard Cochran , Willem de Bruijn , linux-kselftest@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787196659739447684 X-GMAIL-MSGID: 1787196659739447684 Update testptp.c to exercise the new ptp method gettimex64any(). When only -x option is given the PTP_SYS_OFFSET_EXTENDED or gettimex64() method is exercised while presence of -x with -y will exercise PTP_SYS_OFFSET_ANY or gettimex64any() method. -y option is to choose the timebase from available options of real, mono, or raw. Signed-off-by: Mahesh Bandewar CC: Richard Cochran CC: "David S. Miller" CC: John Stultz CC: Jakub Kicinski CC: "Willem de Bruijn" CC: linux-kselftest@vger.kernel.org CC: netdev@vger.kernel.org --- tools/testing/selftests/ptp/testptp.c | 96 ++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/ptp/testptp.c b/tools/testing/selftests/ptp/testptp.c index 011252fe238c..dd390062b883 100644 --- a/tools/testing/selftests/ptp/testptp.c +++ b/tools/testing/selftests/ptp/testptp.c @@ -146,8 +146,9 @@ static void usage(char *progname) " -T val set the ptp clock time to 'val' seconds\n" " -x val get an extended ptp clock time with the desired number of samples (up to %d)\n" " -X get a ptp clock cross timestamp\n" + " -y val sandwich timebase to use {real|mono|raw}\n" " -z test combinations of rising/falling external time stamp flags\n", - progname, PTP_MAX_SAMPLES); + progname, PTP_MAX_SAMPLES, PTP_MAX_SAMPLES); } int main(int argc, char *argv[]) @@ -163,6 +164,7 @@ int main(int argc, char *argv[]) struct ptp_sys_offset *sysoff; struct ptp_sys_offset_extended *soe; struct ptp_sys_offset_precise *xts; + struct ptp_sys_offset_any *ats; char *progname; unsigned int i; @@ -183,6 +185,8 @@ int main(int argc, char *argv[]) int pct_offset = 0; int getextended = 0; int getcross = 0; + int get_ext_any = 0; + clockid_t ext_any_clkid = -1; int n_samples = 0; int pin_index = -1, pin_func; int pps = -1; @@ -198,7 +202,7 @@ int main(int argc, char *argv[]) progname = strrchr(argv[0], '/'); progname = progname ? 1+progname : argv[0]; - while (EOF != (c = getopt(argc, argv, "cd:e:f:F:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xz"))) { + while (EOF != (c = getopt(argc, argv, "cd:e:f:F:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xy:z"))) { switch (c) { case 'c': capabilities = 1; @@ -278,6 +282,20 @@ int main(int argc, char *argv[]) case 'X': getcross = 1; break; + case 'y': + if (!strcasecmp(optarg, "real")) + ext_any_clkid = CLOCK_REALTIME; + else if (!strcasecmp(optarg, "mono")) + ext_any_clkid = CLOCK_MONOTONIC; + else if (!strcasecmp(optarg, "raw")) + ext_any_clkid = CLOCK_MONOTONIC_RAW; + else { + fprintf(stderr, + "type needs to be one of real,mono,raw only; was given %s\n", + optarg); + return -1; + } + break; case 'z': flagtest = 1; break; @@ -291,6 +309,18 @@ int main(int argc, char *argv[]) } } + /* For ptp_sys_offset_any both options 'x', 'y' must be given */ + if (ext_any_clkid > -1) { + if (getextended == 0) { + fprintf(stderr, + "For extended-any TS both options -x, and -y are required.\n"); + usage(progname); + return -1; + } + get_ext_any = getextended; + getextended = 0; + } + fd = open(device, O_RDWR); if (fd < 0) { fprintf(stderr, "opening %s: %s\n", device, strerror(errno)); @@ -621,6 +651,68 @@ int main(int argc, char *argv[]) } } + if (get_ext_any) { + ats = calloc(1, sizeof(*ats)); + if (!ats) { + perror("calloc"); + return -1; + } + + ats->n_samples = get_ext_any; + ats->clockid = ext_any_clkid; + + if (ioctl(fd, PTP_SYS_OFFSET_ANY, ats)) { + perror("PTP_SYS_OFFSET_ANY"); + } else { + printf("extended-any timestamp request returned %d samples\n", + get_ext_any); + + for (i = 0; i < get_ext_any; i++) { + switch (ext_any_clkid) { + case CLOCK_REALTIME: + printf("sample #%2d: system time before: %lld.%09u\n", + i, ats->ts[i][0].sec, + ats->ts[i][0].nsec); + break; + case CLOCK_MONOTONIC: + printf("sample #%2d: monotonic time before: %lld.%09u\n", + i, ats->ts[i][0].sec, + ats->ts[i][0].nsec); + break; + case CLOCK_MONOTONIC_RAW: + printf("sample #%2d: raw-monotonic time before: %lld.%09u\n", + i, ats->ts[i][0].sec, + ats->ts[i][0].nsec); + break; + default: + break; + } + printf(" phc time: %lld.%09u\n", + ats->ts[i][1].sec, ats->ts[i][1].nsec); + switch (ext_any_clkid) { + case CLOCK_REALTIME: + printf(" system time after: %lld.%09u\n", + ats->ts[i][2].sec, + ats->ts[i][2].nsec); + break; + case CLOCK_MONOTONIC: + printf(" monotonic time after: %lld.%09u\n", + ats->ts[i][2].sec, + ats->ts[i][2].nsec); + break; + case CLOCK_MONOTONIC_RAW: + printf(" raw-monotonic time after: %lld.%09u\n", + ats->ts[i][2].sec, + ats->ts[i][2].nsec); + break; + default: + break; + } + } + } + + free(ats); + } close(fd); return 0; }