)]}'
{
  "commit": "b5e76712d12bee6396a6232e659ea7f10758e48b",
  "tree": "067fdf88c3a874c8c6e2594aec5d35db3c3433de",
  "parents": [
    "8bd15be7268f91f135f4bd4df5509b8fd9fcd731"
  ],
  "author": {
    "name": "Ard Biesheuvel",
    "email": "ardb@kernel.org",
    "time": "Wed Oct 01 13:59:42 2025 +0200"
  },
  "committer": {
    "name": "Ard Biesheuvel",
    "email": "ardb@kernel.org",
    "time": "Wed Oct 01 13:59:42 2025 +0200"
  },
  "message": "arm64/fpsimd: Allocate kernel mode FP/SIMD buffers on the stack\n\nCommit aefbab8e77eb16b5\n\n  (\"arm64: fpsimd: Preserve/restore kernel mode NEON at context switch\")\n\nadded a \u0027kernel_fpsimd_state\u0027 field to struct thread_struct, which is\nthe arch-specific portion of struct task_struct, and is allocated for\neach task in the system. The size of this field is 528 bytes, resulting\nin non-trivial bloat of task_struct, and the resulting memory overhead\nmay impact performance on systems with many processes.\n\nThis allocation is only used if the task is scheduled out or interrupted\nby a softirq while using the FP/SIMD unit in kernel mode, and given that\ncalls to kernel_neon_begin() and kernel_neon_end() are now guaranteed to\noriginate from the same lexical scope, it is possible to transparently\nallocate this buffer on the caller\u0027s stack instead.\n\nSo tweak the \u0027ksimd\u0027 scoped guard implementation so that a stack buffer\nis allocated and passed to both kernel_neon_begin() and\nkernel_neon_end(), and record it in the task struct. Passing the address\nto both functions, and checking the addresses for consistency ensures\nthat callers of the updated bare begin/end API use it in a manner that\nis consistent with the new context switch semantics.\n\nSigned-off-by: Ard Biesheuvel \u003cardb@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d4b1d172a79b67b2b815ef7df1f617784db1416f",
      "old_mode": 33188,
      "old_path": "arch/arm64/include/asm/neon.h",
      "new_id": "acebee4605b5c5cb7d1089dc0bfdd21892067198",
      "new_mode": 33188,
      "new_path": "arch/arm64/include/asm/neon.h"
    },
    {
      "type": "modify",
      "old_id": "61d62bfd5a7bfc0289b9feb93edab93ce63534f4",
      "old_mode": 33188,
      "old_path": "arch/arm64/include/asm/processor.h",
      "new_id": "226e635c53d9b938e2c703c96c87bb032f260a3b",
      "new_mode": 33188,
      "new_path": "arch/arm64/include/asm/processor.h"
    },
    {
      "type": "modify",
      "old_id": "d9f83c47873676276dc39bde466cc4fce3bdf7d9",
      "old_mode": 33188,
      "old_path": "arch/arm64/include/asm/simd.h",
      "new_id": "7ddb25df5c9823a28d8a13f6c21ba0db06f1f2fa",
      "new_mode": 33188,
      "new_path": "arch/arm64/include/asm/simd.h"
    },
    {
      "type": "modify",
      "old_id": "c37f02d7194e0bbb6f9fef6d44d094588e2ee3ab",
      "old_mode": 33188,
      "old_path": "arch/arm64/kernel/fpsimd.c",
      "new_id": "ea9192a180aa992f2cb7b2d0ad20801525b7a0e7",
      "new_mode": 33188,
      "new_path": "arch/arm64/kernel/fpsimd.c"
    }
  ]
}
