From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pdx-out-005.esa.us-west-2.outbound.mail-perimeter.amazon.com (pdx-out-005.esa.us-west-2.outbound.mail-perimeter.amazon.com [52.13.214.179]) (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 45A663D952E; Fri, 17 Jul 2026 06:59:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=52.13.214.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784271585; cv=none; b=ub3hvgdRnwgykpU/1KCc1aW/ZztSnMbz6zPWM/DBbdyXqOKgH4wCMOk8dCUdomiYgYFOyClReaXR90WS9csdGsHY3QLkw+/uQuf0lFcTBJRHVpeDUyL7gUWw2InaShIGanvJMRRzDm3NFN5grwjMRKB/mDUD6zsSQr6FOkBwWXA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784271585; c=relaxed/simple; bh=/Eb4pGZIUiO1BtW8WvwAJ4WS2WCw3AW7JzyVDb94x5I=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=PtVraI8BunkZHTIEG4Cl+cCLO8igQ5fsFYNbtzSajLMA3TP2M8pRUrZiqOR+dyKtM3HBKcCyFGv03h2tCBPZy/+GP8Ay/k5KCjB2MTWjMQkvkUGUnqHunzsGvQKMWRdFJGTvrqqUyQKJAMi9UyMVgmKKXNyVa2+ZF7pbG2k7McI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.com; spf=pass smtp.mailfrom=amazon.com; dkim=pass (2048-bit key) header.d=amazon.com header.i=@amazon.com header.b=tdw7Uuie; arc=none smtp.client-ip=52.13.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amazon.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=amazon.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=amazon.com header.i=@amazon.com header.b="tdw7Uuie" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazoncorp2; t=1784271584; x=1815807584; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=KzZoZyH66Gr1YaLwfbHY8NCjXtnD+WSpcnpvxY5Pf9g=; b=tdw7UuieE8NLXdAULoTgX0XMMS717ZHv3ZmpUZc2Waf2epkDH4R89zyc pW0E68lzmU8Z53djKHmWL32yEdsUAPSm+0QRnOZ43L9Mox6KARDsW616e ZHbyyuBna5t2y1yUmmojlc0DiKG5WsGkPCu2maAchioLpY9nPJCyH7Bxa 1/cmjZUqK5HfusH9PAtw8yk5+XsDrIpWqnOunZ7hOR3Bn6XMICcgc+29A qy+/kfflr8D68zO3Cx436kULA+E7Ln3Y1zzyzq3sZXeNX1BaeGYX8dTLg udVPNbUIwWcDa0ffwEpLgVLCtPoFpPxGgAo24YoYfGR3dzbvQGtYZOpFU Q==; X-CSE-ConnectionGUID: 0m/tP6S7SJyT3lcwjyrtuA== X-CSE-MsgGUID: iZdeqcfLRKOADf1hQ0tayA== X-IronPort-AV: E=Sophos;i="6.25,168,1779148800"; d="scan'208";a="23825494" Received: from ip-10-5-12-219.us-west-2.compute.internal (HELO smtpout.naws.us-west-2.prod.farcaster.email.amazon.dev) ([10.5.12.219]) by internal-pdx-out-005.esa.us-west-2.outbound.mail-perimeter.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jul 2026 06:59:41 +0000 Received: from EX19MTAUWC001.ant.amazon.com [205.251.233.105:17743] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.48.250:2525] with esmtp (Farcaster) id 3f68c504-f813-46fe-b5e4-1fa6b881a54b; Fri, 17 Jul 2026 06:59:41 +0000 (UTC) X-Farcaster-Flow-ID: 3f68c504-f813-46fe-b5e4-1fa6b881a54b Received: from EX19D001UWA001.ant.amazon.com (10.13.138.214) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.43; Fri, 17 Jul 2026 06:59:40 +0000 Received: from dev-dsk-akiyano-1c-2138b29d.eu-west-1.amazon.com (172.19.83.6) by EX19D001UWA001.ant.amazon.com (10.13.138.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.43; Fri, 17 Jul 2026 06:59:34 +0000 From: Arthur Kiyanovski To: David Miller , Jakub Kicinski , CC: Arthur Kiyanovski , Richard Cochran , Eric Dumazet , Paolo Abeni , David Woodhouse , Thomas Gleixner , Miroslav Lichvar , Andrew Lunn , Wen Gu , Xuan Zhuo , David Woodhouse , "Yonatan Sarna" , Zorik Machulsky , "Alexander Matushevsky" , Saeed Bshara , Matt Wilson , Anthony Liguori , Nafea Bshara , Evgeny Schmeilin , Netanel Belgazal , Ali Saidi , Benjamin Herrenschmidt , Noam Dagan , David Arinzon , Evgeny Ostrovsky , Ofir Tabachnik , Amit Bernstein , , , , Jonathan Corbet , Shuah Khan , Simon Horman , Bjorn Helgaas , Subject: [PATCH v5 net-next 0/7] ptp: Add PHC timestamp quality attributes Date: Fri, 17 Jul 2026 06:59:11 +0000 Message-ID: <20260717065924.2556-1-akiyano@amazon.com> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-ClientProxiedBy: EX19D041UWA002.ant.amazon.com (10.13.139.121) To EX19D001UWA001.ant.amazon.com (10.13.138.214) This series adds quality attributes to PTP Hardware Clock (PHC) timestamps, allowing userspace to obtain error bound, clock status, timescale, and system counter values alongside timestamps in a single call. Motivation ---------- The existing PTP APIs return timestamps without any indication of their quality. Applications that need clock accuracy and synchronization status commonly rely on external tools such as ptp4l, which implement synchronization logic and can export their measurement of clock accuracy. For managed PHC devices — such as the ENA network adapter, whose clock is synchronized by the device without userspace involvement — these tools are not available, and the existing APIs lack a way to report quality metrics to consumers of time. This was previously proposed as an RFC [1] with a single ioctl. Based on community feedback, the design was reworked to cover both the extended (multi-sample) and precise (cross-timestamp) paths. Design ------ The UAPI was redesigned based on Thomas Gleixner's proposal [2]: - A unified data structure (struct ptp_sys_offset_attrs) is used for both extended and precise ioctls. - A u32 valid bitmask in struct ptp_clock_attrs indicates which attributes are populated, replacing sentinel values. Drivers set only the bits for attributes they provide. - System counter values (cycles + counter_id) are carried in struct ptp_sys_time alongside each system timestamp. These are populated by the timekeeping core cross-timestamp infrastructure, which is now merged in net-next [3] — drivers do not fill them. This series therefore applies directly to net-next with no out-of-tree dependency. - Graceful degradation: the attrs ioctls work even on devices without attrs callbacks, falling back to gettimex64 / getcrosststamp and returning attrs.valid = 0. A capability flag is added to ptp_clock_caps so userspace can discover attributes support. Patches 2-3 add testptp support for the new ioctls. Patch 4 implements the attributes for ptp_vmclock, reporting error bound, clock status, and timescale. Patches 5-7 implement the attributes for the ENA driver, reporting error bound from the device's PHC layer. v5: - ptp: simplify ptp_sys_offset_{extended,precise}_attrs() to copy the request header onto the stack and allocate the result buffer once, instead of memdup_user() + kfree() + kzalloc(). (Saeed Bshara) - ptp: deduplicate the kernel-doc for gettimexattrs64 / getcrosststampattrs by referencing the base gettimex64 / getcrosststamp callbacks. (Saeed Bshara) - ptp: add missing kernel-doc member descriptions for struct ptp_timestamp and struct ptp_sys_offset_attrs. - selftests/ptp: map the clockid to a name and print once instead of three duplicated printfs. (Saeed Bshara) - selftests/ptp: make -a a modifier on -x/-X instead of an exclusive option; drop -A (use -X -a); trim the unknown-clock output; print "not reported" for attributes the device does not report. (Saeed Bshara) - ptp_vmclock: scope the local 'st' inside the SUPPORT_KVMCLOCK block to fix an unused-variable warning on !CONFIG_KVM_GUEST. (kernel test robot) - No UAPI changes; the ioctl structures are unchanged from v4. v4: - Complete UAPI redesign per Thomas Gleixner's proposal [2]: unified data structure with u32 valid bitmask, system counter in ptp_sys_time (populated by core, not drivers), graceful degradation for devices without attrs callbacks. (Thomas Gleixner, David Woodhouse) - Counter values moved from driver attrs callback to timekeeping core infrastructure — drivers no longer set counter_id or counter_value. - Flexible array member for timestamps[] (kernel bounds the copy, userspace allocates for num_samples requested). - Drop separate ptp_clock_attributes kernel struct — driver callbacks fill the UAPI ptp_clock_attrs directly. v3: - Remove patch 5/8 from v2 (return-code bugfix) — sent separately as [PATCH net] to the net tree. - Zero-initialize struct ptp_clock_attributes in PTP core ioctl handlers to prevent stack leak of unset fields. (Simon Horman, sashiko) - ptp_vmclock: validate counter_period_shift < 128 to prevent undefined behavior on untrusted hypervisor input. (sashiko) - ptp_vmclock: add overflow check on err_hi * NSEC_PER_SEC to prevent silent wraparound producing erroneously small error bound. (sashiko) - ptp_vmclock: report PTP_TIMESCALE_TAI after tai_adjust() to avoid timescale mismatch. (sashiko) - ENA: set counter_id = 0, counter_value = 0 in gettimexattrs64 for defense-in-depth. (sashiko) v2: - Fix build bisectability: move ena_com.c consumer updates into patch 6/8 and ena_phc.c caller update into patch 7/8 so each patch compiles independently. - Add missing Cc for Amit Bernstein (co-author of ENA patches). [1] https://lore.kernel.org/netdev/20250724115657.150-1-darinzon@amazon.com/ [2] https://lore.kernel.org/all/87se7ht25o.ffs@tglx/ [3] https://lore.kernel.org/all/20260526165826.392227559@kernel.org/ Arthur Kiyanovski (7): ptp: Add ioctls for PHC timestamps with quality attributes selftests/ptp: Extract print_system_timestamp helper in testptp selftests/ptp: Add testptp support for attributes ioctls ptp: ptp_vmclock: Implement attributes ioctls net: ena: Update PHC admin interface for error bound support net: ena: Add error bound to PHC communication layer net: ena: Implement gettimexattrs64 callback for PTP attributes .../device_drivers/ethernet/amazon/ena.rst | 2 + .../net/ethernet/amazon/ena/ena_admin_defs.h | 17 +- drivers/net/ethernet/amazon/ena/ena_com.c | 51 ++-- drivers/net/ethernet/amazon/ena/ena_com.h | 5 +- drivers/net/ethernet/amazon/ena/ena_debugfs.c | 3 + drivers/net/ethernet/amazon/ena/ena_phc.c | 61 +++- drivers/ptp/ptp_chardev.c | 165 ++++++++++- drivers/ptp/ptp_clock.c | 4 +- drivers/ptp/ptp_vmclock.c | 197 +++++++++++-- include/linux/ptp_clock_kernel.h | 19 ++ include/uapi/linux/ptp_clock.h | 265 +++++++++++++++++- tools/testing/selftests/ptp/testptp.c | 189 ++++++++++--- 12 files changed, 868 insertions(+), 110 deletions(-) base-commit: f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e -- 2.47.3