On 10/28/25 1:00 AM, Daniel Zahka wrote:
From: Jakub Kicinski kuba@kernel.org
Provide a driver api for reporting device statistics required by the "Implementation Requirements" section of the PSP Architecture Specification. Use a warning to ensure drivers report stats required by the spec.
Signed-off-by: Jakub Kicinski kuba@kernel.org Signed-off-by: Daniel Zahka daniel.zahka@gmail.com
Documentation/netlink/specs/psp.yaml | 55 ++++++++++++++++++++++++++++ include/net/psp/types.h | 26 +++++++++++++ include/uapi/linux/psp.h | 8 ++++ net/psp/psp_main.c | 3 +- net/psp/psp_nl.c | 22 ++++++++++- 5 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/Documentation/netlink/specs/psp.yaml b/Documentation/netlink/specs/psp.yaml index 914148221384..f3a57782d2cf 100644 --- a/Documentation/netlink/specs/psp.yaml +++ b/Documentation/netlink/specs/psp.yaml @@ -98,6 +98,61 @@ attribute-sets: Number of times a socket's Rx got shut down due to using a key which went stale (fully rotated out). Kernel statistic.
-name: rx-packetstype: uintdoc: |Number of successfully processed and authenticated PSP packets.Device statistic (from the PSP spec).-name: rx-bytestype: uintdoc: |Number of successfully authenticated PSP bytes received, counting fromthe first byte after the IV through the last byte of payload.The fixed initial portion of the PSP header (16 bytes)and the PSP trailer/ICV (16 bytes) are not included in this count.Device statistic (from the PSP spec).-name: rx-auth-failtype: uintdoc: |Number of received PSP packets with unsuccessful authentication.Device statistic (from the PSP spec).-name: rx-errortype: uintdoc: |Number of received PSP packets with length/framing errors.Device statistic (from the PSP spec).-name: rx-badtype: uintdoc: |Number of received PSP packets with miscellaneous errors(invalid master key indicated by SPI, unsupported version, etc.)Device statistic (from the PSP spec).-name: tx-packetstype: uintdoc: |Number of successfully processed PSP packets for transmission.Device statistic (from the PSP spec).-name: tx-bytestype: uintdoc: |Number of successfully processed PSP bytes for transmit, counting fromthe first byte after the IV through the last byte of payload.The fixed initial portion of the PSP header (16 bytes)and the PSP trailer/ICV (16 bytes) are not included in this count.Device statistic (from the PSP spec).-name: tx-errortype: uintdoc: |Number of PSP packets for transmission with errors.Device statistic (from the PSP spec).operations: list: diff --git a/include/net/psp/types.h b/include/net/psp/types.h index 5b0ccaac3882..1aa3857a85c1 100644 --- a/include/net/psp/types.h +++ b/include/net/psp/types.h @@ -150,6 +150,25 @@ struct psp_assoc { u8 drv_data[] __aligned(8); }; +struct psp_dev_stats {
- union {
struct {u64 rx_packets;u64 rx_bytes;u64 rx_auth_fail;u64 rx_error;u64 rx_bad;u64 tx_packets;u64 tx_bytes;u64 tx_error;};DECLARE_FLEX_ARRAY(u64, required);- };
- char required_end[0];
This makes static checker unhappy:
/home/cocci/testing/include/net/psp/types.h:167:6-18: WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-a...)
I think/guess the warning could be avoided using something alike the following (completely untested!!!):
struct psp_dev_stats { struct_group(required, union { struct { u64 rx_packets; u64 rx_bytes; u64 rx_auth_fail; u64 rx_error; u64 rx_bad; u64 tx_packets; u64 tx_bytes; u64 tx_error; }; DECLARE_FLEX_ARRAY(u64, required); }; ); };
// ... const unsigned int required_cnt = sizeof(stats.required) / sizeof(u64);