lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20231017052457.25287-1-lakshmi.sowjanya.d@intel.com>
Date:   Tue, 17 Oct 2023 10:54:51 +0530
From:   lakshmi.sowjanya.d@...el.com
To:     tglx@...utronix.de, jstultz@...gle.com, giometti@...eenne.com,
        corbet@....net, linux-kernel@...r.kernel.org
Cc:     x86@...nel.org, linux-doc@...r.kernel.org,
        andriy.shevchenko@...ux.intel.com, eddie.dong@...el.com,
        christopher.s.hall@...el.com, pandith.n@...el.com,
        mallikarjunappa.sangannavar@...el.com, thejesh.reddy.t.r@...el.com,
        lakshmi.sowjanya.d@...el.com
Subject: [PATCH v1 0/6] Add support for Intel PPS Generator

From: Lakshmi Sowjanya D <lakshmi.sowjanya.d@...el.com>

The goal of the PPS(Pulse Per Second) hardware/software is to generate a
signal from the system on a wire so that some third-party hardware can
observe that signal and judge how close the system's time is to another
system or piece of hardware.

Existing methods (like parallel ports) require software to flip a bit at
just the right time to create a PPS signal. Many things can prevent
software from doing this precisely. This (Timed I/O) method is better
because software only "arms" the hardware in advance and then depends on
the hardware to "fire" and flip the signal at just the right time.

To generate a PPS signal with this new hardware, the kernel wakes up
twice a second, once for 1->0 edge and other for the 0->1 edge. It does
this shortly (~10ms) before the actual change in the signal needs to be
made. It computes the TSC value at which edge will happen, convert to a
value hardware understands and program this value to Timed I/O hardware.
The actual edge transition happens without any further action from the
kernel.

The result here is a signal coming out of the system that is roughly
1,000 times more accurate than the old methods. If the system is heavily
loaded, the difference in accuracy is larger in old methods.
Facebook and Google are the customers that use this feature.

Application Interface:
The API to use Timed I/O is very simple. It is enabled and disabled by
writing a '1' or '0' value to the sysfs enable attribute associated with
the Timed I/O PPS device. Each Timed I/O pin is represented by a PPS
device. When enabled, a pulse-per-second(PPS) synchronized with the
system clock is continuously produced on the Timed I/O pin, otherwise it
is pulled low.

The Timed I/O signal on the motherboard is enabled in the BIOS setup.

References:
https://en.wikipedia.org/wiki/Pulse-per-second_signal
https://drive.google.com/file/d/1vkBRRDuELmY8I3FlfOZaEBp-DxLW6t_V/view
https://youtu.be/JLUTT-lrDqw

Patch 1 contains the conversion from system time to system counter i.e
the format that the hardware understands.
Patch 2 has the conversion from TSC(Time stamp counter) to ART(Always
running timer) time.
Patch 3 introduces the interface to check if the clock source is related
to ART.
Patch 4 adds the pps(pulse per second) generator tio driver to the pps
subsystem.
Patch 5 documentation and usage of the pps tio generator module.
Patch 6 includes documentation for sysfs interface.

Please help to review the changes.

Thanks in advance,
Sowjanya

Lakshmi Sowjanya D (6):
  kernel/time: Add system time to system counter conversion
  x86/tsc: Convert Time Stamp Counter (TSC) value to Always Running
    Timer (ART)
  x86/tsc: Check if the current clock source is related to ART(Always
    Running Timer)
  pps: generators: Add PPS Generator TIO Driver
  Documentation: driver-api: pps: Add Intel Timed I/O PPS generator
  ABI: pps: Add ABI documentation for Intel TIO

 .../ABI/testing/sysfs-platform-pps-tio        |   7 +
 Documentation/driver-api/pps.rst              |  22 ++
 arch/x86/include/asm/tsc.h                    |   4 +
 arch/x86/kernel/tsc.c                         |  44 +++
 drivers/pps/generators/Kconfig                |  16 +
 drivers/pps/generators/Makefile               |   1 +
 drivers/pps/generators/pps_gen_tio.c          | 302 ++++++++++++++++++
 include/linux/timekeeping.h                   |   5 +
 kernel/time/timekeeping.c                     |  69 ++++
 9 files changed, 470 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-platform-pps-tio
 create mode 100644 drivers/pps/generators/pps_gen_tio.c

-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ